From 9f3effd9ce39674d836be6edad1f52e87c5c7eeb Mon Sep 17 00:00:00 2001 From: Dimitrios Eftaxiopoulos Date: Sun, 14 Nov 2010 02:47:58 +0200 Subject: [PATCH] New upstream source 1.11 loaded --- CMakeLists.txt | 14 + ChangeLog.txt | 63 +- Makefile.in | 20 +- TODO | 73 +- aclocal.m4 | 49 +- autom4te.cache/output.0 | 19664 +++++++++++++++++++ autom4te.cache/output.1 | 19660 ++++++++++++++++++ autom4te.cache/requests | 279 + autom4te.cache/traces.0 | 3006 +++ autom4te.cache/traces.1 | 926 + config/config.guess | 201 +- config/config.sub | 58 +- config/libtool.m4 | 13 +- config/ltmain.sh | 8 +- config/ltversion.m4 | 10 +- config/texinfo.tex | 26 +- configure | 785 +- configure.ac | 18 + emblem.mgl | 39 + examples/Makefile.am | 10 +- examples/Makefile.in | 30 +- examples/fltk_example.cpp | 29 +- examples/full_test.cpp | 413 +- examples/qt_example.cpp | 25 + examples/test.mgl | 5 +- examples/wnd_samples.cpp | 2 +- examples/wx_example.cpp | 60 +- fonts/STIX.vfm | Bin 0 -> 931857 bytes fonts/STIX_b.vfm | Bin 0 -> 577874 bytes fonts/STIX_bi.vfm | Bin 0 -> 467229 bytes fonts/STIX_i.vfm | Bin 0 -> 471933 bytes include/Makefile.in | 5 +- include/mgl/mgl.h | 131 +- include/mgl/mgl_ab.h | 19 +- include/mgl/mgl_addon.h | 4 + include/mgl/mgl_c.h | 62 +- include/mgl/mgl_data.h | 40 +- include/mgl/mgl_define.h | 31 +- include/mgl/mgl_eps.h | 11 +- include/mgl/mgl_eval.h | 4 + include/mgl/mgl_evalc.h | 4 + include/mgl/mgl_f.h | 59 +- include/mgl/mgl_fltk.h | 4 + include/mgl/mgl_font.h | 10 +- include/mgl/mgl_gl.h | 5 + include/mgl/mgl_glut.h | 4 + include/mgl/mgl_idtf.h | 4 + include/mgl/mgl_parse.h | 40 +- include/mgl/mgl_qt.h | 6 +- include/mgl/mgl_w.h | 64 +- include/mgl/mgl_wx.h | 1 + include/mgl/mgl_zb.h | 4 + lang/Makefile.in | 5 +- mgl/CMakeLists.txt | 8 +- mgl/Makefile.am | 6 +- mgl/Makefile.in | 25 +- mgl/mgl_1d.cpp | 477 +- mgl/mgl_ab.cpp | 86 +- mgl/mgl_addon.cpp | 12 +- mgl/mgl_axis.cpp | 201 +- mgl/mgl_c.cpp | 59 +- mgl/mgl_cont.cpp | 6 +- mgl/mgl_crust.cpp | 212 +- mgl/mgl_data.cpp | 309 +- mgl/mgl_data_cf.cpp | 41 +- mgl/mgl_data_io.cpp | 116 +- mgl/mgl_data_png.cpp | 19 +- mgl/mgl_eps.cpp | 328 +- mgl/mgl_eval.cpp | 86 +- mgl/mgl_evalp.cpp | 45 + mgl/mgl_exec.cpp | 672 +- mgl/mgl_export.cpp | 37 +- mgl/mgl_f.cpp | 64 +- mgl/mgl_flow.cpp | 90 +- mgl/mgl_font.cpp | 215 +- mgl/mgl_gl.cpp | 101 +- mgl/mgl_io.cpp | 313 - mgl/mgl_main.cpp | 94 +- mgl/mgl_parse.cpp | 197 +- mgl/mgl_tex_table.cpp | 4 +- mgl/mgl_vect.cpp | 18 +- mgl/mgl_zb.cpp | 151 +- mgl/mgl_zb2.cpp | 99 +- png | 1 + texinfo/CMakeLists.txt | 4 + texinfo/Makefile.am | 45 +- texinfo/Makefile.in | 159 +- texinfo/appendix_en.texi | 52 +- texinfo/appendix_ru.texi | 51 +- texinfo/class_en.texi | 840 +- texinfo/class_ru.texi | 921 +- texinfo/concept_en.texi | 171 + texinfo/concept_ru.texi | 169 + texinfo/core_en.texi | 272 +- texinfo/core_ru.texi | 254 +- texinfo/{png_static => }/cut.png | Bin texinfo/data_en.texi | 276 +- texinfo/data_ru.texi | 804 +- texinfo/ex_mgl_en.texi | 774 + texinfo/ex_mgl_ru.texi | 775 + texinfo/example_en.texi | 125 +- texinfo/example_ru.texi | 125 +- texinfo/filter.py | 23 + texinfo/{png_static => }/fltk.png | Bin texinfo/{png_static => }/glut.png | Bin texinfo/{png_static => }/gplv3-127x51.png | Bin texinfo/{png_static => }/lgplv3-147x51.png | Bin texinfo/mathgl.texi | 0 texinfo/mathgl_en.texi | 27 +- texinfo/mathgl_ru.texi | 36 +- texinfo/mgl_cmd_en.texi | 2009 ++ texinfo/mgl_cmd_ru.texi | 2011 ++ texinfo/mgl_en.texi | 1709 +- texinfo/mgl_ru.texi | 1696 +- texinfo/other_en.texi | 442 + texinfo/other_ru.texi | 442 + texinfo/overview_en.texi | 192 +- texinfo/overview_ru.texi | 184 +- texinfo/png/Makefile.in | 5 +- texinfo/png_static/BbcwyrR.png | Bin 292 -> 0 bytes texinfo/png_static/BbcyrR.png | Bin 332 -> 0 bytes texinfo/png_static/BbwgG.png | Bin 296 -> 0 bytes texinfo/png_static/BbwrR.png | Bin 296 -> 0 bytes texinfo/png_static/CcwyY.png | Bin 296 -> 0 bytes texinfo/png_static/GgwmM.png | Bin 299 -> 0 bytes texinfo/png_static/QqwcC.png | Bin 312 -> 0 bytes texinfo/png_static/bBkRr.png | Bin 263 -> 0 bytes texinfo/png_static/bcwyr.png | Bin 275 -> 0 bytes texinfo/png_static/bcyr.png | Bin 266 -> 0 bytes texinfo/png_static/bgr.png | Bin 258 -> 0 bytes texinfo/png_static/br.png | Bin 256 -> 0 bytes texinfo/png_static/bwr.png | Bin 267 -> 0 bytes texinfo/png_static/kBbcw.png | Bin 272 -> 0 bytes texinfo/png_static/kGgew.png | Bin 273 -> 0 bytes texinfo/png_static/kHCcw.png | Bin 312 -> 0 bytes texinfo/png_static/kRryw.png | Bin 269 -> 0 bytes texinfo/png_static/kw.png | Bin 256 -> 0 bytes texinfo/png_static/r.png | Bin 234 -> 0 bytes texinfo/png_static/s_aleph.png | Bin 388 -> 0 bytes texinfo/png_static/s_in.png | Bin 324 -> 0 bytes texinfo/png_static/s_sqrt.png | Bin 430 -> 0 bytes texinfo/png_static/sharp.png | Bin 396 -> 0 bytes texinfo/png_static/u2v2.png | Bin 702 -> 0 bytes texinfo/png_static/u2v2w2.png | Bin 843 -> 0 bytes texinfo/png_static/wk.png | Bin 257 -> 0 bytes texinfo/{png_static => }/qt.png | Bin texinfo/samples_en.texi | 2527 ++- texinfo/samples_ru.texi | 2535 ++- texinfo/widget_en.texi | 289 + texinfo/widget_ru.texi | 290 + utils/Makefile.am | 2 +- utils/Makefile.in | 10 +- utils/mgl2gif.cpp | 27 +- widgets/CMakeLists.txt | 8 +- widgets/Makefile.in | 5 +- widgets/mgl_fltk.cpp | 37 +- widgets/mgl_glut.cpp | 5 +- widgets/mgl_qt.cpp | 49 +- widgets/mgl_wx.cpp | 36 +- 159 files changed, 60435 insertions(+), 10073 deletions(-) create mode 100644 autom4te.cache/output.0 create mode 100644 autom4te.cache/output.1 create mode 100644 autom4te.cache/requests create mode 100644 autom4te.cache/traces.0 create mode 100644 autom4te.cache/traces.1 create mode 100644 emblem.mgl create mode 100644 fonts/STIX.vfm create mode 100644 fonts/STIX_b.vfm create mode 100644 fonts/STIX_bi.vfm create mode 100644 fonts/STIX_i.vfm delete mode 100644 mgl/mgl_io.cpp create mode 120000 png create mode 100644 texinfo/concept_en.texi create mode 100644 texinfo/concept_ru.texi rename texinfo/{png_static => }/cut.png (100%) create mode 100644 texinfo/ex_mgl_en.texi create mode 100644 texinfo/ex_mgl_ru.texi create mode 100755 texinfo/filter.py rename texinfo/{png_static => }/fltk.png (100%) rename texinfo/{png_static => }/glut.png (100%) rename texinfo/{png_static => }/gplv3-127x51.png (100%) rename texinfo/{png_static => }/lgplv3-147x51.png (100%) delete mode 100644 texinfo/mathgl.texi create mode 100644 texinfo/mgl_cmd_en.texi create mode 100644 texinfo/mgl_cmd_ru.texi create mode 100644 texinfo/other_en.texi create mode 100644 texinfo/other_ru.texi delete mode 100644 texinfo/png_static/BbcwyrR.png delete mode 100644 texinfo/png_static/BbcyrR.png delete mode 100644 texinfo/png_static/BbwgG.png delete mode 100644 texinfo/png_static/BbwrR.png delete mode 100644 texinfo/png_static/CcwyY.png delete mode 100644 texinfo/png_static/GgwmM.png delete mode 100644 texinfo/png_static/QqwcC.png delete mode 100644 texinfo/png_static/bBkRr.png delete mode 100644 texinfo/png_static/bcwyr.png delete mode 100644 texinfo/png_static/bcyr.png delete mode 100644 texinfo/png_static/bgr.png delete mode 100644 texinfo/png_static/br.png delete mode 100644 texinfo/png_static/bwr.png delete mode 100644 texinfo/png_static/kBbcw.png delete mode 100644 texinfo/png_static/kGgew.png delete mode 100644 texinfo/png_static/kHCcw.png delete mode 100644 texinfo/png_static/kRryw.png delete mode 100644 texinfo/png_static/kw.png delete mode 100644 texinfo/png_static/r.png delete mode 100644 texinfo/png_static/s_aleph.png delete mode 100644 texinfo/png_static/s_in.png delete mode 100644 texinfo/png_static/s_sqrt.png delete mode 100644 texinfo/png_static/sharp.png delete mode 100644 texinfo/png_static/u2v2.png delete mode 100644 texinfo/png_static/u2v2w2.png delete mode 100644 texinfo/png_static/wk.png rename texinfo/{png_static => }/qt.png (100%) create mode 100644 texinfo/widget_en.texi create mode 100644 texinfo/widget_ru.texi diff --git a/CMakeLists.txt b/CMakeLists.txt index 07cf8fa..8a6141c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,6 +9,7 @@ option(enable-pthread "Enable POSIX threads support") option(enable-gsl "Enable gsl support") option(enable-jpeg "Enable jpeg support") option(enable-gif "Enable gif support") +option(enable-hdf4 "Enable hdf4 support") option(enable-hdf5 "Enable hdf5 support") option(enable-hdf5_18 "Enable hdf5 1.8 support") option(enable-glut "Enable glut support") @@ -33,6 +34,9 @@ endif(enable-all OR enable-jpeg) if(enable-all OR enable-gif) set(use_gif 1) endif(enable-all OR enable-gif) +if(enable-all OR enable-hdf4) + set(use_hdf4 1) +endif(enable-all OR enable-hdf4) if(enable-all OR enable-hdf5) set(use_hdf5 1) endif(enable-all OR enable-hdf5) @@ -106,6 +110,16 @@ if(NOT GIF_FOUND) endif(use_gif) endif(NOT GIF_FOUND) +find_library(HDF4_LIB df mfhdf) +find_path(HDF4_INCLUDE_DIR hdf/mfhdf.h) +if(NOT HDF4_LIB OR NOT HDF4_INCLUDE_DIR) + if(use_hdf4) + message(SEND_ERROR "${HDF4_LIB}") + message(SEND_ERROR "${HDF4_INCLUDE_DIR}") + message(SEND_ERROR "Couldn't find HDF4 libraries.") + endif(use_hdf4) +endif(NOT HDF4_LIB OR NOT HDF4_INCLUDE_DIR) + find_library(HDF5_LIB hdf5) find_path(HDF5_INCLUDE_DIR hdf5.h) if(NOT HDF5_LIB OR NOT HDF5_INCLUDE_DIR) diff --git a/ChangeLog.txt b/ChangeLog.txt index d7d7da6..d2ad377 100644 --- a/ChangeLog.txt +++ b/ChangeLog.txt @@ -1,5 +1,63 @@ -1.10.2.1 Released ?? March 2010 - - Add multiline (i.e. separated by \n) text printing. +1.11 Released 8 November 2010 + - Add new plot Grad() -- gradient of scalar field by flow threads. + - Add new plot QuadPlot() -- plot of irregular quadrangle mesh (like TriPlot()). + - Add new plot TriCont[V]() -- contour lines for irregular triangle mesh. + - Add gradient filling in Area() and Region() plots if number of specified colors (colors in palette) is equal to 2*number of curves. + - Allow 2 colors diagrams (in Bars(), Barh()) -- one for positive, one for negative. + - Add style 'f' for Bars(), Barh() which draw diagrams like water-fall ones. + - Move argument 'above' of Bars(), Barh() to string (if it contain 'a' symbol). + - Add marks '<', '>', '#<', '#>', '#*', '#x', '#+', '#.' for left/right wire/solid triangles, Y sign, squared + and x signs. + - Add mini-dash for '=' line style symbol. + - Colorbar position can be specified in sch string: '>' - right, '<' - left, '^' - above, '_' - under. If string have 'A' then absolute coordinates is used. + - Add "styled" version of SubPlot() for better fitting of subplot according axis/colorbar/title layouts. + - Legend coordinates set absolute position if font argument contain 'A' symbol. + - Add optional gap for ColumnPlot. + - Axis now can have "arrows" at the end by setting arrow style ("AKDTVISO") for Axis(). + - Add extra text align for axis label if it is located near minimal or maximal axis value. + - Allow defining manual array in MGL command argument as [v1,v2,v3,...]. Array can be multidimensional like [[v1,v2],[v3,v4]]. + - Add functions to MGL by 'func' command. + - Add functions mglData::Hankel(), mglData::SinFFT(), mglData::CosFFT(), mglData::FillSample(). + - Add 's','c','h' symbols for Sine/Cosine/Hankel transforms in functions mglTransform(), mglTransformA(). + - Add mglData::Roll() for "rolling" data along direction. Improve Swap() function. + - Add MGL commands: "insert dat 'dir' [at=0 num=1]", "delete dat 'dir' [at=0 num=1]", "roll Dat 'dir' num". + - Now Plot() and Tens() now "accurately" cut off line segments. + - Add 'int(x)' function to the expression parser (class mglFormula). + - Add \textsc{} for small-caps to TeX parsing. + - Now $N is substituted into the second argument of MGL commands 'define', 'defnum', 'defpal', 'defchr'. + - Add definitions $a...$z used by the same order as arguments $0...$9. + - Add new function SetLegendMarks() to allow multiple marks in Legend() sample. + - Add functions GetWarnCode(), mgl_get_warn_code() for getting code of the last warning. + - Add possibility to read HDF4 files in mglData. + - Now parameter 'cnt' of Flow() and Pipe() is always defined by value of 'num' -- cnt = (num>0)! + - Add C/Fortran interface functions for widget features. + - Allow to read compressed data files (like, *.dat.gz). + - Allow to save compressed files with extensions "eps.gz" and "svgz" as output. + - Font files can be compressed now by 'gzip'. + - Reduce animation delay to 1 sec. + - Add TeX symbol sample in documentation. + - Now MathGL use standard random numbers generator: GSL one or simple rand() if NO_GSL is defined. + - Now curves always start dashing from zero position. + - Restrict usage of original and wrapper classes simultaneously. + - Rename MGL command 'grid' to 'grid2' for case of plain grid drawing for data array(s). + - Rename MGL command 'set_id' to 'idset'. + - Disable color gradient in Vect() by default -- still enabled in VectC(), VectL(). + - Add extra options/comments for animation parameters in mgl2png. + - Update printing in QMathGL. + - mglGraphFLTK::Update() now force window redrawing. + - Bugfix with newline symbol '\n' + - Bugfix with wrong restore previous InPlot() after text with style 'a'. + - Bugfix for label position for log-scale axis. + - Bugfix for mglData::Insert(). + - Bugfix for text and marks drawing in OpenGL mode. + - Bugfix for T-ticks orientation in Ternary plot. + - Bugfix for text position with 'a' option after Rotate(). + - Bugfix for keeping bold/italic text formatting of next symbol. + - Bugfix for Ternary axis with Min.y!=0. + - Bugfix for multi-line labels. + + +1.10.2.1 Released 28 March 2010 + - Add multi-line (i.e. separated by \n) text printing. - Ticks adjusting now correctly work with log-scaled axis. - Bug with MGL options including bug with 'legend' option for automatic colors. - Bug with 'A' option of text style. @@ -44,6 +102,7 @@ - MGL command 'define' now can define scalar variables, like "define xmin dat.min-1". These variables can be used as later as a number, like "xrange xmin 1". - Add MGL command 'ranges' for setting plot ranges (like 'axis' command). - Add MGL commands 'break', 'continue' for improving for-cycles. + - Add function in MGL by commands "function 'name' [arg1 arg2 ... arg9]", "return" and modify "call 'name' [arg1 arg2 ... arg9]" - Add automatic increase of the point numbers in plots by formula with singularities (i.e. like Plot("sin(1/x)"); - Add mglGraph::GetFit() function which return fitted formula. - Add function mglGraph::Label() for drawing text at arbitrary place of the screen. diff --git a/Makefile.in b/Makefile.in index 5700690..9aec9a4 100644 --- a/Makefile.in +++ b/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.11 from Makefile.am. +# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, @@ -149,6 +149,8 @@ GREP = @GREP@ GSL_FLAGS = @GSL_FLAGS@ GSL_LIBS = @GSL_LIBS@ HAVE_SWIG = @HAVE_SWIG@ +HDF4_FLAGS = @HDF4_FLAGS@ +HDF4_LIBS = @HDF4_LIBS@ HDF5_FLAGS = @HDF5_FLAGS@ HDF5_LIBS = @HDF5_LIBS@ INSTALL = @INSTALL@ @@ -169,6 +171,7 @@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MGL_AGE = @MGL_AGE@ MGL_CURRENT = @MGL_CURRENT@ +MGL_RELEASE = @MGL_RELEASE@ MGL_REVISION = @MGL_REVISION@ MKDIR_P = @MKDIR_P@ MOC = @MOC@ @@ -353,7 +356,7 @@ distclean-libtool: # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): - @failcom='exit 1'; \ + @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ @@ -378,7 +381,7 @@ $(RECURSIVE_TARGETS): fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): - @failcom='exit 1'; \ + @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ @@ -542,7 +545,8 @@ distdir: $(DISTFILES) fi; \ done -test -n "$(am__skip_mode_fix)" \ - || find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \ + || find "$(distdir)" -type d ! -perm -755 \ + -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ @@ -586,17 +590,17 @@ dist dist-all: distdir distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ - GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ - bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ + bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ - unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\ + lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ - GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ + GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac diff --git a/TODO b/TODO index c3ae449..27449bb 100644 --- a/TODO +++ b/TODO @@ -1,44 +1,59 @@ MathGL (for v.1.11.*) -c. Colorbar: print more digits for manual arrays ... but avoid overlapping ??? -0. Miss MAJOR labels or decrease its fontsize if labels too close. +1. Colorbar: print more digits for manual arrays ... but avoid overlapping ??? + +2. Miss MAJOR labels or decrease its fontsize if labels too close. Also check that enough digits is printed to distingush the labels Also allow "time"-labels Also allow rotate labels if they too dense -4. Plot for gradients of scalar field (like flow) -8. Contour label should not rotated on ~180 degree - - -1. Import/Export via GIF (as 3d data) ??? + 16bit PNG ?!! -2. Plot for isolines of vector fields ??? -3. Cloud by boxes?! - -4. Add plot layot -- i.e. reserve space for title and so on ... May be the best way to analyze code itself ??? -5. Try to decrease font size if tick labels overlap ??? - -6. \dfrac for normal size and centering ??? -7. "Chaos" in area.png (near axis) ??? - -8. Options "iI_-aA" for colorbar -9. Hankel transform - -10. http://en.wikipedia.org/wiki/Waterfall_chart - -AA. New docs: -- Update documentation (Russian) +5. Legend in OpenGL mode + +11. Update STIX fonts (new release) + create PWT fonts +12. Problem with \calB and so on (\calH, ...) -- they are present only in italic font :(. + +21. INCOMPATIBLE CHANGES!!! swap color and font style in text option ('bR:r' -> 'r:bR') +22. INCOMPATIBLE CHANGES!!! hide 'dir' argument as ':[xyz]' for cont3, dens3, contf3, grid3 + remove conta, densa, grida, contfa +23. INCOMPATIBLE!!! Allow slice definition as real: sl<1 ? sl=int(n*sl) : int(sl); +24. INCOMPATIBLE CHANGES!!! tune colors as {} -- for example, 'b{3}' +25. INCOMPATIBLE CHANGES!!! hide unused arguments (like "size") +26. Quaternary diagrams plotted in a tetrahedron: equivalent to ternary diagrams, but in 3D. +27. Export to X3D +28. Save glyph then it is used for mglGraphPS -- allow different font family in EPS|SVG ??! +29. Multithreading by "subplots" -- for parser first of all !!! + +30. Sample about pthread using. + +32. Regroup pictures in WWW by big classes + combo plots + +========================= + Later + +1. Plot for isolines of vector fields ??? +2. Named arguments in MGL ??? +3. \dfrac for normal size and centering ??? +4. "Chaos" in area.png (near axis) ??? +5. save data coordinates in picture??? -- NO -- slow + a lot of memory! +6. "Cut off" curves if text is printed along it (for contour labels) ?!? +7. Allow interpolation in MGL if argument is not integer ??? +8. Check if widget functions can be added to mgl_w.h !?! -- use #define ??! +9. Add '[' as separator in string ??? +10. Save id of subplots and axis for getting value of click coordinates arbitrary inplot -- fill only part which is overlapped. Clear it at Clf() + update for any Rotate, Aspect, InPlot, SetRanges, +11. Surface by interpolation for arbitrary points {x,y,z} -- seems to be too complicated :( +12. Rename 'stl'->'style', 'sch'->'scheme' in MGL docs ??? +13. Add option ':[xyzd]' in color scheme for coloring along coordinate (default 'z') ?!? +14. Save ALL plot styles for each curve (0...N) for each subplot (0...M) in format \leg{N_M} ?!? +15. Add TeX command \leg{plot style} for line+mark of specified style. +16. Import/Export via GIF (as 3d data) ??? + 16bit PNG ?!! +17. Contour label should not rotated on ~180 degree ?! +18. The same function for ticks of axis and colorbar ??? +13. Add "colorbar x y ['sch'='' w=1 h=1]" + "colorbar x y dat ['sch'='' w=1 h=1]" -- NO because need w,h ! MathGL (for v.2.?) ??? 1. GTK window ??? -3. Interface for Gambas -4. Interface for Scilab -7. Converter MGL->C (+ interface for MGL->Fortran by change HMDT->int, HMGL->int, "->'); -10. Derive mglGraphGL from mglGraphPS ??? (see mgl_gl_new.*) 11. Use Hershey as built-in font ??? - - FAQ 1. On which things the subplot influence diff --git a/aclocal.m4 b/aclocal.m4 index 553dd58..846920e 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1,4 +1,4 @@ -# generated automatically by aclocal 1.11 -*- Autoconf -*- +# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. @@ -13,8 +13,8 @@ m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl -m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.64],, -[m4_warning([this file was generated for autoconf 2.64. +m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.67],, +[m4_warning([this file was generated for autoconf 2.67. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) @@ -2460,7 +2460,7 @@ linux*oldld* | linux*aout* | linux*coff*) ;; # This must be Linux ELF. -linux* | k*bsd*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux need_lib_prefix=no need_version=no @@ -3099,7 +3099,7 @@ irix5* | irix6* | nonstopux*) ;; # This must be Linux ELF. -linux* | k*bsd*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; @@ -3720,7 +3720,7 @@ m4_if([$1], [CXX], [ ;; esac ;; - linux* | k*bsd*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler @@ -4004,7 +4004,7 @@ m4_if([$1], [CXX], [ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; - linux* | k*bsd*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) @@ -4300,6 +4300,7 @@ dnl Note also adjust exclude_expsyms for C++ above. fi supports_anon_versioning=no case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... @@ -4391,7 +4392,7 @@ _LT_EOF _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; - gnu* | linux* | tpf* | k*bsd*-gnu) + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in @@ -5871,7 +5872,7 @@ if test "$_lt_caught_CXX_error" != yes; then _LT_TAGVAR(inherit_rpath, $1)=yes ;; - linux* | k*bsd*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler @@ -7878,15 +7879,15 @@ m4_define([lt_dict_filter], # Generated from ltversion.in. -# serial 3012 ltversion.m4 +# serial 3017 ltversion.m4 # This file is part of GNU Libtool -m4_define([LT_PACKAGE_VERSION], [2.2.6]) -m4_define([LT_PACKAGE_REVISION], [1.3012]) +m4_define([LT_PACKAGE_VERSION], [2.2.6b]) +m4_define([LT_PACKAGE_REVISION], [1.3017]) AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.2.6' -macro_revision='1.3012' +[macro_version='2.2.6b' +macro_revision='1.3017' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) @@ -7999,7 +8000,7 @@ AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.11], [], +m4_if([$1], [1.11.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -8015,7 +8016,7 @@ m4_define([_AM_AUTOCONF_VERSION], []) # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.11])dnl +[AM_AUTOMAKE_VERSION([1.11.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) @@ -8831,6 +8832,14 @@ python2.1 python2.0]) am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; esac ]) AC_SUBST([pythondir], [$am_cv_python_pythondir]) @@ -8861,6 +8870,14 @@ python2.1 python2.0]) am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; esac ]) AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) diff --git a/autom4te.cache/output.0 b/autom4te.cache/output.0 new file mode 100644 index 0000000..26594eb --- /dev/null +++ b/autom4te.cache/output.0 @@ -0,0 +1,19664 @@ +@%:@! /bin/sh +@%:@ Guess values for system-dependent variables and create Makefiles. +@%:@ Generated by GNU Autoconf 2.67 for mathgl 1.10. +@%:@ +@%:@ Report bugs to . +@%:@ +@%:@ +@%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +@%:@ 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software +@%:@ Foundation, Inc. +@%:@ +@%:@ +@%:@ This configure script is free software; the Free Software Foundation +@%:@ gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in @%:@( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in @%:@(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in @%:@( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: mathgl.abalakin@gmail.com about your system, including +$0: any error possibly output before this message. Then +$0: install a modern shell, or manually run the script +$0: under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +@%:@ as_fn_unset VAR +@%:@ --------------- +@%:@ Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +@%:@ as_fn_set_status STATUS +@%:@ ----------------------- +@%:@ Set @S|@? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} @%:@ as_fn_set_status + +@%:@ as_fn_exit STATUS +@%:@ ----------------- +@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} @%:@ as_fn_exit + +@%:@ as_fn_mkdir_p +@%:@ ------------- +@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} @%:@ as_fn_mkdir_p +@%:@ as_fn_append VAR VALUE +@%:@ ---------------------- +@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take +@%:@ advantage of any shell optimizations that allow amortized linear growth over +@%:@ repeated appends, instead of the typical quadratic growth present in naive +@%:@ implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +@%:@ as_fn_arith ARG... +@%:@ ------------------ +@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the +@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments +@%:@ must be portable across @S|@(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +@%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] +@%:@ ---------------------------------------- +@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are +@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the +@%:@ script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} @%:@ as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in @%:@((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in @%:@( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in @%:@(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$lt_ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +ECHO=${lt_ECHO-echo} +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +$* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi + + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi + fi + fi + fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + + +as_awk_strverscmp=' + # Use only awk features that work with 7th edition Unix awk (1978). + # My, what an old awk you have, Mr. Solaris! + END { + while (length(v1) && length(v2)) { + # Set d1 to be the next thing to compare from v1, and likewise for d2. + # Normally this is a single character, but if v1 and v2 contain digits, + # compare them as integers and fractions as strverscmp does. + if (v1 ~ /^[0-9]/ && v2 ~ /^[0-9]/) { + # Split v1 and v2 into their leading digit string components d1 and d2, + # and advance v1 and v2 past the leading digit strings. + for (len1 = 1; substr(v1, len1 + 1) ~ /^[0-9]/; len1++) continue + for (len2 = 1; substr(v2, len2 + 1) ~ /^[0-9]/; len2++) continue + d1 = substr(v1, 1, len1); v1 = substr(v1, len1 + 1) + d2 = substr(v2, 1, len2); v2 = substr(v2, len2 + 1) + if (d1 ~ /^0/) { + if (d2 ~ /^0/) { + # Compare two fractions. + while (d1 ~ /^0/ && d2 ~ /^0/) { + d1 = substr(d1, 2); len1-- + d2 = substr(d2, 2); len2-- + } + if (len1 != len2 && ! (len1 && len2 && substr(d1, 1, 1) == substr(d2, 1, 1))) { + # The two components differ in length, and the common prefix + # contains only leading zeros. Consider the longer to be less. + d1 = -len1 + d2 = -len2 + } else { + # Otherwise, compare as strings. + d1 = "x" d1 + d2 = "x" d2 + } + } else { + # A fraction is less than an integer. + exit 1 + } + } else { + if (d2 ~ /^0/) { + # An integer is greater than a fraction. + exit 2 + } else { + # Compare two integers. + d1 += 0 + d2 += 0 + } + } + } else { + # The normal case, without worrying about digits. + d1 = substr(v1, 1, 1); v1 = substr(v1, 2) + d2 = substr(v2, 1, 1); v2 = substr(v2, 2) + } + if (d1 < d2) exit 1 + if (d1 > d2) exit 2 + } + # Beware Solaris /usr/xgp4/bin/awk (at least through Solaris 10), + # which mishandles some comparisons of empty strings to integers. + if (length(v2)) exit 1 + if (length(v1)) exit 2 + } +' + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIB@&t@OBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='mathgl' +PACKAGE_TARNAME='mathgl' +PACKAGE_VERSION='1.10' +PACKAGE_STRING='mathgl 1.10' +PACKAGE_BUGREPORT='mathgl.abalakin@gmail.com' +PACKAGE_URL='' + +ac_unique_file="mgl" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIB@&t@OBJS +AM_CXXFLAGS +USE_DOCS_FALSE +USE_DOCS_TRUE +USE_TESTIO_FALSE +USE_TESTIO_TRUE +USE_OCTAVE_FALSE +USE_OCTAVE_TRUE +OCTAVE_INCFLAGS +OCTAVE_ARCH +OCTAVE +USE_PYTHON_FALSE +USE_PYTHON_TRUE +pkgpyexecdir +pyexecdir +pkgpythondir +pythondir +PYTHON_PLATFORM +PYTHON_EXEC_PREFIX +PYTHON_PREFIX +PYTHON_VERSION +PYTHON +HAVE_SWIG +PYTHON_HEADERS +USE_QT_FALSE +USE_QT_TRUE +QT_VERSION +QT_LIBS +QT_LDFLAGS +QT_LFLAGS +QT_CPPFLAGS +QT_INCPATH +QT_CXXFLAGS +QT_CFLAGS +QT_DEFINES +QT_VERSION_MAJOR +TMPDIR +QT_PATH +RCC +UIC +MOC +QMAKE +USE_WX_FALSE +USE_WX_TRUE +WX_LIBS +WX_FLAGS +USE_FLTK_FALSE +USE_FLTK_TRUE +FLTK_LIBS +FLTK_FLAGS +USE_JPEG_FALSE +USE_JPEG_TRUE +JPEG_LIBS +JPEG_FLAGS +PNG_LIBS +USE_GIF_FALSE +USE_GIF_TRUE +GIF_LIBS +GIF_FLAGS +USE_HDF4_FALSE +USE_HDF4_TRUE +HDF4_LIBS +HDF4_FLAGS +USE_HDF5_FALSE +USE_HDF5_TRUE +HDF5_LIBS +HDF5_FLAGS +USE_GLUT_FALSE +USE_GLUT_TRUE +GLUT_FLAGS +GLUT_LIBS +GL_LIBS +USE_GSL_FALSE +USE_GSL_TRUE +GSL_LIBS +GSL_FLAGS +USE_PTHREAD_FALSE +USE_PTHREAD_TRUE +PTHREAD_LIBS +PTHREAD_FLAGS +CXXCPP +CPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +lt_ECHO +RANLIB +AR +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +LIBTOOL +OBJDUMP +DLLTOOL +AS +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +ac_ct_CXX +CXXFLAGS +CXX +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +MGL_AGE +MGL_REVISION +MGL_CURRENT +MGL_RELEASE +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +enable_libtool_lock +enable_double +enable_all +enable_langall +enable_pthread +enable_gsl +enable_glut +enable_hdf5 +enable_hdf5_18 +enable_hdf4 +enable_gif +enable_jpeg +enable_fltk +enable_wx +enable_qt +with_qt +enable_python +enable_octave +enable_testio +enable_docs +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CXX +CXXFLAGS +CCC +CPP +CXXCPP +TMPDIR' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used" >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures mathgl 1.10 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + @<:@@S|@ac_default_prefix@:>@ + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + @<:@PREFIX@:>@ + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root @<:@DATAROOTDIR/doc/mathgl@:>@ + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of mathgl 1.10:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared@<:@=PKGS@:>@ build shared libraries @<:@default=yes@:>@ + --enable-static@<:@=PKGS@:>@ build static libraries @<:@default=yes@:>@ + --enable-fast-install@<:@=PKGS@:>@ + optimize for fast installation @<:@default=yes@:>@ + --disable-libtool-lock avoid locking (might break parallel builds) + --enable-double Turn on double precision in MathGL library + --enable-all Turn on all features + --enable-langall Turn on all language interfaces + --enable-pthread Turn on pthread support in MathGL library + --enable-gsl Turn on gsl functions + --enable-glut Turn on glut + --enable-hdf5 Turn on hdf5 + --enable-hdf5_18 Turn on hdf5 version 1.8 + --enable-hdf4 Turn on hdf4 + --enable-gif Turn on gif + --enable-jpeg Turn on jpeg + --enable-fltk Turn on fltk + --enable-wx Turn on wxWidget + --enable-qt Turn on Qt + --enable-python Turn on interface to python + --enable-octave Turn on interface to octave + --enable-testio Turn on testio + --enable-docs Turn on documentation building + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic try to use only PIC/non-PIC objects @<:@default=use + both@:>@ + --with-gnu-ld assume the C compiler uses GNU ld @<:@default=no@:>@ + --with-qt Path to Qt @<:@Look in PATH and /usr/local/Trolltech@:>@ + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CXX C++ compiler command + CXXFLAGS C++ compiler flags + CPP C preprocessor + CXXCPP C++ preprocessor + TMPDIR A temporary directory with write access @<:@/tmp@:>@ + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +mathgl configure 1.10 +generated by GNU Autoconf 2.67 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +@%:@ ac_fn_c_try_compile LINENO +@%:@ -------------------------- +@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_compile + +@%:@ ac_fn_cxx_try_compile LINENO +@%:@ ---------------------------- +@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_compile + +@%:@ ac_fn_c_try_link LINENO +@%:@ ----------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_link + +@%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +@%:@ ------------------------------------------------------- +@%:@ Tests whether HEADER exists and can be compiled using the include files in +@%:@ INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +@%:@include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} @%:@ ac_fn_c_check_header_compile + +@%:@ ac_fn_c_try_cpp LINENO +@%:@ ---------------------- +@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_cpp + +@%:@ ac_fn_c_try_run LINENO +@%:@ ---------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. Assumes +@%:@ that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_run + +@%:@ ac_fn_c_check_func LINENO FUNC VAR +@%:@ ---------------------------------- +@%:@ Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} @%:@ ac_fn_c_check_func + +@%:@ ac_fn_cxx_try_cpp LINENO +@%:@ ------------------------ +@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_cpp + +@%:@ ac_fn_cxx_try_link LINENO +@%:@ ------------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_link + +@%:@ ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +@%:@ ------------------------------------------------------- +@%:@ Tests whether HEADER exists, giving a warning if it cannot be compiled using +@%:@ the include files in INCLUDES and setting the cache variable VAR +@%:@ accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval "test \"\${$3+set}\"" = set; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +@%:@include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ---------------------------------------- ## +## Report this to mathgl.abalakin@gmail.com ## +## ---------------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} @%:@ ac_fn_c_check_header_mongrel +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by mathgl $as_me 1.10, which was +generated by GNU Autoconf 2.67. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in @%:@(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5 ; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +MGL_RELEASE=1.10 + + + +ac_aux_dir= +for ac_dir in config "$srcdir"/config; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + + +ac_config_headers="$ac_config_headers include/mgl/config.h" + + +#MGL_RELEASE=1.4 +#AC_SUBST(MGL_RELEASE) + +# LT Version numbers, remember to change them just *before* a release. +# (Interfaces removed: CURRENT++, AGE=0, REVISION=0) +# (Interfaces added: CURRENT++, AGE++, REVISION=0) +# (No interfaces changed: REVISION++) +MGL_CURRENT=5 +MGL_REVISION=0 +MGL_AGE=0 + + + + +am__api_version='1.11' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in @%:@(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='mathgl' + VERSION='1.10' + + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $@%:@ != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5 ; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5 ; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5 ; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5 ; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5 ; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +@%:@ Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if test "${ac_cv_prog_cxx_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. +set dummy ${ac_tool_prefix}as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AS"; then + ac_cv_prog_AS="$AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AS="${ac_tool_prefix}as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AS=$ac_cv_prog_AS +if test -n "$AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +$as_echo "$AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AS"; then + ac_ct_AS=$AS + # Extract the first word of "as", so it can be a program name with args. +set dummy as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AS"; then + ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AS="as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AS=$ac_cv_prog_ac_ct_AS +if test -n "$ac_ct_AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 +$as_echo "$ac_ct_AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AS" = x; then + AS="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AS=$ac_ct_AS + fi +else + AS="$ac_cv_prog_AS" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DLLTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + + ;; +esac + +test -z "$AS" && AS=as + + + + + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + +enable_dlopen=yes + + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.2.6b' +macro_revision='1.3017' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if test "${ac_cv_path_SED+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if test "${ac_cv_path_FGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +@%:@ Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test "${lt_cv_path_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$ac_tool_prefix"; then + for ac_prog in "dumpbin -symbols" "link -dump -symbols" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in "dumpbin -symbols" "link -dump -symbols" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if test "${lt_cv_nm_interface+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:__oline__: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if test "${lt_cv_sys_max_cmd_len+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if test "${lt_cv_ld_reload_flag+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if test "${lt_cv_deplibs_check_method+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + + + + + + + + + + + + + + + + + + + + + + + +@%:@ Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line __oline__ "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if test "${lt_cv_apple_cc_single_mod+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5 ; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "@%:@define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if test "${ac_cv_prog_cxx_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if test "${ac_cv_prog_CXXCPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +_lt_caught_CXX_error=yes; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +else + _lt_caught_CXX_error=yes +fi + + + + + +# Set options + + + + + + @%:@ Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + @%:@ Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +@%:@ Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + @%:@ Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if test "${lt_cv_objdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +@%:@define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + + + + + + + + + + + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +## CAVEAT EMPTOR: +## There is no encapsulation within the following macros, do not change +## the running order or otherwise move them around unless you know exactly +## what you are doing... +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic@&t@ -DPIC" + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 +$as_echo "$lt_prog_compiler_pic" >&6; } + + + + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic@&t@ -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu) + link_all_deplibs=no + ;; + esac + + ld_shlibs=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + link_all_deplibs=no + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='' + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo(void) {} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 +$as_echo "$archive_cmds_need_lc" >&6; } + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line __oline__ "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line __oline__ "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +compiler_needs_object_CXX=no +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_direct_absolute_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_flag_spec_ld_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +inherit_rpath_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + compiler=$CC + compiler_CXX=$CC + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' + else + lt_prog_compiler_no_builtin_flag_CXX= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + + +@%:@ Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + ld_shlibs_CXX=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + file_list_spec_CXX='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec_CXX='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + always_export_symbols_CXX=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + darwin* | rhapsody*) + + + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + whole_archive_flag_spec_CXX='' + link_all_deplibs_CXX=yes + allow_undefined_flag_CXX="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + if test "$lt_cv_apple_cc_single_mod" != "yes"; then + archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi + + else + ld_shlibs_CXX=no + fi + + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + freebsd[12]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + ld_shlibs_CXX=no + ;; + + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + + gnu*) + ;; + + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + interix[3-9]*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + inherit_rpath_CXX=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [1-5]* | *pgcpp\ [1-5]*) + prelink_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' + old_archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ + $RANLIB $oldlib' + archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 will use weak symbols + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + xl*) + # IBM XL 8.0 on PPC, with GNU ld + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + hardcode_libdir_flag_spec_CXX='-R$libdir' + whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object_CXX=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + ld_shlibs_CXX=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + ld_shlibs_CXX=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + hardcode_direct_absolute_CXX=yes + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='${wl}-E' + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=echo + else + ld_shlibs_CXX=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + case $host in + osf3*) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + ;; + *) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + ;; + esac + + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='${wl}-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_CXX='${wl}-z,text' + allow_undefined_flag_CXX='${wl}-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } + test "$ld_shlibs_CXX" = no && can_build_shared=no + + GCC_CXX="$GXX" + LD_CXX="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF + +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$RM -f confest.$objext + +# PORTME: override above test on systems where it is broken +case $host_os in +interix[3-9]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + compiler_lib_search_dirs_CXX= +if test -n "${compiler_lib_search_path_CXX}"; then + compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_CXX='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix[4-9]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + xlc* | xlC*) + # IBM XL 8.0 on PPC + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-qpic' + lt_prog_compiler_static_CXX='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX@&t@ -DPIC" + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5 +$as_echo "$lt_prog_compiler_pic_CXX" >&6; } + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX@&t@ -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_CXX=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works_CXX=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_CXX=yes + fi + else + lt_cv_prog_compiler_static_works_CXX=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then + : +else + lt_prog_compiler_static_CXX= +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix[4-9]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + ;; + linux* | k*bsd*-gnu) + link_all_deplibs_CXX=no + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = no && can_build_shared=no + +with_gnu_ld_CXX=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + archive_cmds_need_lc_CXX=no + else + archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_CXX" >&5 +$as_echo "$archive_cmds_need_lc_CXX" >&6; } + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test "X$hardcode_automatic_CXX" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct_CXX" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test "$hardcode_action_CXX" = relink || + test "$inherit_rpath_CXX" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + +@%:@ Check whether --enable-double was given. +if test "${enable_double+set}" = set; then : + enableval=$enable_double; case "${enableval}" in + yes) double=true ;; + no) double=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-double" "$LINENO" 5 ;; +esac +else + double=false +fi + + +if (test x$double = xtrue) ;then + +$as_echo "@%:@define MGL_USE_DOUBLE 1" >>confdefs.h + +else + +$as_echo "@%:@define MGL_USE_DOUBLE 0" >>confdefs.h + +fi + +@%:@ Check whether --enable-all was given. +if test "${enable_all+set}" = set; then : + enableval=$enable_all; case "${enableval}" in + yes) all=true ;; + no) all=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-all" "$LINENO" 5 ;; +esac +else + all=false +fi + + +@%:@ Check whether --enable-langall was given. +if test "${enable_langall+set}" = set; then : + enableval=$enable_langall; case "${enableval}" in + yes) langall=true ;; + no) langall=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-langall" "$LINENO" 5 ;; +esac +else + langall=false +fi + + +@%:@ Check whether --enable-pthread was given. +if test "${enable_pthread+set}" = set; then : + enableval=$enable_pthread; case "${enableval}" in + yes) pthread=true ;; + no) pthread=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-pthread" "$LINENO" 5 ;; +esac +else + pthread=true +fi + +ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" +if test "x$ac_cv_header_pthread_h" = x""yes; then : + (test x$all = xtrue || test x$pthread = xtrue) && PTHREAD_FLAGS=-DHAVE_PTHREAD +else + (test x$all = xtrue || test x$pthread = xtrue) && echo "Please install posix threads headers" && exit +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lpthread" >&5 +$as_echo_n "checking for main in -lpthread... " >&6; } +if test "${ac_cv_lib_pthread_main+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pthread_main=yes +else + ac_cv_lib_pthread_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_main" >&5 +$as_echo "$ac_cv_lib_pthread_main" >&6; } +if test "x$ac_cv_lib_pthread_main" = x""yes; then : + (test x$all = xtrue || test x$pthread = xtrue) && PTHREAD_LIBS=-lpthread +else + (test x$all = xtrue || test x$pthread = xtrue) && echo "Please install posix threads library" && exit +fi + + if test x$pthread = xtrue; then + USE_PTHREAD_TRUE= + USE_PTHREAD_FALSE='#' +else + USE_PTHREAD_TRUE='#' + USE_PTHREAD_FALSE= +fi + + +@%:@ Check whether --enable-gsl was given. +if test "${enable_gsl+set}" = set; then : + enableval=$enable_gsl; case "${enableval}" in + yes) gsl=true ;; + no) gsl=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-gsl" "$LINENO" 5 ;; +esac +else + gsl=true +fi + + +if (test x$all = xtrue || test x$gsl = xtrue) ;then + GSL_PROG=gsl-config + # Extract the first word of "$GSL_PROG", so it can be a program name with args. +set dummy $GSL_PROG; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_GSL_FLAGS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$GSL_FLAGS"; then + ac_cv_prog_GSL_FLAGS="$GSL_FLAGS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_GSL_FLAGS="`$GSL_PROG --cflags`" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +GSL_FLAGS=$ac_cv_prog_GSL_FLAGS +if test -n "$GSL_FLAGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GSL_FLAGS" >&5 +$as_echo "$GSL_FLAGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + # Extract the first word of "$GSL_PROG", so it can be a program name with args. +set dummy $GSL_PROG; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_GSL_LIBS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$GSL_LIBS"; then + ac_cv_prog_GSL_LIBS="$GSL_LIBS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_GSL_LIBS="`$GSL_PROG --libs`" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +GSL_LIBS=$ac_cv_prog_GSL_LIBS +if test -n "$GSL_LIBS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GSL_LIBS" >&5 +$as_echo "$GSL_LIBS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "$GSL_LIBS" ;then + test_gsl=true + else + echo "Please install gsl headers and libraries and make sure that \ + path to $GSL_PROG exist in your PATH" + exit + fi +else + GSL_FLAGS=-DNO_GSL + +fi + if test x$test_gsl = xtrue; then + USE_GSL_TRUE= + USE_GSL_FALSE='#' +else + USE_GSL_TRUE='#' + USE_GSL_FALSE= +fi + + +@%:@ Check whether --enable-glut was given. +if test "${enable_glut+set}" = set; then : + enableval=$enable_glut; case "${enableval}" in + yes) glut=true ;; + no) glut=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-glut" "$LINENO" 5 ;; +esac +else + glut=false +fi + + +case "${host}" in + *darwin*) + GL_LIBS="-framework OpenGL" + + if (test x$all = xtrue || test x$glut = xtrue) ;then + GLUT_LIBS="-framework GLUT -framework OpenGL" + + fi + ;; + + *w32*) + GL_LIBS=opengl32 + ac_fn_c_check_header_mongrel "$LINENO" "GL/gl.h" "ac_cv_header_GL_gl_h" "$ac_includes_default" +if test "x$ac_cv_header_GL_gl_h" = x""yes; then : + +else + echo "Please install OpenGL headers (GL/gl.h)"; exit +fi + + + as_ac_Lib=`$as_echo "ac_cv_lib_${GL_LIBS}''_main" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GL_LIBS}" >&5 +$as_echo_n "checking for main in -l${GL_LIBS}... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l${GL_LIBS} $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + GL_LIBS=-l${GL_LIBS} +else + echo "Please install OpenGL library (lib${GL_LIBS}.a)"; exit +fi + + GLUT_LIBS=glut32 + ac_fn_c_check_header_mongrel "$LINENO" "GL/glut.h" "ac_cv_header_GL_glut_h" "$ac_includes_default" +if test "x$ac_cv_header_GL_glut_h" = x""yes; then : + (test x$all = xtrue || test x$glut = xtrue) && GLUT_FLAGS=-DHAVE_GLUT +else + (test x$all = xtrue || test x$glut = xtrue) && (echo "Please install FreeGLUT headers (GL/glut.h)" && exit) +fi + + + as_ac_Lib=`$as_echo "ac_cv_lib_${GLUT_LIBS}''_main" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GLUT_LIBS}" >&5 +$as_echo_n "checking for main in -l${GLUT_LIBS}... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l${GLUT_LIBS} $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + (test x$all = xtrue || test x$glut = xtrue) && GLUT_LIBS=-l${GLUT_LIBS} +else + (test x$all = xtrue || test x$glut = xtrue) && echo "Please install FreeGLUT library (lib${GLUT_LIBS}.a)" && exit +fi + + ;; + + *) + GL_LIBS=GL + ac_fn_c_check_header_mongrel "$LINENO" "GL/gl.h" "ac_cv_header_GL_gl_h" "$ac_includes_default" +if test "x$ac_cv_header_GL_gl_h" = x""yes; then : + +else + echo "Please install OpenGL headers (GL/gl.h)"; exit +fi + + + as_ac_Lib=`$as_echo "ac_cv_lib_${GL_LIBS}''_main" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GL_LIBS}" >&5 +$as_echo_n "checking for main in -l${GL_LIBS}... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l${GL_LIBS} $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + GL_LIBS=-l${GL_LIBS} +else + echo "Please install OpenGL library (lib${GL_LIBS}.a)"; exit +fi + + GLUT_LIBS=glut + ac_fn_c_check_header_mongrel "$LINENO" "GL/glut.h" "ac_cv_header_GL_glut_h" "$ac_includes_default" +if test "x$ac_cv_header_GL_glut_h" = x""yes; then : + (test x$all = xtrue || test x$glut = xtrue) && GLUT_FLAGS=-DHAVE_GLUT +else + (test x$all = xtrue || test x$glut = xtrue) && (echo "Please install FreeGLUT headers (GL/glut.h)" && exit) +fi + + + as_ac_Lib=`$as_echo "ac_cv_lib_${GLUT_LIBS}''_main" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GLUT_LIBS}" >&5 +$as_echo_n "checking for main in -l${GLUT_LIBS}... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l${GLUT_LIBS} $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + (test x$all = xtrue || test x$glut = xtrue) && GLUT_LIBS=-l${GLUT_LIBS} +else + (test x$all = xtrue || test x$glut = xtrue) && echo "Please install FreeGLUT library (lib${GLUT_LIBS}.a)" && exit +fi + + ;; + +esac + if (test x$all = xtrue || test x$glut = xtrue); then + USE_GLUT_TRUE= + USE_GLUT_FALSE='#' +else + USE_GLUT_TRUE='#' + USE_GLUT_FALSE= +fi + + +case "${host}" in + *linux*) + ADDON_FLAGS=-DNO_COLOR_ARRAY + ;; + + *) + ;; +esac + +@%:@ Check whether --enable-hdf5 was given. +if test "${enable_hdf5+set}" = set; then : + enableval=$enable_hdf5; case "${enableval}" in + yes) hdf5=true ;; + no) hdf5=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-hdf5" "$LINENO" 5 ;; +esac +else + hdf5=false +fi + +@%:@ Check whether --enable-hdf5_18 was given. +if test "${enable_hdf5_18+set}" = set; then : + enableval=$enable_hdf5_18; case "${enableval}" in + yes) hdf5_18=true ;; + no) hdf5_18=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-hdf5_18" "$LINENO" 5 ;; +esac +else + hdf5_18=false +fi + +#AC_CHECK_HEADER(hdf5.h,[(test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && HDF5_FLAGS=-DHAVE_HDF5 AC_SUBST(HDF5_FLAGS)], +ac_fn_c_check_header_mongrel "$LINENO" "hdf5.h" "ac_cv_header_hdf5_h" "$ac_includes_default" +if test "x$ac_cv_header_hdf5_h" = x""yes; then : + (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && HDF5_FLAGS=-DHAVE_HDF5 +else + (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && echo "Please install hdf5 headers" && exit +fi + + +if ((test x$all = xtrue || test x$hdf5 = xtrue) && test x$hdf5_18 = xfalse) ;then + HDF5_FLAGS="$HDF5_FLAGS -DH5_USE_16_API" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lhdf5" >&5 +$as_echo_n "checking for main in -lhdf5... " >&6; } +if test "${ac_cv_lib_hdf5_main+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lhdf5 $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_hdf5_main=yes +else + ac_cv_lib_hdf5_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hdf5_main" >&5 +$as_echo "$ac_cv_lib_hdf5_main" >&6; } +if test "x$ac_cv_lib_hdf5_main" = x""yes; then : + (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && HDF5_LIBS=-lhdf5 +else + (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && echo "Please install hdf5 library" && exit +fi + + if (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue); then + USE_HDF5_TRUE= + USE_HDF5_FALSE='#' +else + USE_HDF5_TRUE='#' + USE_HDF5_FALSE= +fi + + + +@%:@ Check whether --enable-hdf4 was given. +if test "${enable_hdf4+set}" = set; then : + enableval=$enable_hdf4; case "${enableval}" in + yes) hdf4=true ;; + no) hdf4=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-hdf4" "$LINENO" 5 ;; +esac +else + hdf4=false +fi + +ac_fn_c_check_header_mongrel "$LINENO" "hdf/mfhdf.h" "ac_cv_header_hdf_mfhdf_h" "$ac_includes_default" +if test "x$ac_cv_header_hdf_mfhdf_h" = x""yes; then : + (test x$all = xtrue || test x$hdf4 = xtrue) && HDF4_FLAGS=-DHAVE_HDF4 +else + (test x$all = xtrue || test x$hdf4 = xtrue) && echo "Please install hdf4 headers" && exit +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ldf" >&5 +$as_echo_n "checking for main in -ldf... " >&6; } +if test "${ac_cv_lib_df_main+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldf $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_df_main=yes +else + ac_cv_lib_df_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_df_main" >&5 +$as_echo "$ac_cv_lib_df_main" >&6; } +if test "x$ac_cv_lib_df_main" = x""yes; then : + (test x$all = xtrue || test x$hdf4 = xtrue) && HDF4_LIBS="-lmfhdf -ldf" +else + (test x$all = xtrue || test x$hdf4 = xtrue) && echo "Please install hdf4 library" && exit +fi + + if (test x$all = xtrue || test x$hdf4 = xtrue); then + USE_HDF4_TRUE= + USE_HDF4_FALSE='#' +else + USE_HDF4_TRUE='#' + USE_HDF4_FALSE= +fi + + +@%:@ Check whether --enable-gif was given. +if test "${enable_gif+set}" = set; then : + enableval=$enable_gif; case "${enableval}" in + yes) gif=true ;; + no) gif=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-gif" "$LINENO" 5 ;; +esac +else + gif=false +fi + +ac_fn_c_check_header_mongrel "$LINENO" "gif_lib.h" "ac_cv_header_gif_lib_h" "$ac_includes_default" +if test "x$ac_cv_header_gif_lib_h" = x""yes; then : + (test x$all = xtrue || test x$gif = xtrue) && GIF_FLAGS=-DHAVE_GIF +else + (test x$all = xtrue || test x$gif = xtrue) && echo "Please install gif headers" && exit +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lgif" >&5 +$as_echo_n "checking for main in -lgif... " >&6; } +if test "${ac_cv_lib_gif_main+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lgif $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_gif_main=yes +else + ac_cv_lib_gif_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gif_main" >&5 +$as_echo "$ac_cv_lib_gif_main" >&6; } +if test "x$ac_cv_lib_gif_main" = x""yes; then : + (test x$all = xtrue || test x$gif = xtrue) && GIF_LIBS=-lgif +else + (test x$all = xtrue || test x$gif = xtrue) && echo "Please install gif library" && exit +fi + + if (test x$all = xtrue || test x$gif = xtrue); then + USE_GIF_TRUE= + USE_GIF_FALSE='#' +else + USE_GIF_TRUE='#' + USE_GIF_FALSE= +fi + + +ac_fn_c_check_header_mongrel "$LINENO" "png.h" "ac_cv_header_png_h" "$ac_includes_default" +if test "x$ac_cv_header_png_h" = x""yes; then : + +else + echo "Please install png headers" && exit +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lpng" >&5 +$as_echo_n "checking for main in -lpng... " >&6; } +if test "${ac_cv_lib_png_main+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpng $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_png_main=yes +else + ac_cv_lib_png_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_png_main" >&5 +$as_echo "$ac_cv_lib_png_main" >&6; } +if test "x$ac_cv_lib_png_main" = x""yes; then : + PNG_LIBS=-lpng +else + echo "Please install png library" && exit +fi + + +@%:@ Check whether --enable-jpeg was given. +if test "${enable_jpeg+set}" = set; then : + enableval=$enable_jpeg; case "${enableval}" in + yes) jpeg=true ;; + no) jpeg=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-jpeg" "$LINENO" 5 ;; +esac +else + jpeg=false +fi + +ac_fn_c_check_header_mongrel "$LINENO" "jpeglib.h" "ac_cv_header_jpeglib_h" "$ac_includes_default" +if test "x$ac_cv_header_jpeglib_h" = x""yes; then : + (test x$all = xtrue || test x$jpeg = xtrue) && JPEG_FLAGS=-DHAVE_JPEG +else + (test x$all = xtrue || test x$jpeg = xtrue) && echo "Please install jpeg headers" && exit +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ljpeg" >&5 +$as_echo_n "checking for main in -ljpeg... " >&6; } +if test "${ac_cv_lib_jpeg_main+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ljpeg $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_jpeg_main=yes +else + ac_cv_lib_jpeg_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_main" >&5 +$as_echo "$ac_cv_lib_jpeg_main" >&6; } +if test "x$ac_cv_lib_jpeg_main" = x""yes; then : + (test x$all = xtrue || test x$jpeg = xtrue) && JPEG_LIBS=-ljpeg +else + (test x$all = xtrue || test x$jpeg = xtrue) && echo "Please install jpeg library" && exit +fi + + if (test x$all = xtrue || test x$jpeg = xtrue); then + USE_JPEG_TRUE= + USE_JPEG_FALSE='#' +else + USE_JPEG_TRUE='#' + USE_JPEG_FALSE= +fi + + +@%:@ Check whether --enable-fltk was given. +if test "${enable_fltk+set}" = set; then : + enableval=$enable_fltk; case "${enableval}" in + yes) fltk=true ;; + no) fltk=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-fltk" "$LINENO" 5 ;; +esac +else + fltk=false +fi + +if (test x$all = xtrue || test x$fltk = xtrue) ;then + FLTK_PROG=fltk-config + # Extract the first word of "$FLTK_PROG", so it can be a program name with args. +set dummy $FLTK_PROG; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_FLTK_FLAGS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$FLTK_FLAGS"; then + ac_cv_prog_FLTK_FLAGS="$FLTK_FLAGS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_FLTK_FLAGS="`$FLTK_PROG --cxxflags`" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +FLTK_FLAGS=$ac_cv_prog_FLTK_FLAGS +if test -n "$FLTK_FLAGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FLTK_FLAGS" >&5 +$as_echo "$FLTK_FLAGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + # Extract the first word of "$FLTK_PROG", so it can be a program name with args. +set dummy $FLTK_PROG; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_FLTK_LIBS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$FLTK_LIBS"; then + ac_cv_prog_FLTK_LIBS="$FLTK_LIBS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_FLTK_LIBS="`$FLTK_PROG --ldflags`" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +FLTK_LIBS=$ac_cv_prog_FLTK_LIBS +if test -n "$FLTK_LIBS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FLTK_LIBS" >&5 +$as_echo "$FLTK_LIBS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "$FLTK_FLAGS" && test "$FLTK_LIBS" ;then + test_fltk=true + else + echo "Please install FLTK headers and libraries and make sure that \ + path to $FLTK_PROG exist in your PATH" + exit + fi +fi + if test x$test_fltk = xtrue; then + USE_FLTK_TRUE= + USE_FLTK_FALSE='#' +else + USE_FLTK_TRUE='#' + USE_FLTK_FALSE= +fi + + +@%:@ Check whether --enable-wx was given. +if test "${enable_wx+set}" = set; then : + enableval=$enable_wx; case "${enableval}" in + yes) wx=true ;; + no) wx=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-wx" "$LINENO" 5 ;; +esac +else + wx=false +fi + +if (test x$all = xtrue || test x$wx = xtrue) ;then +#if (test x$wx = xtrue) ;then + WX_PROG=wx-config + # Extract the first word of "$WX_PROG", so it can be a program name with args. +set dummy $WX_PROG; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WX_FLAGS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$WX_FLAGS"; then + ac_cv_prog_WX_FLAGS="$WX_FLAGS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_WX_FLAGS="`$WX_PROG --cflags`" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +WX_FLAGS=$ac_cv_prog_WX_FLAGS +if test -n "$WX_FLAGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WX_FLAGS" >&5 +$as_echo "$WX_FLAGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + # Extract the first word of "$WX_PROG", so it can be a program name with args. +set dummy $WX_PROG; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WX_LIBS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$WX_LIBS"; then + ac_cv_prog_WX_LIBS="$WX_LIBS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_WX_LIBS="`$WX_PROG --libs`" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +WX_LIBS=$ac_cv_prog_WX_LIBS +if test -n "$WX_LIBS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WX_LIBS" >&5 +$as_echo "$WX_LIBS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "$WX_FLAGS" && test "$WX_LIBS" ;then + test_wx=true + else + echo "Please install wxwidget headers and libraries and make sure that \ + path to $WX_PROG exist in your PATH" + exit + fi +fi + if test x$test_wx = xtrue; then + USE_WX_TRUE= + USE_WX_FALSE='#' +else + USE_WX_TRUE='#' + USE_WX_FALSE= +fi + + +@%:@ Check whether --enable-qt was given. +if test "${enable_qt+set}" = set; then : + enableval=$enable_qt; case "${enableval}" in + yes) qt=true ;; + no) qt=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-qt" "$LINENO" 5 ;; +esac +else + qt=false +fi + +if (test x$all = xtrue || test x$qt = xtrue) ;then + + + + + test x"$TROLL" != x && echo 'ViM rox emacs.' + + +@%:@ Check whether --with-qt was given. +if test "${with_qt+set}" = set; then : + withval=$with_qt; QT_PATH=$withval +else + QT_PATH= +fi + + + # Find Qt. + if test -d /usr/local/Trolltech; then + # Try to find the latest version. + tmp_qt_paths=`echo /usr/local/Trolltech/*/bin | tr ' ' '\n' | sort -nr \ + | xargs | sed 's/ */:/g'` + fi + + # Find qmake. + for ac_prog in qmake-qt4${EXEEXT} +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_QMAKE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $QMAKE in + [\\/]* | ?:[\\/]*) + ac_cv_path_QMAKE="$QMAKE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$QT_DIR:$QT_PATH:$PATH:$tmp_qt_paths" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_QMAKE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +QMAKE=$ac_cv_path_QMAKE +if test -n "$QMAKE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $QMAKE" >&5 +$as_echo "$QMAKE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$QMAKE" && break +done +test -n "$QMAKE" || QMAKE="missing" + + if test x"$QMAKE" = xmissing; then + for ac_prog in qmake${EXEEXT} +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_QMAKE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $QMAKE in + [\\/]* | ?:[\\/]*) + ac_cv_path_QMAKE="$QMAKE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$QT_DIR:$QT_PATH:$PATH:$tmp_qt_paths" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_QMAKE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +QMAKE=$ac_cv_path_QMAKE +if test -n "$QMAKE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $QMAKE" >&5 +$as_echo "$QMAKE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$QMAKE" && break +done +test -n "$QMAKE" || QMAKE="missing" + + if test x"$QMAKE" = xmissing; then + as_fn_error $? "Cannot find qmake in your PATH. Try using --with-qt." "$LINENO" 5 + fi + fi + + # Find moc (Meta Object Compiler). + for ac_prog in moc-qt4${EXEEXT} +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MOC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MOC in + [\\/]* | ?:[\\/]*) + ac_cv_path_MOC="$MOC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$QT_PATH:$PATH:$tmp_qt_paths" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_MOC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MOC=$ac_cv_path_MOC +if test -n "$MOC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MOC" >&5 +$as_echo "$MOC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$MOC" && break +done +test -n "$MOC" || MOC="missing" + + if test x"$MOC" = xmissing; then + for ac_prog in moc${EXEEXT} +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MOC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MOC in + [\\/]* | ?:[\\/]*) + ac_cv_path_MOC="$MOC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$QT_PATH:$PATH:$tmp_qt_paths" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_MOC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MOC=$ac_cv_path_MOC +if test -n "$MOC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MOC" >&5 +$as_echo "$MOC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$MOC" && break +done +test -n "$MOC" || MOC="missing" + + if test x"$MOC" = xmissing; then + as_fn_error $? "Cannot find moc (Meta Object Compiler) in your PATH. Try using --with-qt." "$LINENO" 5 + fi + fi + + # Find uic (User Interface Compiler). + for ac_prog in uic-qt4${EXEEXT} +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_UIC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $UIC in + [\\/]* | ?:[\\/]*) + ac_cv_path_UIC="$UIC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$QT_PATH:$PATH:$tmp_qt_paths" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_UIC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +UIC=$ac_cv_path_UIC +if test -n "$UIC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UIC" >&5 +$as_echo "$UIC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$UIC" && break +done +test -n "$UIC" || UIC="missing" + + if test x"$UIC" = xmissing; then + for ac_prog in uic${EXEEXT} +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_UIC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $UIC in + [\\/]* | ?:[\\/]*) + ac_cv_path_UIC="$UIC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$QT_PATH:$PATH:$tmp_qt_paths" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_UIC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +UIC=$ac_cv_path_UIC +if test -n "$UIC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UIC" >&5 +$as_echo "$UIC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$UIC" && break +done +test -n "$UIC" || UIC="missing" + + if test x"$UIC" = xmissing; then + as_fn_error $? "Cannot find uic (User Interface Compiler) in your PATH. Try using --with-qt." "$LINENO" 5 + fi + fi + + # Find rcc (Qt Resource Compiler). + for ac_prog in rcc-qt4${EXEEXT} +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_RCC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $RCC in + [\\/]* | ?:[\\/]*) + ac_cv_path_RCC="$RCC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$QT_PATH:$PATH:$tmp_qt_paths" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_RCC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +RCC=$ac_cv_path_RCC +if test -n "$RCC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RCC" >&5 +$as_echo "$RCC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$RCC" && break +done +test -n "$RCC" || RCC="false" + + if test x"$RCC" = xfalse; then + for ac_prog in rcc${EXEEXT} +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_RCC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $RCC in + [\\/]* | ?:[\\/]*) + ac_cv_path_RCC="$RCC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$QT_PATH:$PATH:$tmp_qt_paths" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_RCC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +RCC=$ac_cv_path_RCC +if test -n "$RCC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RCC" >&5 +$as_echo "$RCC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$RCC" && break +done +test -n "$RCC" || RCC="false" + + if test x"$RCC" = xfalse; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find rcc (Qt Resource Compiler) in your PATH. Try using --with-qt." >&5 +$as_echo "$as_me: WARNING: Cannot find rcc (Qt Resource Compiler) in your PATH. Try using --with-qt." >&2;} + fi + fi + + # If we don't know the path to Qt, guess it from the path to qmake. + if test x"$QT_PATH" = x; then + QT_PATH=`dirname "$QMAKE"` + fi + if test x"$QT_PATH" = x; then + as_fn_error $? "Cannot find the path to your Qt install. Use --with-qt." "$LINENO" 5 + fi + + + # Get ready to build a test-app with Qt. + + # Look for a writable temporary directory. + + if test x"$TMPDIR" = x || test ! -d "$TMPDIR" || test ! -w "$TMPDIR"; then + echo "$as_me:$LINENO: no TMPDIR or bad TMPDIR ($TMPDIR)" \ + >&5 + for i in /tmp /var/tmp; do + if test -d "$i" && test -w "$i"; then + TMPDIR=$i + export TMPDIR + echo "$as_me:$LINENO: setting TMPDIR=$TMPDIR" >&5 + break + fi + done + fi + + # Kludge!! QMake has a very strange behavior. For instance, if you + # install Qt under your $HOME and run QMake somewhere else under your + # $HOME, it will try to be clever and produce Makefiles with relative + # include paths. In order to avoid this, we will test QMake from a + # temporary directory (usually /tmp). Note that this problem was only + # observed with Qt 4. + my_configure_pwd=`pwd` + my_tmpdir="$TMPDIR/conftest$$.dir" + test -d "$my_tmpdir" || mkdir "$my_tmpdir" + if test -w "$my_tmpdir" && cd "$my_tmpdir" + then + : + else + as_fn_error $? "Cannot cd to or write in $my_tmpdir" "$LINENO" 5 + fi + cat >conftest.h <<_ASEOF +#include + +class Foo: public QObject +{ + Q_OBJECT; +public: + Foo(); + ~Foo() {} +public slots: + void setValue(int value); +signals: + void valueChanged(int newValue); +private: + int value_; +}; +_ASEOF + + cat >conftest.cpp <<_ASEOF +#include "conftest.h" +Foo::Foo() + : value_ (42) +{ + connect(this, SIGNAL(valueChanged(int)), this, SLOT(setValue(int))); +} + +void Foo::setValue(int value) +{ + value_ = value; +} + +int main() +{ + Foo f; +} +_ASEOF + if $QMAKE -project; then :; else + as_fn_error $? "Calling $QMAKE -project failed." "$LINENO" 5 + fi + + # Find the .pro file generated by qmake. + pro_file='conftest.dir.pro' + test -f $pro_file || pro_file=`echo *.pro` + if test -f "$pro_file"; then :; else + as_fn_error $? "Can't find the .pro file generated by Qmake." "$LINENO" 5 + fi + + + + + + + + echo "$as_me:$LINENO: Invoking $QMAKE on $pro_file" >&5 + sed 's/^/| /' "$pro_file" >&5 + + if $QMAKE; then :; else + as_fn_error $? "Calling $QMAKE failed." "$LINENO" 5 + fi + # Try to compile a simple Qt app. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can build a simple Qt app" >&5 +$as_echo_n "checking whether we can build a simple Qt app... " >&6; } +if test "${at_cv_qt_build+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + at_cv_qt_build=ko + : ${MAKE=make} + + if $MAKE >&5 2>&1; then + at_cv_qt_build='ok, looks like Qt 4' + else + echo "$as_me:$LINENO: Build failed, trying to #include \ +instead" >&5 + sed 's///' conftest.h > tmp.h && mv tmp.h conftest.h + if $MAKE >&5 2>&1; then + at_cv_qt_build='ok, looks like Qt 3' + else + # Sometimes (such as on Debian) build will fail because Qt hasn't been + # installed in debug mode and qmake tries (by default) to build apps in + # debug mode => Try again in release mode. + echo "$as_me:$LINENO: Build failed, trying to enforce release mode" \ + >&5 + + # Tweak the value of CONFIG in the .pro file for +release. + + qt_conf='' + for at_mod in +release; do + at_mod=`echo "$at_mod" | sed 's/^-//; tough + s/^+//; beef + :ough + s/^/CONFIG -= /;n + :eef + s/^/CONFIG += /'` + qt_conf="$qt_conf +$at_mod" + done + echo "$qt_conf" | sed 1d >>"$pro_file" + + + sed 's///' conftest.h > tmp.h && mv tmp.h conftest.h + if $MAKE >&5 2>&1; then + at_cv_qt_build='ok, looks like Qt 4, release mode forced' + else + echo "$as_me:$LINENO: Build failed, trying to #include \ +instead" >&5 + sed 's///' conftest.h > tmp.h && mv tmp.h conftest.h + if $MAKE >&5 2>&1; then + at_cv_qt_build='ok, looks like Qt 3, release mode forced' + else + at_cv_qt_build=ko + echo "$as_me:$LINENO: failed program was:" >&5 + sed 's/^/| /' conftest.h >&5 + echo "$as_me:$LINENO: failed program was:" >&5 + sed 's/^/| /' conftest.cpp >&5 + fi # if make with Qt3-style #include and release mode forced. + fi # if make with Qt4-style #include and release mode forced. + fi # if make with Qt3-style #include. + fi # if make with Qt4-style #include. + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_qt_build" >&5 +$as_echo "$at_cv_qt_build" >&6; } + if test x"$at_cv_qt_build" = xko; then + as_fn_error $? "Cannot build a test Qt program" "$LINENO" 5 + fi + QT_VERSION_MAJOR=`echo "$at_cv_qt_build" | sed 's/^^0-9*//'` + + + # This sed filter is applied after an expression of the form: /^FOO.*=/!d; + # It starts by removing the beginning of the line, removing references to + # SUBLIBS, removing unnecessary whitespaces at the beginning, and prefixes + # all variable uses by QT_. + qt_sed_filter='s///; + s/$(SUBLIBS)//g; + s/^ *//; + s/\$(\(@<:@A-Z_@:>@@<:@A-Z_@:>@*\))/$(QT_\1)/g' + + # Find the Makefile (qmake happens to generate a fake Makefile which invokes + # a Makefile.Debug or Makefile.Release). We we have both, we'll pick the + # Makefile.Release. The reason is that the main difference is that release + # uses -Os and debug -g. We can override -Os by passing another -O but we + # usually don't override -g. + if test -f Makefile.Release; then + at_mfile='Makefile.Release' + else + at_mfile='Makefile' + fi + if test -f $at_mfile; then :; else + cd "$my_configure_pwd" + as_fn_error $? "Cannot find the Makefile generated by qmake." "$LINENO" 5 + fi + + # Find the DEFINES of Qt (should have been named CPPFLAGS). + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the DEFINES to use with Qt" >&5 +$as_echo_n "checking for the DEFINES to use with Qt... " >&6; } +if test "${at_cv_env_QT_DEFINES+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + at_cv_env_QT_DEFINES=`sed "/^DEFINES@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_DEFINES" >&5 +$as_echo "$at_cv_env_QT_DEFINES" >&6; } + QT_DEFINES=$at_cv_env_QT_DEFINES + + + # Find the CFLAGS of Qt (We can use Qt in C?!) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the CFLAGS to use with Qt" >&5 +$as_echo_n "checking for the CFLAGS to use with Qt... " >&6; } +if test "${at_cv_env_QT_CFLAGS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + at_cv_env_QT_CFLAGS=`sed "/^CFLAGS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_CFLAGS" >&5 +$as_echo "$at_cv_env_QT_CFLAGS" >&6; } + QT_CFLAGS=$at_cv_env_QT_CFLAGS + + + # Find the CXXFLAGS of Qt. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the CXXFLAGS to use with Qt" >&5 +$as_echo_n "checking for the CXXFLAGS to use with Qt... " >&6; } +if test "${at_cv_env_QT_CXXFLAGS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + at_cv_env_QT_CXXFLAGS=`sed "/^CXXFLAGS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_CXXFLAGS" >&5 +$as_echo "$at_cv_env_QT_CXXFLAGS" >&6; } + QT_CXXFLAGS=$at_cv_env_QT_CXXFLAGS + + + # Find the INCPATH of Qt. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the INCPATH to use with Qt" >&5 +$as_echo_n "checking for the INCPATH to use with Qt... " >&6; } +if test "${at_cv_env_QT_INCPATH+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + at_cv_env_QT_INCPATH=`sed "/^INCPATH@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_INCPATH" >&5 +$as_echo "$at_cv_env_QT_INCPATH" >&6; } + QT_INCPATH=$at_cv_env_QT_INCPATH + + + QT_CPPFLAGS="$at_cv_env_QT_DEFINES $at_cv_env_QT_INCPATH" + + + # Find the LFLAGS of Qt (Should have been named LDFLAGS) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the LDFLAGS to use with Qt" >&5 +$as_echo_n "checking for the LDFLAGS to use with Qt... " >&6; } +if test "${at_cv_env_QT_LDFLAGS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + at_cv_env_QT_LDFLAGS=`sed "/^LDFLAGS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_LDFLAGS" >&5 +$as_echo "$at_cv_env_QT_LDFLAGS" >&6; } + QT_LFLAGS=$at_cv_env_QT_LDFLAGS + + QT_LDFLAGS=$at_cv_env_QT_LDFLAGS + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host operating system is Darwin" >&5 +$as_echo_n "checking whether host operating system is Darwin... " >&6; } + at_darwin="no" + case $host_os in + darwin*) + at_darwin="yes" + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_darwin" >&5 +$as_echo "$at_darwin" >&6; } + + # Find the LIBS of Qt. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the LIBS to use with Qt" >&5 +$as_echo_n "checking for the LIBS to use with Qt... " >&6; } +if test "${at_cv_env_QT_LIBS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + at_cv_env_QT_LIBS=`sed "/^LIBS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile` + if test x$at_darwin = xyes; then + # Fix QT_LIBS: as of today Libtool (GNU Libtool 1.5.23a) doesn't handle + # -F properly. The "bug" has been fixed on 22 October 2006 + # by Peter O'Gorman but we provide backward compatibility here. + at_cv_env_QT_LIBS=`echo "$at_cv_env_QT_LIBS" \ + | sed 's/^-F/-Wl,-F/;s/ -F/ -Wl,-F/g'` + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_LIBS" >&5 +$as_echo "$at_cv_env_QT_LIBS" >&6; } + QT_LIBS=$at_cv_env_QT_LIBS + + + cd "$my_configure_pwd" || echo 'WTF!' + rm -rf "$my_tmpdir" + + + if test x"$QMAKE" = x; then + as_fn_error $? "\$QMAKE is empty. \ +Did you invoke AT@&t@_WITH_QT before AT@&t@_REQUIRE_QT_VERSION?" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt's version" >&5 +$as_echo_n "checking for Qt's version... " >&6; } +if test "${at_cv_QT_VERSION+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + echo "$as_me:$LINENO: Running $QMAKE --version:" >&5 + $QMAKE --version >&5 2>&1 + qmake_version_sed='/^.*\([0-9]\.[0-9]\.[0-9]\).*$/!d;s//\1/' + at_cv_QT_VERSION=`$QMAKE --version 2>&1 | sed "$qmake_version_sed"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_QT_VERSION" >&5 +$as_echo "$at_cv_QT_VERSION" >&6; } + if test x"$at_cv_QT_VERSION" = x; then + as_fn_error $? "Cannot detect Qt's version." "$LINENO" 5 + fi + QT_VERSION=$at_cv_QT_VERSION + + as_arg_v1=$QT_VERSION +as_arg_v2=4.3 +awk "$as_awk_strverscmp" v1="$as_arg_v1" v2="$as_arg_v2" /dev/null +case $? in @%:@( + 1) : + as_fn_error $? "This package requires Qt 4.3 or above." "$LINENO" 5 ;; @%:@( + 0) : + ;; @%:@( + 2) : + ;; @%:@( + *) : + ;; +esac + + test_qt=true +fi + if test x$test_qt = xtrue; then + USE_QT_TRUE= + USE_QT_FALSE='#' +else + USE_QT_TRUE='#' + USE_QT_FALSE= +fi + + +@%:@ Check whether --enable-python was given. +if test "${enable_python+set}" = set; then : + enableval=$enable_python; case "${enableval}" in + yes) python=true ;; + no) python=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-python" "$LINENO" 5 ;; +esac +else + python=false +fi + +if (test x$langall = xtrue || test x$python = xtrue) ;then + # Extract the first word of "python-config", so it can be a program name with args. +set dummy python-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_PYTHON_HEADERS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PYTHON_HEADERS"; then + ac_cv_prog_PYTHON_HEADERS="$PYTHON_HEADERS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_PYTHON_HEADERS="`python-config --cflags`" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PYTHON_HEADERS=$ac_cv_prog_PYTHON_HEADERS +if test -n "$PYTHON_HEADERS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_HEADERS" >&5 +$as_echo "$PYTHON_HEADERS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + # Extract the first word of "swig$EXEEXT", so it can be a program name with args. +set dummy swig$EXEEXT; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_HAVE_SWIG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$HAVE_SWIG"; then + ac_cv_prog_HAVE_SWIG="$HAVE_SWIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_HAVE_SWIG="true" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +HAVE_SWIG=$ac_cv_prog_HAVE_SWIG +if test -n "$HAVE_SWIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_SWIG" >&5 +$as_echo "$HAVE_SWIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if (test "$PYTHON_HEADERS" && test "$HAVE_SWIG") ;then + test_python=true + + + + + # Find any Python interpreter. + if test -z "$PYTHON"; then + for ac_prog in python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PYTHON+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PYTHON" && break +done +test -n "$PYTHON" || PYTHON=":" + + fi + am_display_PYTHON=python + + + if test "$PYTHON" = :; then + as_fn_error $? "no suitable Python interpreter found" "$LINENO" 5 + else + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 +$as_echo_n "checking for $am_display_PYTHON version... " >&6; } +if test "${am_cv_python_version+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 +$as_echo "$am_cv_python_version" >&6; } + PYTHON_VERSION=$am_cv_python_version + + + + PYTHON_PREFIX='${prefix}' + + PYTHON_EXEC_PREFIX='${exec_prefix}' + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 +$as_echo_n "checking for $am_display_PYTHON platform... " >&6; } +if test "${am_cv_python_platform+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 +$as_echo "$am_cv_python_platform" >&6; } + PYTHON_PLATFORM=$am_cv_python_platform + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5 +$as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } +if test "${am_cv_python_pythondir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null || + echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 +$as_echo "$am_cv_python_pythondir" >&6; } + pythondir=$am_cv_python_pythondir + + + + pkgpythondir=\${pythondir}/$PACKAGE + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5 +$as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } +if test "${am_cv_python_pyexecdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null || + echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 +$as_echo "$am_cv_python_pyexecdir" >&6; } + pyexecdir=$am_cv_python_pyexecdir + + + + pkgpyexecdir=\${pyexecdir}/$PACKAGE + + + + fi + + + else + echo Please install python-dev and swig packages + exit + fi +fi + if test x$test_python = xtrue ; then + USE_PYTHON_TRUE= + USE_PYTHON_FALSE='#' +else + USE_PYTHON_TRUE='#' + USE_PYTHON_FALSE= +fi + + +@%:@ Check whether --enable-octave was given. +if test "${enable_octave+set}" = set; then : + enableval=$enable_octave; case "${enableval}" in + yes) octave=true ;; + no) octave=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-octave" "$LINENO" 5 ;; +esac +else + octave=false +fi + +if (test x$langall = xtrue || test x$octave = xtrue) ;then + # Extract the first word of "octave-config", so it can be a program name with args. +set dummy octave-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OCTAVE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OCTAVE"; then + ac_cv_prog_OCTAVE="$OCTAVE" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OCTAVE="octave-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OCTAVE=$ac_cv_prog_OCTAVE +if test -n "$OCTAVE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCTAVE" >&5 +$as_echo "$OCTAVE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# find Octave arch + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Octave arch" >&5 +$as_echo_n "checking for Octave arch... " >&6; } + OCTAVE_ARCH=`$OCTAVE -p CANONICAL_HOST_TYPE`-`$OCTAVE -p API_VERSION` + OCTAVE_INCFLAGS="-I`$OCTAVE -p OCTINCLUDEDIR`" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCTAVE_ARCH" >&5 +$as_echo "$OCTAVE_ARCH" >&6; } + OCTAVE_ARCH=$OCTAVE_ARCH + + OCTAVE_INCFLAGS=$OCTAVE_INCFLAGS + + test_octave=true +fi + if test x$test_octave = xtrue ; then + USE_OCTAVE_TRUE= + USE_OCTAVE_FALSE='#' +else + USE_OCTAVE_TRUE='#' + USE_OCTAVE_FALSE= +fi + + +@%:@ Check whether --enable-testio was given. +if test "${enable_testio+set}" = set; then : + enableval=$enable_testio; case "${enableval}" in + yes) testio=true ;; + no) testio=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-testio" "$LINENO" 5 ;; +esac +else + testio=false +fi + + if test x$testio = xtrue ; then + USE_TESTIO_TRUE= + USE_TESTIO_FALSE='#' +else + USE_TESTIO_TRUE='#' + USE_TESTIO_FALSE= +fi + + +@%:@ Check whether --enable-docs was given. +if test "${enable_docs+set}" = set; then : + enableval=$enable_docs; case "${enableval}" in + yes) docs=true ;; + no) docs=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-docs" "$LINENO" 5 ;; +esac +else + docs=false +fi + +if (test x$docs = xtrue || test x$all = xtrue) ;then + ac_config_files="$ac_config_files texinfo/Makefile texinfo/png/Makefile" + +fi + if (test x$docs = xtrue || test x$all = xtrue) ; then + USE_DOCS_TRUE= + USE_DOCS_FALSE='#' +else + USE_DOCS_TRUE='#' + USE_DOCS_FALSE= +fi + + +AM_CXXFLAGS="-Wall $GSL_FLAGS" + + +ac_config_files="$ac_config_files Makefile mgl/Makefile examples/Makefile include/Makefile lang/Makefile utils/Makefile widgets/Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIB@&t@OBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_PTHREAD_TRUE}" && test -z "${USE_PTHREAD_FALSE}"; then + as_fn_error $? "conditional \"USE_PTHREAD\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_GSL_TRUE}" && test -z "${USE_GSL_FALSE}"; then + as_fn_error $? "conditional \"USE_GSL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_GLUT_TRUE}" && test -z "${USE_GLUT_FALSE}"; then + as_fn_error $? "conditional \"USE_GLUT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_HDF5_TRUE}" && test -z "${USE_HDF5_FALSE}"; then + as_fn_error $? "conditional \"USE_HDF5\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_HDF4_TRUE}" && test -z "${USE_HDF4_FALSE}"; then + as_fn_error $? "conditional \"USE_HDF4\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_GIF_TRUE}" && test -z "${USE_GIF_FALSE}"; then + as_fn_error $? "conditional \"USE_GIF\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_JPEG_TRUE}" && test -z "${USE_JPEG_FALSE}"; then + as_fn_error $? "conditional \"USE_JPEG\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_FLTK_TRUE}" && test -z "${USE_FLTK_FALSE}"; then + as_fn_error $? "conditional \"USE_FLTK\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_WX_TRUE}" && test -z "${USE_WX_FALSE}"; then + as_fn_error $? "conditional \"USE_WX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_QT_TRUE}" && test -z "${USE_QT_FALSE}"; then + as_fn_error $? "conditional \"USE_QT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_PYTHON_TRUE}" && test -z "${USE_PYTHON_FALSE}"; then + as_fn_error $? "conditional \"USE_PYTHON\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_OCTAVE_TRUE}" && test -z "${USE_OCTAVE_FALSE}"; then + as_fn_error $? "conditional \"USE_OCTAVE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_TESTIO_TRUE}" && test -z "${USE_TESTIO_FALSE}"; then + as_fn_error $? "conditional \"USE_TESTIO\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_DOCS_TRUE}" && test -z "${USE_DOCS_FALSE}"; then + as_fn_error $? "conditional \"USE_DOCS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: ${CONFIG_STATUS=./config.status} +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in @%:@( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in @%:@(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +@%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] +@%:@ ---------------------------------------- +@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are +@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the +@%:@ script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} @%:@ as_fn_error + + +@%:@ as_fn_set_status STATUS +@%:@ ----------------------- +@%:@ Set @S|@? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} @%:@ as_fn_set_status + +@%:@ as_fn_exit STATUS +@%:@ ----------------- +@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} @%:@ as_fn_exit + +@%:@ as_fn_unset VAR +@%:@ --------------- +@%:@ Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +@%:@ as_fn_append VAR VALUE +@%:@ ---------------------- +@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take +@%:@ advantage of any shell optimizations that allow amortized linear growth over +@%:@ repeated appends, instead of the typical quadratic growth present in naive +@%:@ implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +@%:@ as_fn_arith ARG... +@%:@ ------------------ +@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the +@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments +@%:@ must be portable across @S|@(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in @%:@((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +@%:@ as_fn_mkdir_p +@%:@ ------------- +@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} @%:@ as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in @%:@( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in @%:@(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by mathgl $as_me 1.10, which was +generated by GNU Autoconf 2.67. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +mathgl config.status 1.10 +configured by $0, generated by GNU Autoconf 2.67, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX +@%:@@%:@ Running $as_me. @%:@@%:@ +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' +macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' +macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' +enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' +pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' +host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' +host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' +host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' +build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' +build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' +build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' +SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' +Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' +GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' +EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' +FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' +LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' +NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' +LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' +ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' +exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' +lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' +reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' +AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' +STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' +RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' +compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' +GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' +SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' +ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' +need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' +LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' +libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' +version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' +runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' +libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' +soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' +old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' +striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`' +predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`' +postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`' +predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`' +postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`' +LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`' +GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`' +predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' +postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' +predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' +postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +deplibs_check_method \ +file_magic_cmd \ +AR \ +AR_FLAGS \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +SHELL \ +ECHO \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_wl \ +lt_prog_compiler_pic \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_flag_spec_ld \ +hardcode_libdir_separator \ +fix_srcfile_path \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +finish_eval \ +old_striplib \ +striplib \ +compiler_lib_search_dirs \ +predep_objects \ +postdep_objects \ +predeps \ +postdeps \ +compiler_lib_search_path \ +LD_CXX \ +compiler_CXX \ +lt_prog_compiler_no_builtin_flag_CXX \ +lt_prog_compiler_wl_CXX \ +lt_prog_compiler_pic_CXX \ +lt_prog_compiler_static_CXX \ +lt_cv_prog_compiler_c_o_CXX \ +export_dynamic_flag_spec_CXX \ +whole_archive_flag_spec_CXX \ +compiler_needs_object_CXX \ +with_gnu_ld_CXX \ +allow_undefined_flag_CXX \ +no_undefined_flag_CXX \ +hardcode_libdir_flag_spec_CXX \ +hardcode_libdir_flag_spec_ld_CXX \ +hardcode_libdir_separator_CXX \ +fix_srcfile_path_CXX \ +exclude_expsyms_CXX \ +include_expsyms_CXX \ +file_list_spec_CXX \ +compiler_lib_search_dirs_CXX \ +predep_objects_CXX \ +postdep_objects_CXX \ +predeps_CXX \ +postdeps_CXX \ +compiler_lib_search_path_CXX; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec \ +old_archive_cmds_CXX \ +old_archive_from_new_cmds_CXX \ +old_archive_from_expsyms_cmds_CXX \ +archive_cmds_CXX \ +archive_expsym_cmds_CXX \ +module_cmds_CXX \ +module_expsym_cmds_CXX \ +export_symbols_cmds_CXX \ +prelink_cmds_CXX; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` + ;; +esac + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "include/mgl/config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/mgl/config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "texinfo/Makefile") CONFIG_FILES="$CONFIG_FILES texinfo/Makefile" ;; + "texinfo/png/Makefile") CONFIG_FILES="$CONFIG_FILES texinfo/png/Makefile" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "mgl/Makefile") CONFIG_FILES="$CONFIG_FILES mgl/Makefile" ;; + "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; + "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; + "lang/Makefile") CONFIG_FILES="$CONFIG_FILES lang/Makefile" ;; + "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; + "widgets/Makefile") CONFIG_FILES="$CONFIG_FILES widgets/Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="CXX " + +# ### BEGIN LIBTOOL CONFIG + +# Assembler program. +AS=$AS + +# DLL creation program. +DLLTOOL=$DLLTOOL + +# Object dumper program. +OBJDUMP=$OBJDUMP + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that does not interpret backslashes. +ECHO=$lt_ECHO + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[^=]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$@"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1+=\$2" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1=\$$1\$2" +} + +_LT_EOF + ;; + esac + + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_CXX + +# A language specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU compiler? +with_gcc=$GCC_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_CXX + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_CXX + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_CXX + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_CXX + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path_CXX + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_CXX + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_CXX + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_CXX +postdep_objects=$lt_postdep_objects_CXX +predeps=$lt_predeps_CXX +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# ### END LIBTOOL TAG CONFIG: CXX +_LT_EOF + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + diff --git a/autom4te.cache/output.1 b/autom4te.cache/output.1 new file mode 100644 index 0000000..1c674bb --- /dev/null +++ b/autom4te.cache/output.1 @@ -0,0 +1,19660 @@ +@%:@! /bin/sh +@%:@ Guess values for system-dependent variables and create Makefiles. +@%:@ Generated by GNU Autoconf 2.67 for mathgl 1.10. +@%:@ +@%:@ Report bugs to . +@%:@ +@%:@ +@%:@ Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, +@%:@ 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software +@%:@ Foundation, Inc. +@%:@ +@%:@ +@%:@ This configure script is free software; the Free Software Foundation +@%:@ gives unlimited permission to copy, distribute and modify it. +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in @%:@( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in @%:@(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test "x$CONFIG_SHELL" = x; then + as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which + # is contrary to our usage. Disable this feature. + alias -g '\${1+\"\$@\"}'='\"\$@\"' + setopt NO_GLOB_SUBST +else + case \`(set -o) 2>/dev/null\` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi +" + as_required="as_fn_return () { (exit \$1); } +as_fn_success () { as_fn_return 0; } +as_fn_failure () { as_fn_return 1; } +as_fn_ret_success () { return 0; } +as_fn_ret_failure () { return 1; } + +exitcode=0 +as_fn_success || { exitcode=1; echo as_fn_success failed.; } +as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } +as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } +as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } +if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : + +else + exitcode=1; echo positional parameters were not saved. +fi +test x\$exitcode = x0 || exit 1" + as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO + as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO + eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && + test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 +test \$(( 1 + 1 )) = 2 || exit 1" + if (eval "$as_required") 2>/dev/null; then : + as_have_required=yes +else + as_have_required=no +fi + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + as_found=: + case $as_dir in @%:@( + /*) + for as_base in sh bash ksh sh5; do + # Try only shells that exist, to save several forks. + as_shell=$as_dir/$as_base + if { test -f "$as_shell" || test -f "$as_shell.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + CONFIG_SHELL=$as_shell as_have_required=yes + if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + break 2 +fi +fi + done;; + esac + as_found=false +done +$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi; } +IFS=$as_save_IFS + + + if test "x$CONFIG_SHELL" != x; then : + # We cannot yet assume a decent shell, so we have to provide a + # neutralization value for shells without unset; and this also + # works around shells that cannot unset nonexistent variables. + BASH_ENV=/dev/null + ENV=/dev/null + (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} +fi + + if test x$as_have_required = xno; then : + $as_echo "$0: This script requires a shell more modern than all" + $as_echo "$0: the shells that I found on your system." + if test x${ZSH_VERSION+set} = xset ; then + $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" + $as_echo "$0: be upgraded to zsh 4.3.4 or later." + else + $as_echo "$0: Please tell bug-autoconf@gnu.org and +$0: mathgl.abalakin@gmail.com about your system, including +$0: any error possibly output before this message. Then +$0: install a modern shell, or manually run the script +$0: under such a shell if you do have one." + fi + exit 1 +fi +fi +fi +SHELL=${CONFIG_SHELL-/bin/sh} +export SHELL +# Unset more variables known to interfere with behavior of common tools. +CLICOLOR_FORCE= GREP_OPTIONS= +unset CLICOLOR_FORCE GREP_OPTIONS + +## --------------------- ## +## M4sh Shell Functions. ## +## --------------------- ## +@%:@ as_fn_unset VAR +@%:@ --------------- +@%:@ Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset + +@%:@ as_fn_set_status STATUS +@%:@ ----------------------- +@%:@ Set @S|@? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} @%:@ as_fn_set_status + +@%:@ as_fn_exit STATUS +@%:@ ----------------- +@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} @%:@ as_fn_exit + +@%:@ as_fn_mkdir_p +@%:@ ------------- +@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} @%:@ as_fn_mkdir_p +@%:@ as_fn_append VAR VALUE +@%:@ ---------------------- +@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take +@%:@ advantage of any shell optimizations that allow amortized linear growth over +@%:@ repeated appends, instead of the typical quadratic growth present in naive +@%:@ implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +@%:@ as_fn_arith ARG... +@%:@ ------------------ +@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the +@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments +@%:@ must be portable across @S|@(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +@%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] +@%:@ ---------------------------------------- +@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are +@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the +@%:@ script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} @%:@ as_fn_error + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + + + as_lineno_1=$LINENO as_lineno_1a=$LINENO + as_lineno_2=$LINENO as_lineno_2a=$LINENO + eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && + test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { + # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) + sed -n ' + p + /[$]LINENO/= + ' <$as_myself | + sed ' + s/[$]LINENO.*/&-/ + t lineno + b + :lineno + N + :loop + s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ + t loop + s/-\n.*// + ' >$as_me.lineno && + chmod +x "$as_me.lineno" || + { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensitive to this). + . "./$as_me.lineno" + # Exit status is that of the last command. + exit +} + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in @%:@((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in @%:@( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in @%:@(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + + +# Check that we are running under the correct shell. +SHELL=${CONFIG_SHELL-/bin/sh} + +case X$lt_ECHO in +X*--fallback-echo) + # Remove one level of quotation (which was required for Make). + ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','` + ;; +esac + +ECHO=${lt_ECHO-echo} +if test "X$1" = X--no-reexec; then + # Discard the --no-reexec flag, and continue. + shift +elif test "X$1" = X--fallback-echo; then + # Avoid inline document here, it may be left over + : +elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then + # Yippee, $ECHO works! + : +else + # Restart under the correct shell. + exec $SHELL "$0" --no-reexec ${1+"$@"} +fi + +if test "X$1" = X--fallback-echo; then + # used as fallback echo + shift + cat <<_LT_EOF +$* +_LT_EOF + exit 0 +fi + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +if test -z "$lt_ECHO"; then + if test "X${echo_test_string+set}" != Xset; then + # find a string as large as possible, as long as the shell can cope with it + for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do + # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ... + if { echo_test_string=`eval $cmd`; } 2>/dev/null && + { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null + then + break + fi + done + fi + + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + : + else + # The Solaris, AIX, and Digital Unix default echo programs unquote + # backslashes. This makes it impossible to quote backslashes using + # echo "$something" | sed 's/\\/\\\\/g' + # + # So, first we look for a working echo in the user's PATH. + + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for dir in $PATH /usr/ucb; do + IFS="$lt_save_ifs" + if (test -f $dir/echo || test -f $dir/echo$ac_exeext) && + test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' && + echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$dir/echo" + break + fi + done + IFS="$lt_save_ifs" + + if test "X$ECHO" = Xecho; then + # We didn't find a better echo, so look for alternatives. + if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # This shell has a builtin print -r that does the trick. + ECHO='print -r' + elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } && + test "X$CONFIG_SHELL" != X/bin/ksh; then + # If we have ksh, try running configure again with it. + ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} + export ORIGINAL_CONFIG_SHELL + CONFIG_SHELL=/bin/ksh + export CONFIG_SHELL + exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"} + else + # Try using printf. + ECHO='printf %s\n' + if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' && + echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + # Cool, printf works + : + elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL + export CONFIG_SHELL + SHELL="$CONFIG_SHELL" + export SHELL + ECHO="$CONFIG_SHELL $0 --fallback-echo" + elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` && + test "X$echo_testing_string" = 'X\t' && + echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` && + test "X$echo_testing_string" = "X$echo_test_string"; then + ECHO="$CONFIG_SHELL $0 --fallback-echo" + else + # maybe with a smaller string... + prev=: + + for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do + if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null + then + break + fi + prev="$cmd" + done + + if test "$prev" != 'sed 50q "$0"'; then + echo_test_string=`eval $prev` + export echo_test_string + exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"} + else + # Oops. We lost completely, so just stick with echo. + ECHO=echo + fi + fi + fi + fi + fi +fi + +# Copy echo and quote the copy suitably for passing to libtool from +# the Makefile, instead of quoting the original, which is used later. +lt_ECHO=$ECHO +if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then + lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo" +fi + + + +as_awk_strverscmp=' + # Use only awk features that work with 7th edition Unix awk (1978). + # My, what an old awk you have, Mr. Solaris! + END { + while (length(v1) && length(v2)) { + # Set d1 to be the next thing to compare from v1, and likewise for d2. + # Normally this is a single character, but if v1 and v2 contain digits, + # compare them as integers and fractions as strverscmp does. + if (v1 ~ /^[0-9]/ && v2 ~ /^[0-9]/) { + # Split v1 and v2 into their leading digit string components d1 and d2, + # and advance v1 and v2 past the leading digit strings. + for (len1 = 1; substr(v1, len1 + 1) ~ /^[0-9]/; len1++) continue + for (len2 = 1; substr(v2, len2 + 1) ~ /^[0-9]/; len2++) continue + d1 = substr(v1, 1, len1); v1 = substr(v1, len1 + 1) + d2 = substr(v2, 1, len2); v2 = substr(v2, len2 + 1) + if (d1 ~ /^0/) { + if (d2 ~ /^0/) { + # Compare two fractions. + while (d1 ~ /^0/ && d2 ~ /^0/) { + d1 = substr(d1, 2); len1-- + d2 = substr(d2, 2); len2-- + } + if (len1 != len2 && ! (len1 && len2 && substr(d1, 1, 1) == substr(d2, 1, 1))) { + # The two components differ in length, and the common prefix + # contains only leading zeros. Consider the longer to be less. + d1 = -len1 + d2 = -len2 + } else { + # Otherwise, compare as strings. + d1 = "x" d1 + d2 = "x" d2 + } + } else { + # A fraction is less than an integer. + exit 1 + } + } else { + if (d2 ~ /^0/) { + # An integer is greater than a fraction. + exit 2 + } else { + # Compare two integers. + d1 += 0 + d2 += 0 + } + } + } else { + # The normal case, without worrying about digits. + d1 = substr(v1, 1, 1); v1 = substr(v1, 2) + d2 = substr(v2, 1, 1); v2 = substr(v2, 2) + } + if (d1 < d2) exit 1 + if (d1 > d2) exit 2 + } + # Beware Solaris /usr/xgp4/bin/awk (at least through Solaris 10), + # which mishandles some comparisons of empty strings to integers. + if (length(v2)) exit 1 + if (length(v1)) exit 2 + } +' + +test -n "$DJDIR" || exec 7<&0 &1 + +# Name of the host. +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_clean_files= +ac_config_libobj_dir=. +LIB@&t@OBJS= +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= + +# Identity of this package. +PACKAGE_NAME='mathgl' +PACKAGE_TARNAME='mathgl' +PACKAGE_VERSION='1.10' +PACKAGE_STRING='mathgl 1.10' +PACKAGE_BUGREPORT='mathgl.abalakin@gmail.com' +PACKAGE_URL='' + +ac_unique_file="mgl" +# Factoring default headers for most tests. +ac_includes_default="\ +#include +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_STAT_H +# include +#endif +#ifdef STDC_HEADERS +# include +# include +#else +# ifdef HAVE_STDLIB_H +# include +# endif +#endif +#ifdef HAVE_STRING_H +# if !defined STDC_HEADERS && defined HAVE_MEMORY_H +# include +# endif +# include +#endif +#ifdef HAVE_STRINGS_H +# include +#endif +#ifdef HAVE_INTTYPES_H +# include +#endif +#ifdef HAVE_STDINT_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif" + +ac_subst_vars='am__EXEEXT_FALSE +am__EXEEXT_TRUE +LTLIBOBJS +LIB@&t@OBJS +AM_CXXFLAGS +USE_DOCS_FALSE +USE_DOCS_TRUE +USE_TESTIO_FALSE +USE_TESTIO_TRUE +USE_OCTAVE_FALSE +USE_OCTAVE_TRUE +OCTAVE_INCFLAGS +OCTAVE_ARCH +OCTAVE +USE_PYTHON_FALSE +USE_PYTHON_TRUE +pkgpyexecdir +pyexecdir +pkgpythondir +pythondir +PYTHON_PLATFORM +PYTHON_EXEC_PREFIX +PYTHON_PREFIX +PYTHON_VERSION +PYTHON +HAVE_SWIG +PYTHON_HEADERS +USE_QT_FALSE +USE_QT_TRUE +QT_VERSION +QT_LIBS +QT_LDFLAGS +QT_LFLAGS +QT_CPPFLAGS +QT_INCPATH +QT_CXXFLAGS +QT_CFLAGS +QT_DEFINES +QT_VERSION_MAJOR +TMPDIR +QT_PATH +RCC +UIC +MOC +QMAKE +USE_WX_FALSE +USE_WX_TRUE +WX_LIBS +WX_FLAGS +USE_FLTK_FALSE +USE_FLTK_TRUE +FLTK_LIBS +FLTK_FLAGS +USE_JPEG_FALSE +USE_JPEG_TRUE +JPEG_LIBS +JPEG_FLAGS +PNG_LIBS +USE_GIF_FALSE +USE_GIF_TRUE +GIF_LIBS +GIF_FLAGS +USE_HDF4_FALSE +USE_HDF4_TRUE +HDF4_LIBS +HDF4_FLAGS +USE_HDF5_FALSE +USE_HDF5_TRUE +HDF5_LIBS +HDF5_FLAGS +USE_GLUT_FALSE +USE_GLUT_TRUE +GLUT_FLAGS +GLUT_LIBS +GL_LIBS +USE_GSL_FALSE +USE_GSL_TRUE +GSL_LIBS +GSL_FLAGS +USE_PTHREAD_FALSE +USE_PTHREAD_TRUE +PTHREAD_LIBS +PTHREAD_FLAGS +CXXCPP +CPP +OTOOL64 +OTOOL +LIPO +NMEDIT +DSYMUTIL +lt_ECHO +RANLIB +AR +LN_S +NM +ac_ct_DUMPBIN +DUMPBIN +LD +FGREP +EGREP +GREP +SED +LIBTOOL +OBJDUMP +DLLTOOL +AS +host_os +host_vendor +host_cpu +host +build_os +build_vendor +build_cpu +build +am__fastdepCXX_FALSE +am__fastdepCXX_TRUE +CXXDEPMODE +ac_ct_CXX +CXXFLAGS +CXX +am__fastdepCC_FALSE +am__fastdepCC_TRUE +CCDEPMODE +AMDEPBACKSLASH +AMDEP_FALSE +AMDEP_TRUE +am__quote +am__include +DEPDIR +OBJEXT +EXEEXT +ac_ct_CC +CPPFLAGS +LDFLAGS +CFLAGS +CC +am__untar +am__tar +AMTAR +am__leading_dot +SET_MAKE +AWK +mkdir_p +MKDIR_P +INSTALL_STRIP_PROGRAM +STRIP +install_sh +MAKEINFO +AUTOHEADER +AUTOMAKE +AUTOCONF +ACLOCAL +VERSION +PACKAGE +CYGPATH_W +am__isrc +INSTALL_DATA +INSTALL_SCRIPT +INSTALL_PROGRAM +MGL_AGE +MGL_REVISION +MGL_CURRENT +MGL_RELEASE +target_alias +host_alias +build_alias +LIBS +ECHO_T +ECHO_N +ECHO_C +DEFS +mandir +localedir +libdir +psdir +pdfdir +dvidir +htmldir +infodir +docdir +oldincludedir +includedir +localstatedir +sharedstatedir +sysconfdir +datadir +datarootdir +libexecdir +sbindir +bindir +program_transform_name +prefix +exec_prefix +PACKAGE_URL +PACKAGE_BUGREPORT +PACKAGE_STRING +PACKAGE_VERSION +PACKAGE_TARNAME +PACKAGE_NAME +PATH_SEPARATOR +SHELL' +ac_subst_files='' +ac_user_opts=' +enable_option_checking +enable_dependency_tracking +enable_shared +enable_static +with_pic +enable_fast_install +with_gnu_ld +enable_libtool_lock +enable_double +enable_all +enable_langall +enable_pthread +enable_gsl +enable_glut +enable_hdf5 +enable_hdf5_18 +enable_hdf4 +enable_gif +enable_jpeg +enable_fltk +enable_wx +enable_qt +with_qt +enable_python +enable_octave +enable_testio +enable_docs +' + ac_precious_vars='build_alias +host_alias +target_alias +CC +CFLAGS +LDFLAGS +LIBS +CPPFLAGS +CXX +CXXFLAGS +CCC +CPP +CXXCPP +TMPDIR' + + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +ac_unrecognized_opts= +ac_unrecognized_sep= +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +# (The list follows the same order as the GNU Coding Standards.) +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datarootdir='${prefix}/share' +datadir='${datarootdir}' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +includedir='${prefix}/include' +oldincludedir='/usr/include' +docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' +infodir='${datarootdir}/info' +htmldir='${docdir}' +dvidir='${docdir}' +pdfdir='${docdir}' +psdir='${docdir}' +libdir='${exec_prefix}/lib' +localedir='${datarootdir}/locale' +mandir='${datarootdir}/man' + +ac_prev= +ac_dashdash= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval $ac_prev=\$ac_option + ac_prev= + continue + fi + + case $ac_option in + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; + esac + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_dashdash$ac_option in + --) + ac_dashdash=yes ;; + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=*) + datadir=$ac_optarg ;; + + -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ + | --dataroo | --dataro | --datar) + ac_prev=datarootdir ;; + -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ + | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) + datarootdir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=no ;; + + -docdir | --docdir | --docdi | --doc | --do) + ac_prev=docdir ;; + -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) + docdir=$ac_optarg ;; + + -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) + ac_prev=dvidir ;; + -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) + dvidir=$ac_optarg ;; + + -enable-* | --enable-*) + ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid feature name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"enable_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval enable_$ac_useropt=\$ac_optarg ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) + ac_prev=htmldir ;; + -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ + | --ht=*) + htmldir=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localedir | --localedir | --localedi | --localed | --locale) + ac_prev=localedir ;; + -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) + localedir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst | --locals) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) + ac_prev=pdfdir ;; + -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) + pdfdir=$ac_optarg ;; + + -psdir | --psdir | --psdi | --psd | --ps) + ac_prev=psdir ;; + -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) + psdir=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=\$ac_optarg ;; + + -without-* | --without-*) + ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && + as_fn_error $? "invalid package name: $ac_useropt" + ac_useropt_orig=$ac_useropt + ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + case $ac_user_opts in + *" +"with_$ac_useropt" +"*) ;; + *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" + ac_unrecognized_sep=', ';; + esac + eval with_$ac_useropt=no ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + case $ac_envvar in #( + '' | [0-9]* | *[!_$as_cr_alnum]* ) + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; + esac + eval $ac_envvar=\$ac_optarg + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + as_fn_error $? "missing argument to $ac_option" +fi + +if test -n "$ac_unrecognized_opts"; then + case $enable_option_checking in + no) ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; + *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + esac +fi + +# Check all directory arguments for consistency. +for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ + datadir sysconfdir sharedstatedir localstatedir includedir \ + oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ + libdir localedir mandir +do + eval ac_val=\$$ac_var + # Remove trailing slashes. + case $ac_val in + */ ) + ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` + eval $ac_var=\$ac_val;; + esac + # Be sure to have absolute directory names. + case $ac_val in + [\\/$]* | ?:[\\/]* ) continue;; + NONE | '' ) case $ac_var in *prefix ) continue;; esac;; + esac + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used" >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +ac_pwd=`pwd` && test -n "$ac_pwd" && +ac_ls_di=`ls -di .` && +ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || + as_fn_error $? "working directory cannot be determined" +test "X$ac_ls_di" = "X$ac_pwd_ls_di" || + as_fn_error $? "pwd does not report name of working directory" + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then the parent directory. + ac_confdir=`$as_dirname -- "$as_myself" || +$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_myself" : 'X\(//\)[^/]' \| \ + X"$as_myself" : 'X\(//\)$' \| \ + X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_myself" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r "$srcdir/$ac_unique_file"; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r "$srcdir/$ac_unique_file"; then + test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" +fi +ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" +ac_abs_confdir=`( + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" + pwd)` +# When building in place, set srcdir=. +if test "$ac_abs_confdir" = "$ac_pwd"; then + srcdir=. +fi +# Remove unnecessary trailing slashes from srcdir. +# Double slashes in file names in object file debugging info +# mess up M-x gdb in Emacs. +case $srcdir in +*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; +esac +for ac_var in $ac_precious_vars; do + eval ac_env_${ac_var}_set=\${${ac_var}+set} + eval ac_env_${ac_var}_value=\$${ac_var} + eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} + eval ac_cv_env_${ac_var}_value=\$${ac_var} +done + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures mathgl 1.10 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking ...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + @<:@@S|@ac_default_prefix@:>@ + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + @<:@PREFIX@:>@ + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] + --datadir=DIR read-only architecture-independent data [DATAROOTDIR] + --infodir=DIR info documentation [DATAROOTDIR/info] + --localedir=DIR locale-dependent data [DATAROOTDIR/locale] + --mandir=DIR man documentation [DATAROOTDIR/man] + --docdir=DIR documentation root @<:@DATAROOTDIR/doc/mathgl@:>@ + --htmldir=DIR html documentation [DOCDIR] + --dvidir=DIR dvi documentation [DOCDIR] + --pdfdir=DIR pdf documentation [DOCDIR] + --psdir=DIR ps documentation [DOCDIR] +_ACEOF + + cat <<\_ACEOF + +Program names: + --program-prefix=PREFIX prepend PREFIX to installed program names + --program-suffix=SUFFIX append SUFFIX to installed program names + --program-transform-name=PROGRAM run sed PROGRAM on installed program names + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of mathgl 1.10:";; + esac + cat <<\_ACEOF + +Optional Features: + --disable-option-checking ignore unrecognized --enable/--with options + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors + --enable-shared@<:@=PKGS@:>@ build shared libraries @<:@default=yes@:>@ + --enable-static@<:@=PKGS@:>@ build static libraries @<:@default=yes@:>@ + --enable-fast-install@<:@=PKGS@:>@ + optimize for fast installation @<:@default=yes@:>@ + --disable-libtool-lock avoid locking (might break parallel builds) + --enable-double Turn on double precision in MathGL library + --enable-all Turn on all features + --enable-langall Turn on all language interfaces + --enable-pthread Turn on pthread support in MathGL library + --enable-gsl Turn on gsl functions + --enable-glut Turn on glut + --enable-hdf5 Turn on hdf5 + --enable-hdf5_18 Turn on hdf5 version 1.8 + --enable-hdf4 Turn on hdf4 + --enable-gif Turn on gif + --enable-jpeg Turn on jpeg + --enable-fltk Turn on fltk + --enable-wx Turn on wxWidget + --enable-qt Turn on Qt + --enable-python Turn on interface to python + --enable-octave Turn on interface to octave + --enable-testio Turn on testio + --enable-docs Turn on documentation building + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-pic try to use only PIC/non-PIC objects @<:@default=use + both@:>@ + --with-gnu-ld assume the C compiler uses GNU ld @<:@default=no@:>@ + --with-qt Path to Qt @<:@Look in PATH and /usr/local/Trolltech@:>@ + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + LIBS libraries to pass to the linker, e.g. -l + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if + you have headers in a nonstandard directory + CXX C++ compiler command + CXXFLAGS C++ compiler flags + CPP C preprocessor + CXXCPP C++ preprocessor + TMPDIR A temporary directory with write access @<:@/tmp@:>@ + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +ac_status=$? +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d "$ac_dir" || + { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || + continue + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + cd "$ac_dir" || { ac_status=$?; continue; } + # Check for guested configure. + if test -f "$ac_srcdir/configure.gnu"; then + echo && + $SHELL "$ac_srcdir/configure.gnu" --help=recursive + elif test -f "$ac_srcdir/configure"; then + echo && + $SHELL "$ac_srcdir/configure" --help=recursive + else + $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi || ac_status=$? + cd "$ac_pwd" || { ac_status=$?; break; } + done +fi + +test -n "$ac_init_help" && exit $ac_status +if $ac_init_version; then + cat <<\_ACEOF +mathgl configure 1.10 +generated by GNU Autoconf 2.67 + +Copyright (C) 2010 Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit +fi + +## ------------------------ ## +## Autoconf initialization. ## +## ------------------------ ## + +@%:@ ac_fn_c_try_compile LINENO +@%:@ -------------------------- +@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_compile + +@%:@ ac_fn_cxx_try_compile LINENO +@%:@ ---------------------------- +@%:@ Try to compile conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext + if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest.$ac_objext; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_compile + +@%:@ ac_fn_c_try_link LINENO +@%:@ ----------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_link + +@%:@ ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES +@%:@ ------------------------------------------------------- +@%:@ Tests whether HEADER exists and can be compiled using the include files in +@%:@ INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +@%:@include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} @%:@ ac_fn_c_check_header_compile + +@%:@ ac_fn_c_try_cpp LINENO +@%:@ ---------------------- +@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_cpp + +@%:@ ac_fn_c_try_run LINENO +@%:@ ---------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. Assumes +@%:@ that executables *can* be run. +ac_fn_c_try_run () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then : + ac_retval=0 +else + $as_echo "$as_me: program exited with status $ac_status" >&5 + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=$ac_status +fi + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_c_try_run + +@%:@ ac_fn_c_check_func LINENO FUNC VAR +@%:@ ---------------------------------- +@%:@ Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case declares $2. + For example, HP-UX 11i declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. + Prefer to if __STDC__ is defined, since + exists even on freestanding compilers. */ + +#ifdef __STDC__ +# include +#else +# include +#endif + +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main () +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$3=yes" +else + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} @%:@ ac_fn_c_check_func + +@%:@ ac_fn_cxx_try_cpp LINENO +@%:@ ------------------------ +@%:@ Try to preprocess conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || + test ! -s conftest.err + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_cpp + +@%:@ ac_fn_cxx_try_link LINENO +@%:@ ------------------------- +@%:@ Try to link conftest.@S|@ac_ext, and return whether this succeeded. +ac_fn_cxx_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_cxx_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + $as_test_x conftest$ac_exeext + }; then : + ac_retval=0 +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + as_fn_set_status $ac_retval + +} @%:@ ac_fn_cxx_try_link + +@%:@ ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +@%:@ ------------------------------------------------------- +@%:@ Tests whether HEADER exists, giving a warning if it cannot be compiled using +@%:@ the include files in INCLUDES and setting the cache variable VAR +@%:@ accordingly. +ac_fn_c_check_header_mongrel () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if eval "test \"\${$3+set}\"" = set; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +else + # Is the header compilable? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 +$as_echo_n "checking $2 usability... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$4 +@%:@include <$2> +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_header_compiler=yes +else + ac_header_compiler=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 +$as_echo "$ac_header_compiler" >&6; } + +# Is the header present? +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 +$as_echo_n "checking $2 presence... " >&6; } +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include <$2> +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + ac_header_preproc=yes +else + ac_header_preproc=no +fi +rm -f conftest.err conftest.i conftest.$ac_ext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 +$as_echo "$ac_header_preproc" >&6; } + +# So? What about this header? +case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( + yes:no: ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 +$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} + ;; + no:yes:* ) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 +$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 +$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 +$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 +$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 +$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} +( $as_echo "## ---------------------------------------- ## +## Report this to mathgl.abalakin@gmail.com ## +## ---------------------------------------- ##" + ) | sed "s/^/$as_me: WARNING: /" >&2 + ;; +esac + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +$as_echo_n "checking for $2... " >&6; } +if eval "test \"\${$3+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + eval "$3=\$ac_header_compiler" +fi +eval ac_res=\$$3 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +fi + eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} + +} @%:@ ac_fn_c_check_header_mongrel +cat >config.log <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by mathgl $as_me 1.10, which was +generated by GNU Autoconf 2.67. Invocation command line was + + $ $0 $@ + +_ACEOF +exec 5>>config.log +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + $as_echo "PATH: $as_dir" + done +IFS=$as_save_IFS + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *\'*) + ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; + 2) + as_fn_append ac_configure_args1 " '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + as_fn_append ac_configure_args " '$ac_arg'" + ;; + esac + done +done +{ ac_configure_args0=; unset ac_configure_args0;} +{ ac_configure_args1=; unset ac_configure_args1;} + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Use '\'' to represent an apostrophe within the trap. +# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + $as_echo "## ---------------- ## +## Cache variables. ## +## ---------------- ##" + echo + # The following way of writing the cache mishandles newlines in values, +( + for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + (set) 2>&1 | + case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + sed -n \ + "s/'\''/'\''\\\\'\'''\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" + ;; #( + *) + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) + echo + + $as_echo "## ----------------- ## +## Output variables. ## +## ----------------- ##" + echo + for ac_var in $ac_subst_vars + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + + if test -n "$ac_subst_files"; then + $as_echo "## ------------------- ## +## File substitutions. ## +## ------------------- ##" + echo + for ac_var in $ac_subst_files + do + eval ac_val=\$$ac_var + case $ac_val in + *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + esac + $as_echo "$ac_var='\''$ac_val'\''" + done | sort + echo + fi + + if test -s confdefs.h; then + $as_echo "## ----------- ## +## confdefs.h. ## +## ----------- ##" + echo + cat confdefs.h + echo + fi + test "$ac_signal" != 0 && + $as_echo "$as_me: caught signal $ac_signal" + $as_echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core core.conftest.* && + rm -f -r conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status +' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -f -r conftest* confdefs.h + +$as_echo "/* confdefs.h */" > confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE_URL "$PACKAGE_URL" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer an explicitly selected file to automatically selected ones. +ac_site_file1=NONE +ac_site_file2=NONE +if test -n "$CONFIG_SITE"; then + # We do not want a PATH search for config.site. + case $CONFIG_SITE in @%:@(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac +elif test "x$prefix" != xNONE; then + ac_site_file1=$prefix/share/config.site + ac_site_file2=$prefix/etc/config.site +else + ac_site_file1=$ac_default_prefix/share/config.site + ac_site_file2=$ac_default_prefix/etc/config.site +fi +for ac_site_file in "$ac_site_file1" "$ac_site_file2" +do + test "x$ac_site_file" = xNONE && continue + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +$as_echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5 ; } + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +$as_echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . "$cache_file";; + *) . "./$cache_file";; + esac + fi +else + { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +$as_echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in $ac_precious_vars; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val=\$ac_cv_env_${ac_var}_value + eval ac_new_val=\$ac_env_${ac_var}_value + case $ac_old_set,$ac_new_set in + set,) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + # differences in whitespace do not lead to failure. + ac_old_val_w=`echo x $ac_old_val` + ac_new_val_w=`echo x $ac_new_val` + if test "$ac_old_val_w" != "$ac_new_val_w"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + ac_cache_corrupted=: + else + { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + eval $ac_var=\$ac_old_val + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) as_fn_append ac_configure_args " '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 +fi +## -------------------- ## +## Main body of script. ## +## -------------------- ## + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + +MGL_RELEASE=1.10 + + + +ac_aux_dir= +for ac_dir in config "$srcdir"/config; do + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 +fi + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. +ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. +ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. + + + +ac_config_headers="$ac_config_headers include/mgl/config.h" + + +#MGL_RELEASE=1.4 +#AC_SUBST(MGL_RELEASE) + +# LT Version numbers, remember to change them just *before* a release. +# (Interfaces removed: CURRENT++, AGE=0, REVISION=0) +# (Interfaces added: CURRENT++, AGE++, REVISION=0) +# (No interfaces changed: REVISION++) +MGL_CURRENT=5 +MGL_REVISION=0 +MGL_AGE=0 + + + + +am__api_version='1.11' + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# OS/2's system install, which has a completely different semantic +# ./install, which can be erroneously created by make from ./install.sh. +# Reject install programs that cannot install multiple files. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +$as_echo_n "checking for a BSD-compatible install... " >&6; } +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in @%:@(( + ./ | .// | /[cC]/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + rm -rf conftest.one conftest.two conftest.dir + echo one > conftest.one + echo two > conftest.two + mkdir conftest.dir + if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + test -s conftest.one && test -s conftest.two && + test -s conftest.dir/conftest.one && + test -s conftest.dir/conftest.two + then + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + fi + done + done + ;; +esac + + done +IFS=$as_save_IFS + +rm -rf conftest.one conftest.two conftest.dir + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. Don't cache a + # value for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + INSTALL=$ac_install_sh + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +$as_echo "$INSTALL" >&6; } + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 +$as_echo_n "checking whether build environment is sane... " >&6; } +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[\\\"\#\$\&\'\`$am_lf]*) + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;; +esac +case $srcdir in + *[\\\"\#\$\&\'\`$am_lf\ \ ]*) + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$*" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$*" != "X $srcdir/configure conftest.file" \ + && test "$*" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken +alias in your environment" "$LINENO" 5 + fi + + test "$2" = conftest.file + ) +then + # Ok. + : +else + as_fn_error $? "newly created file is older than distributed files! +Check your system clock" "$LINENO" 5 +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +test "$program_prefix" != NONE && + program_transform_name="s&^&$program_prefix&;$program_transform_name" +# Use a double $ so make ignores it. +test "$program_suffix" != NONE && + program_transform_name="s&\$&$program_suffix&;$program_transform_name" +# Double any \ or $. +# By default was `s,x,x', remove it if useless. +ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' +program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` + +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` + +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 +$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} +fi + +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi + +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +if test "$cross_compiling" != no; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 +$as_echo_n "checking for a thread-safe mkdir -p... " >&6; } +if test -z "$MKDIR_P"; then + if test "${ac_cv_path_mkdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in mkdir gmkdir; do + for ac_exec_ext in '' $ac_executable_extensions; do + { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue + case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( + 'mkdir (GNU coreutils) '* | \ + 'mkdir (coreutils) '* | \ + 'mkdir (fileutils) '4.1*) + ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext + break 3;; + esac + done + done + done +IFS=$as_save_IFS + +fi + + test -d ./--version && rmdir ./--version + if test "${ac_cv_path_mkdir+set}" = set; then + MKDIR_P="$ac_cv_path_mkdir -p" + else + # As a last resort, use the slow shell script. Don't cache a + # value for MKDIR_P within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the value is a relative name. + MKDIR_P="$ac_install_sh -d" + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 +$as_echo "$MKDIR_P" >&6; } + +mkdir_p="$MKDIR_P" +case $mkdir_p in + [\\/$]* | ?:[\\/]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac + +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 +$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } +set x ${MAKE-make} +ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + cat >conftest.make <<\_ACEOF +SHELL = /bin/sh +all: + @echo '@@@%%%=$(MAKE)=@@@%%%' +_ACEOF +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. +case `${MAKE-make} -f conftest.make 2>/dev/null` in + *@@@%%%=?*=@@@%%%*) + eval ac_cv_prog_make_${ac_make}_set=yes;; + *) + eval ac_cv_prog_make_${ac_make}_set=no;; +esac +rm -f conftest.make +fi +if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + SET_MAKE= +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + SET_MAKE="MAKE=${MAKE-make}" +fi + +rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null + +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + am__isrc=' -I$(srcdir)' + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi + + +# Define the identity of the package. + PACKAGE='mathgl' + VERSION='1.10' + + +cat >>confdefs.h <<_ACEOF +@%:@define PACKAGE "$PACKAGE" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +@%:@define VERSION "$VERSION" +_ACEOF + +# Some tools Automake needs. + +ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} + + +AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} + + +AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} + + +AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} + + +MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} + +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +# Always define AMTAR for backward compatibility. + +AMTAR=${AMTAR-"${am_missing_run}tar"} + +am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' + + + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="gcc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + fi +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $@%:@ != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl.exe + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +$as_echo "$CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl.exe +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CC="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +$as_echo "$ac_ct_CC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CC" && break +done + + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +fi + +fi + + +test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5 ; } + +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } +ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` + +# The possible output files: +ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" + +ac_rmfiles= +for ac_file in $ac_files +do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + * ) ac_rmfiles="$ac_rmfiles $ac_file";; + esac +done +rm -f $ac_rmfiles + +if { { ac_try="$ac_link_default" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link_default") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. +# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' +# in a Makefile. We should not override ac_cv_exeext if it was cached, +# so that the user can short-circuit this test for compilers unknown to +# Autoconf. +for ac_file in $ac_files '' +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + then :; else + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + fi + # We set ac_cv_exeext here because the later test for it is not + # safe: cross compilers may not add the suffix if given an `-o' + # argument, so we may need to know it at that point already. + # Even if this section looks crufty: it has the advantage of + # actually working. + break;; + * ) + break;; + esac +done +test "$ac_cv_exeext" = no && ac_cv_exeext= + +else + ac_file='' +fi +if test -z "$ac_file"; then : + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5 ; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } +ac_exeext=$ac_cv_exeext + +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +$as_echo_n "checking for suffix of executables... " >&6; } +if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + break;; + * ) break;; + esac +done +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5 ; } +fi +rm -f conftest conftest$ac_cv_exeext +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +$as_echo "$ac_cv_exeext" >&6; } + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5 ; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +$as_echo_n "checking for suffix of object files... " >&6; } +if test "${ac_cv_objext+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { { ac_try="$ac_compile" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compile") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then : + for ac_file in conftest.o conftest.obj conftest.*; do + test -f "$ac_file" || continue; + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + $as_echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5 ; } +fi +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +$as_echo "$ac_cv_objext" >&6; } +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 +$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } +if test "${ac_cv_c_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +$as_echo "$ac_cv_c_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GCC=yes +else + GCC= +fi +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +$as_echo_n "checking whether $CC accepts -g... " >&6; } +if test "${ac_cv_prog_cc_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_c_werror_flag=$ac_c_werror_flag + ac_c_werror_flag=yes + ac_cv_prog_cc_g=no + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +else + CFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + +else + ac_c_werror_flag=$ac_save_c_werror_flag + CFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_c_werror_flag=$ac_save_c_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +$as_echo "$ac_cv_prog_cc_g" >&6; } +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 +$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } +if test "${ac_cv_prog_cc_c89+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not '\xHH' hex character constants. + These don't provoke an error unfortunately, instead are silently treated + as 'x'. The following induces an error, until -std is added to get + proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an + array size at least. It's necessary to write '\x00'==0 to get something + that's true only with -std. */ +int osf4_cc_array ['\x00' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) 'x' +int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ + -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC + +fi +# AC_CACHE_VAL +case "x$ac_cv_prog_cc_c89" in + x) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +$as_echo "none needed" >&6; } ;; + xno) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +$as_echo "unsupported" >&6; } ;; + *) + CC="$CC $ac_cv_prog_cc_c89" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; +esac +if test "x$ac_cv_prog_cc_c89" != xno; then : + +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +DEPDIR="${am__leading_dot}deps" + +ac_config_commands="$ac_config_commands depfiles" + + +am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 +$as_echo_n "checking for style of include used by $am_make... " >&6; } +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 +$as_echo "$_am_result" >&6; } +rm -f confinc confmf + +@%:@ Check whether --enable-dependency-tracking was given. +if test "${enable_dependency_tracking+set}" = set; then : + enableval=$enable_dependency_tracking; +fi + +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi + if test "x$enable_dependency_tracking" != xno; then + AMDEP_TRUE= + AMDEP_FALSE='#' +else + AMDEP_TRUE='#' + AMDEP_FALSE= +fi + + + +depcc="$CC" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CC_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CC_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CC_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } +CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then + am__fastdepCC_TRUE= + am__fastdepCC_FALSE='#' +else + am__fastdepCC_TRUE='#' + am__fastdepCC_FALSE= +fi + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if test "${ac_cv_prog_cxx_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + + + +# Make sure we can run config.sub. +$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +$as_echo_n "checking build system type... " >&6; } +if test "${ac_cv_build+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_build_alias=$build_alias +test "x$ac_build_alias" = x && + ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` +test "x$ac_build_alias" = x && + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 +ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +$as_echo "$ac_cv_build" >&6; } +case $ac_cv_build in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; +esac +build=$ac_cv_build +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_build +shift +build_cpu=$1 +build_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +build_os=$* +IFS=$ac_save_IFS +case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +$as_echo_n "checking host system type... " >&6; } +if test "${ac_cv_host+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$host_alias" = x; then + ac_cv_host=$ac_cv_build +else + ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +$as_echo "$ac_cv_host" >&6; } +case $ac_cv_host in +*-*-*) ;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; +esac +host=$ac_cv_host +ac_save_IFS=$IFS; IFS='-' +set x $ac_cv_host +shift +host_cpu=$1 +host_vendor=$2 +shift; shift +# Remember, the first character of IFS is used to create $*, +# except with old shells: +host_os=$* +IFS=$ac_save_IFS +case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac + + +enable_win32_dll=yes + +case $host in +*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. +set dummy ${ac_tool_prefix}as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AS"; then + ac_cv_prog_AS="$AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AS="${ac_tool_prefix}as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AS=$ac_cv_prog_AS +if test -n "$AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AS" >&5 +$as_echo "$AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AS"; then + ac_ct_AS=$AS + # Extract the first word of "as", so it can be a program name with args. +set dummy as; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AS"; then + ac_cv_prog_ac_ct_AS="$ac_ct_AS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AS="as" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AS=$ac_cv_prog_ac_ct_AS +if test -n "$ac_ct_AS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AS" >&5 +$as_echo "$ac_ct_AS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AS" = x; then + AS="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AS=$ac_ct_AS + fi +else + AS="$ac_cv_prog_AS" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. +set dummy ${ac_tool_prefix}dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DLLTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DLLTOOL"; then + ac_cv_prog_DLLTOOL="$DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DLLTOOL="${ac_tool_prefix}dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DLLTOOL=$ac_cv_prog_DLLTOOL +if test -n "$DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 +$as_echo "$DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DLLTOOL"; then + ac_ct_DLLTOOL=$DLLTOOL + # Extract the first word of "dlltool", so it can be a program name with args. +set dummy dlltool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DLLTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DLLTOOL"; then + ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DLLTOOL="dlltool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL +if test -n "$ac_ct_DLLTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 +$as_echo "$ac_ct_DLLTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DLLTOOL" = x; then + DLLTOOL="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DLLTOOL=$ac_ct_DLLTOOL + fi +else + DLLTOOL="$ac_cv_prog_DLLTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + + ;; +esac + +test -z "$AS" && AS=as + + + + + +test -z "$DLLTOOL" && DLLTOOL=dlltool + + + + + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + + +enable_dlopen=yes + + + +case `pwd` in + *\ * | *\ *) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 +$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; +esac + + + +macro_version='2.2.6b' +macro_revision='1.3017' + + + + + + + + + + + + + +ltmain="$ac_aux_dir/ltmain.sh" + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 +$as_echo_n "checking for a sed that does not truncate output... " >&6; } +if test "${ac_cv_path_SED+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ + for ac_i in 1 2 3 4 5 6 7; do + ac_script="$ac_script$as_nl$ac_script" + done + echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed + { ac_script=; unset ac_script;} + if test -z "$SED"; then + ac_path_SED_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in sed gsed; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_SED="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue +# Check for GNU ac_path_SED and select it if it is found. + # Check for GNU $ac_path_SED +case `"$ac_path_SED" --version 2>&1` in +*GNU*) + ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo '' >> "conftest.nl" + "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_SED_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_SED="$ac_path_SED" + ac_path_SED_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_SED_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_SED"; then + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 + fi +else + ac_cv_path_SED=$SED +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 +$as_echo "$ac_cv_path_SED" >&6; } + SED="$ac_cv_path_SED" + rm -f conftest.sed + +test -z "$SED" && SED=sed +Xsed="$SED -e 1s/^X//" + + + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +$as_echo_n "checking for grep that handles long lines and -e... " >&6; } +if test "${ac_cv_path_GREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in grep ggrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +$as_echo "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +$as_echo_n "checking for egrep... " >&6; } +if test "${ac_cv_path_EGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in egrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +$as_echo "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 +$as_echo_n "checking for fgrep... " >&6; } +if test "${ac_cv_path_FGREP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 + then ac_cv_path_FGREP="$GREP -F" + else + if test -z "$FGREP"; then + ac_path_FGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_prog in fgrep; do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext" + { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue +# Check for GNU ac_path_FGREP and select it if it is found. + # Check for GNU $ac_path_FGREP +case `"$ac_path_FGREP" --version 2>&1` in +*GNU*) + ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;; +*) + ac_count=0 + $as_echo_n 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + $as_echo 'FGREP' >> "conftest.nl" + "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_FGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_FGREP="$ac_path_FGREP" + ac_path_FGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_FGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_FGREP"; then + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_FGREP=$FGREP +fi + + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 +$as_echo "$ac_cv_path_FGREP" >&6; } + FGREP="$ac_cv_path_FGREP" + + +test -z "$GREP" && GREP=grep + + + + + + + + + + + + + + + + + + + +@%:@ Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 +$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; } +if test "${lt_cv_path_NM+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NM"; then + # Let the user override the test. + lt_cv_path_NM="$NM" +else + lt_nm_to_check="${ac_tool_prefix}nm" + if test -n "$ac_tool_prefix" && test "$build" = "$host"; then + lt_nm_to_check="$lt_nm_to_check nm" + fi + for lt_tmp_nm in $lt_nm_to_check; do + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + tmp_nm="$ac_dir/$lt_tmp_nm" + if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then + # Check to see if the nm accepts a BSD-compat flag. + # Adding the `sed 1q' prevents false positives on HP-UX, which says: + # nm: unknown option "B" ignored + # Tru64's nm complains that /dev/null is an invalid object file + case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 +$as_echo "$lt_cv_path_NM" >&6; } +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + if test -n "$ac_tool_prefix"; then + for ac_prog in "dumpbin -symbols" "link -dump -symbols" + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DUMPBIN"; then + ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DUMPBIN=$ac_cv_prog_DUMPBIN +if test -n "$DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 +$as_echo "$DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$DUMPBIN" && break + done +fi +if test -z "$DUMPBIN"; then + ac_ct_DUMPBIN=$DUMPBIN + for ac_prog in "dumpbin -symbols" "link -dump -symbols" +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DUMPBIN"; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DUMPBIN="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN +if test -n "$ac_ct_DUMPBIN"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 +$as_echo "$ac_ct_DUMPBIN" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_DUMPBIN" && break +done + + if test "x$ac_ct_DUMPBIN" = x; then + DUMPBIN=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DUMPBIN=$ac_ct_DUMPBIN + fi +fi + + + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 +$as_echo_n "checking the name lister ($NM) interface... " >&6; } +if test "${lt_cv_nm_interface+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&5) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&5 + (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&5 + (eval echo "\"\$as_me:__oline__: output\"" >&5) + cat conftest.out >&5 + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest* +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 +$as_echo "$lt_cv_nm_interface" >&6; } + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 +$as_echo_n "checking whether ln -s works... " >&6; } +LN_S=$as_ln_s +if test "$LN_S" = "ln -s"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 +$as_echo "no, using $LN_S" >&6; } +fi + +# find the maximum length of command line arguments +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 +$as_echo_n "checking the maximum length of command line arguments... " >&6; } +if test "${lt_cv_sys_max_cmd_len+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac + +fi + +if test -n $lt_cv_sys_max_cmd_len ; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 +$as_echo "$lt_cv_sys_max_cmd_len" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 +$as_echo "none" >&6; } +fi +max_cmd_len=$lt_cv_sys_max_cmd_len + + + + + + +: ${CP="cp -f"} +: ${MV="mv -f"} +: ${RM="rm -f"} + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5 +$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; } +# Try some XSI features +xsi_shell=no +( _lt_dummy="a/b/c" + test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \ + = c,a/b,, \ + && eval 'test $(( 1 + 1 )) -eq 2 \ + && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \ + && xsi_shell=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5 +$as_echo "$xsi_shell" >&6; } + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5 +$as_echo_n "checking whether the shell understands \"+=\"... " >&6; } +lt_shell_append=no +( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \ + >/dev/null 2>&1 \ + && lt_shell_append=yes +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5 +$as_echo "$lt_shell_append" >&6; } + + +if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then + lt_unset=unset +else + lt_unset=false +fi + + + + + +# test EBCDIC or ASCII +case `echo X|tr X '\101'` in + A) # ASCII based system + # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr + lt_SP2NL='tr \040 \012' + lt_NL2SP='tr \015\012 \040\040' + ;; + *) # EBCDIC based system + lt_SP2NL='tr \100 \n' + lt_NL2SP='tr \r\n \100\100' + ;; +esac + + + + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 +$as_echo_n "checking for $LD option to reload object files... " >&6; } +if test "${lt_cv_ld_reload_flag+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_reload_flag='-r' +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 +$as_echo "$lt_cv_ld_reload_flag" >&6; } +reload_flag=$lt_cv_ld_reload_flag +case $reload_flag in +"" | " "*) ;; +*) reload_flag=" $reload_flag" ;; +esac +reload_cmds='$LD$reload_flag -o $output$reload_objs' +case $host_os in + darwin*) + if test "$GCC" = yes; then + reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs' + else + reload_cmds='$LD$reload_flag -o $output$reload_objs' + fi + ;; +esac + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + +test -z "$OBJDUMP" && OBJDUMP=objdump + + + + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 +$as_echo_n "checking how to recognize dependent libraries... " >&6; } +if test "${lt_cv_deplibs_check_method+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_file_magic_cmd='$MAGIC_CMD' +lt_cv_file_magic_test_file= +lt_cv_deplibs_check_method='unknown' +# Need to set the preceding variable on all platforms that support +# interlibrary dependencies. +# 'none' -- dependencies not supported. +# `unknown' -- same as none, but documents that we really don't know. +# 'pass_all' -- all dependencies passed with no checks. +# 'test_compile' -- check by making test program. +# 'file_magic [[regex]]' -- check by looking for files in library path +# which responds to the $file_magic_cmd with a given extended regex. +# If you have `file' or equivalent on your system and you're not sure +# whether `pass_all' will *always* work, you probably want this one. + +case $host_os in +aix[4-9]*) + lt_cv_deplibs_check_method=pass_all + ;; + +beos*) + lt_cv_deplibs_check_method=pass_all + ;; + +bsdi[45]*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' + lt_cv_file_magic_cmd='/usr/bin/file -L' + lt_cv_file_magic_test_file=/shlib/libc.so + ;; + +cygwin*) + # func_win32_libid is a shell function defined in ltmain.sh + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + ;; + +mingw* | pw32*) + # Base MSYS/MinGW do not provide the 'file' command needed by + # func_win32_libid shell function, so use a weaker test based on 'objdump', + # unless we find 'file', for example because we are cross-compiling. + if ( file / ) >/dev/null 2>&1; then + lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' + lt_cv_file_magic_cmd='func_win32_libid' + else + lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + fi + ;; + +cegcc) + # use the weaker test based on 'objdump'. See mingw*. + lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' + lt_cv_file_magic_cmd='$OBJDUMP -f' + ;; + +darwin* | rhapsody*) + lt_cv_deplibs_check_method=pass_all + ;; + +freebsd* | dragonfly*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + case $host_cpu in + i*86 ) + # Not sure whether the presence of OpenBSD here was a mistake. + # Let's accept both of them until this is cleared up. + lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` + ;; + esac + else + lt_cv_deplibs_check_method=pass_all + fi + ;; + +gnu*) + lt_cv_deplibs_check_method=pass_all + ;; + +hpux10.20* | hpux11*) + lt_cv_file_magic_cmd=/usr/bin/file + case $host_cpu in + ia64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' + lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so + ;; + hppa*64*) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]' + lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl + ;; + *) + lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' + lt_cv_file_magic_test_file=/usr/lib/libc.sl + ;; + esac + ;; + +interix[3-9]*) + # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' + ;; + +irix5* | irix6* | nonstopux*) + case $LD in + *-32|*"-32 ") libmagic=32-bit;; + *-n32|*"-n32 ") libmagic=N32;; + *-64|*"-64 ") libmagic=64-bit;; + *) libmagic=never-match;; + esac + lt_cv_deplibs_check_method=pass_all + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + lt_cv_deplibs_check_method=pass_all + ;; + +netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' + fi + ;; + +newos6*) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' + lt_cv_file_magic_cmd=/usr/bin/file + lt_cv_file_magic_test_file=/usr/lib/libnls.so + ;; + +*nto* | *qnx*) + lt_cv_deplibs_check_method=pass_all + ;; + +openbsd*) + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' + else + lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' + fi + ;; + +osf3* | osf4* | osf5*) + lt_cv_deplibs_check_method=pass_all + ;; + +rdos*) + lt_cv_deplibs_check_method=pass_all + ;; + +solaris*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + lt_cv_deplibs_check_method=pass_all + ;; + +sysv4 | sysv4.3*) + case $host_vendor in + motorola) + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' + lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` + ;; + ncr) + lt_cv_deplibs_check_method=pass_all + ;; + sequent) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' + ;; + sni) + lt_cv_file_magic_cmd='/bin/file' + lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" + lt_cv_file_magic_test_file=/lib/libc.so + ;; + siemens) + lt_cv_deplibs_check_method=pass_all + ;; + pc) + lt_cv_deplibs_check_method=pass_all + ;; + esac + ;; + +tpf*) + lt_cv_deplibs_check_method=pass_all + ;; +esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 +$as_echo "$lt_cv_deplibs_check_method" >&6; } +file_magic_cmd=$lt_cv_file_magic_cmd +deplibs_check_method=$lt_cv_deplibs_check_method +test -z "$deplibs_check_method" && deplibs_check_method=unknown + + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. +set dummy ${ac_tool_prefix}ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$AR"; then + ac_cv_prog_AR="$AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AR="${ac_tool_prefix}ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +AR=$ac_cv_prog_AR +if test -n "$AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +$as_echo "$AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_AR"; then + ac_ct_AR=$AR + # Extract the first word of "ar", so it can be a program name with args. +set dummy ar; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_AR+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_AR"; then + ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_AR="ar" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_AR=$ac_cv_prog_ac_ct_AR +if test -n "$ac_ct_AR"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +$as_echo "$ac_ct_AR" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_AR" = x; then + AR="false" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + AR=$ac_ct_AR + fi +else + AR="$ac_cv_prog_AR" +fi + +test -z "$AR" && AR=ar +test -z "$AR_FLAGS" && AR_FLAGS=cru + + + + + + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. +set dummy ${ac_tool_prefix}strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$STRIP"; then + ac_cv_prog_STRIP="$STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_STRIP="${ac_tool_prefix}strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +STRIP=$ac_cv_prog_STRIP +if test -n "$STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 +$as_echo "$STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_STRIP"; then + ac_ct_STRIP=$STRIP + # Extract the first word of "strip", so it can be a program name with args. +set dummy strip; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_STRIP"; then + ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_STRIP="strip" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP +if test -n "$ac_ct_STRIP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 +$as_echo "$ac_ct_STRIP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_STRIP" = x; then + STRIP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + STRIP=$ac_ct_STRIP + fi +else + STRIP="$ac_cv_prog_STRIP" +fi + +test -z "$STRIP" && STRIP=: + + + + + + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. +set dummy ${ac_tool_prefix}ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +RANLIB=$ac_cv_prog_RANLIB +if test -n "$RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +$as_echo "$RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_RANLIB"; then + ac_ct_RANLIB=$RANLIB + # Extract the first word of "ranlib", so it can be a program name with args. +set dummy ranlib; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_RANLIB"; then + ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_RANLIB="ranlib" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB +if test -n "$ac_ct_RANLIB"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +$as_echo "$ac_ct_RANLIB" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_RANLIB" = x; then + RANLIB=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + RANLIB=$ac_ct_RANLIB + fi +else + RANLIB="$ac_cv_prog_RANLIB" +fi + +test -z "$RANLIB" && RANLIB=: + + + + + + +# Determine commands to create old-style static archives. +old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' +old_postinstall_cmds='chmod 644 $oldlib' +old_postuninstall_cmds= + +if test -n "$RANLIB"; then + case $host_os in + openbsd*) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib" + ;; + *) + old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib" + ;; + esac + old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + +# Check for command to grab the raw symbol name followed by C symbol from nm. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 +$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; } +if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + +# These are sane defaults that work on at least a few old systems. +# [They come from Ultrix. What could be older than Ultrix?!! ;)] + +# Character class describing NM global symbol codes. +symcode='[BCDEGRST]' + +# Regexp to match symbols that can be accessed directly from C. +sympat='\([_A-Za-z][_A-Za-z0-9]*\)' + +# Define system-specific variables. +case $host_os in +aix*) + symcode='[BCDT]' + ;; +cygwin* | mingw* | pw32* | cegcc*) + symcode='[ABCDGISTW]' + ;; +hpux*) + if test "$host_cpu" = ia64; then + symcode='[ABCDEGRST]' + fi + ;; +irix* | nonstopux*) + symcode='[BCDEGRST]' + ;; +osf*) + symcode='[BCDEGQRST]' + ;; +solaris*) + symcode='[BDRT]' + ;; +sco3.2v5*) + symcode='[DT]' + ;; +sysv4.2uw2*) + symcode='[DT]' + ;; +sysv5* | sco5v6* | unixware* | OpenUNIX*) + symcode='[ABDT]' + ;; +sysv4) + symcode='[DFNSTU]' + ;; +esac + +# If we're using GNU nm, then use its standard symbol codes. +case `$NM -V 2>&1` in +*GNU* | *'with BFD'*) + symcode='[ABCDGIRSTW]' ;; +esac + +# Transform an extracted symbol line into a proper C declaration. +# Some systems (esp. on ia64) link data and code symbols differently, +# so use this general approach. +lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'" + +# Transform an extracted symbol line into symbol name and symbol address +lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'" +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'" + +# Handle CRLF in mingw tool chain +opt_cr= +case $build_os in +mingw*) + opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp + ;; +esac + +# Try without a prefix underscore, then with it. +for ac_symprfx in "" "_"; do + + # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. + symxfrm="\\1 $ac_symprfx\\2 \\2" + + # Write the raw and C identifiers. + if test "$lt_cv_nm_interface" = "MS dumpbin"; then + # Fake it for dumpbin and say T for any non-static function + # and D for any global variable. + # Also find C++ and __fastcall symbols from MSVC++, + # which start with @ or ?. + lt_cv_sys_global_symbol_pipe="$AWK '"\ +" {last_section=section; section=\$ 3};"\ +" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ +" \$ 0!~/External *\|/{next};"\ +" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ +" {if(hide[section]) next};"\ +" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\ +" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\ +" s[1]~/^[@?]/{print s[1], s[1]; next};"\ +" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\ +" ' prfx=^$ac_symprfx" + else + lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" + fi + + # Check to see that the pipe works correctly. + pipe_works=no + + rm -f conftest* + cat > conftest.$ac_ext <<_LT_EOF +#ifdef __cplusplus +extern "C" { +#endif +char nm_test_var; +void nm_test_func(void); +void nm_test_func(void){} +#ifdef __cplusplus +} +#endif +int main(){nm_test_var='a';nm_test_func();return(0);} +_LT_EOF + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Now try to grab the symbols. + nlist=conftest.nm + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5 + (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s "$nlist"; then + # Try sorting and uniquifying the output. + if sort "$nlist" | uniq > "$nlist"T; then + mv -f "$nlist"T "$nlist" + else + rm -f "$nlist"T + fi + + # Make sure that we snagged all the symbols we need. + if $GREP ' nm_test_var$' "$nlist" >/dev/null; then + if $GREP ' nm_test_func$' "$nlist" >/dev/null; then + cat <<_LT_EOF > conftest.$ac_ext +#ifdef __cplusplus +extern "C" { +#endif + +_LT_EOF + # Now generate the symbol file. + eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' + + cat <<_LT_EOF >> conftest.$ac_ext + +/* The mapping between symbol names and symbols. */ +const struct { + const char *name; + void *address; +} +lt__PROGRAM__LTX_preloaded_symbols[] = +{ + { "@PROGRAM@", (void *) 0 }, +_LT_EOF + $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext + cat <<\_LT_EOF >> conftest.$ac_ext + {0, (void *) 0} +}; + +/* This works around a problem in FreeBSD linker */ +#ifdef FREEBSD_WORKAROUND +static const void *lt_preloaded_setup() { + return lt__PROGRAM__LTX_preloaded_symbols; +} +#endif + +#ifdef __cplusplus +} +#endif +_LT_EOF + # Now try linking the two files. + mv conftest.$ac_objext conftstm.$ac_objext + lt_save_LIBS="$LIBS" + lt_save_CFLAGS="$CFLAGS" + LIBS="conftstm.$ac_objext" + CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext}; then + pipe_works=yes + fi + LIBS="$lt_save_LIBS" + CFLAGS="$lt_save_CFLAGS" + else + echo "cannot find nm_test_func in $nlist" >&5 + fi + else + echo "cannot find nm_test_var in $nlist" >&5 + fi + else + echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 + fi + else + echo "$progname: failed program was:" >&5 + cat conftest.$ac_ext >&5 + fi + rm -rf conftest* conftst* + + # Do not use the global_symbol_pipe unless it works. + if test "$pipe_works" = yes; then + break + else + lt_cv_sys_global_symbol_pipe= + fi +done + +fi + +if test -z "$lt_cv_sys_global_symbol_pipe"; then + lt_cv_sys_global_symbol_to_cdecl= +fi +if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5 +$as_echo "failed" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5 +$as_echo "ok" >&6; } +fi + + + + + + + + + + + + + + + + + + + + + + + +@%:@ Check whether --enable-libtool-lock was given. +if test "${enable_libtool_lock+set}" = set; then : + enableval=$enable_libtool_lock; +fi + +test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes + +# Some flags need to be propagated to the compiler or linker for good +# libtool support. +case $host in +ia64-*-hpux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.$ac_objext` in + *ELF-32*) + HPUX_IA64_MODE="32" + ;; + *ELF-64*) + HPUX_IA64_MODE="64" + ;; + esac + fi + rm -rf conftest* + ;; +*-*-irix6*) + # Find out which ABI we are using. + echo '#line __oline__ "configure"' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + if test "$lt_cv_prog_gnu_ld" = yes; then + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -melf32bsmip" + ;; + *N32*) + LD="${LD-ld} -melf32bmipn32" + ;; + *64-bit*) + LD="${LD-ld} -melf64bmip" + ;; + esac + else + case `/usr/bin/file conftest.$ac_objext` in + *32-bit*) + LD="${LD-ld} -32" + ;; + *N32*) + LD="${LD-ld} -n32" + ;; + *64-bit*) + LD="${LD-ld} -64" + ;; + esac + fi + fi + rm -rf conftest* + ;; + +x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \ +s390*-*linux*|s390*-*tpf*|sparc*-*linux*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *32-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_i386_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_i386" + ;; + ppc64-*linux*|powerpc64-*linux*) + LD="${LD-ld} -m elf32ppclinux" + ;; + s390x-*linux*) + LD="${LD-ld} -m elf_s390" + ;; + sparc64-*linux*) + LD="${LD-ld} -m elf32_sparc" + ;; + esac + ;; + *64-bit*) + case $host in + x86_64-*kfreebsd*-gnu) + LD="${LD-ld} -m elf_x86_64_fbsd" + ;; + x86_64-*linux*) + LD="${LD-ld} -m elf_x86_64" + ;; + ppc*-*linux*|powerpc*-*linux*) + LD="${LD-ld} -m elf64ppc" + ;; + s390*-*linux*|s390*-*tpf*) + LD="${LD-ld} -m elf64_s390" + ;; + sparc*-*linux*) + LD="${LD-ld} -m elf64_sparc" + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; + +*-*-sco3.2v5*) + # On SCO OpenServer 5, we need -belf to get full-featured binaries. + SAVE_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -belf" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 +$as_echo_n "checking whether the C compiler needs -belf... " >&6; } +if test "${lt_cv_cc_needs_belf+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_cc_needs_belf=yes +else + lt_cv_cc_needs_belf=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 +$as_echo "$lt_cv_cc_needs_belf" >&6; } + if test x"$lt_cv_cc_needs_belf" != x"yes"; then + # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf + CFLAGS="$SAVE_CFLAGS" + fi + ;; +sparc*-*solaris*) + # Find out which ABI we are using. + echo 'int i;' > conftest.$ac_ext + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + case `/usr/bin/file conftest.o` in + *64-bit*) + case $lt_cv_prog_gnu_ld in + yes*) LD="${LD-ld} -m elf64_sparc" ;; + *) + if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then + LD="${LD-ld} -64" + fi + ;; + esac + ;; + esac + fi + rm -rf conftest* + ;; +esac + +need_locks="$enable_libtool_lock" + + + case $host_os in + rhapsody* | darwin*) + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. +set dummy ${ac_tool_prefix}dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$DSYMUTIL"; then + ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +DSYMUTIL=$ac_cv_prog_DSYMUTIL +if test -n "$DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 +$as_echo "$DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_DSYMUTIL"; then + ac_ct_DSYMUTIL=$DSYMUTIL + # Extract the first word of "dsymutil", so it can be a program name with args. +set dummy dsymutil; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_DSYMUTIL"; then + ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_DSYMUTIL="dsymutil" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL +if test -n "$ac_ct_DSYMUTIL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 +$as_echo "$ac_ct_DSYMUTIL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_DSYMUTIL" = x; then + DSYMUTIL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + DSYMUTIL=$ac_ct_DSYMUTIL + fi +else + DSYMUTIL="$ac_cv_prog_DSYMUTIL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. +set dummy ${ac_tool_prefix}nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$NMEDIT"; then + ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +NMEDIT=$ac_cv_prog_NMEDIT +if test -n "$NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 +$as_echo "$NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_NMEDIT"; then + ac_ct_NMEDIT=$NMEDIT + # Extract the first word of "nmedit", so it can be a program name with args. +set dummy nmedit; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_NMEDIT"; then + ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_NMEDIT="nmedit" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT +if test -n "$ac_ct_NMEDIT"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 +$as_echo "$ac_ct_NMEDIT" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_NMEDIT" = x; then + NMEDIT=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + NMEDIT=$ac_ct_NMEDIT + fi +else + NMEDIT="$ac_cv_prog_NMEDIT" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. +set dummy ${ac_tool_prefix}lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$LIPO"; then + ac_cv_prog_LIPO="$LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_LIPO="${ac_tool_prefix}lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +LIPO=$ac_cv_prog_LIPO +if test -n "$LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 +$as_echo "$LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_LIPO"; then + ac_ct_LIPO=$LIPO + # Extract the first word of "lipo", so it can be a program name with args. +set dummy lipo; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_LIPO"; then + ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_LIPO="lipo" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO +if test -n "$ac_ct_LIPO"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 +$as_echo "$ac_ct_LIPO" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_LIPO" = x; then + LIPO=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + LIPO=$ac_ct_LIPO + fi +else + LIPO="$ac_cv_prog_LIPO" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL"; then + ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL="${ac_tool_prefix}otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL=$ac_cv_prog_OTOOL +if test -n "$OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 +$as_echo "$OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL"; then + ac_ct_OTOOL=$OTOOL + # Extract the first word of "otool", so it can be a program name with args. +set dummy otool; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL"; then + ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL="otool" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL +if test -n "$ac_ct_OTOOL"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 +$as_echo "$ac_ct_OTOOL" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL" = x; then + OTOOL=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL=$ac_ct_OTOOL + fi +else + OTOOL="$ac_cv_prog_OTOOL" +fi + + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. +set dummy ${ac_tool_prefix}otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OTOOL64"; then + ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OTOOL64=$ac_cv_prog_OTOOL64 +if test -n "$OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 +$as_echo "$OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OTOOL64"; then + ac_ct_OTOOL64=$OTOOL64 + # Extract the first word of "otool64", so it can be a program name with args. +set dummy otool64; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OTOOL64"; then + ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_OTOOL64="otool64" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 +if test -n "$ac_ct_OTOOL64"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 +$as_echo "$ac_ct_OTOOL64" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OTOOL64" = x; then + OTOOL64=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OTOOL64=$ac_ct_OTOOL64 + fi +else + OTOOL64="$ac_cv_prog_OTOOL64" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 +$as_echo_n "checking for -single_module linker flag... " >&6; } +if test "${lt_cv_apple_cc_single_mod+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_apple_cc_single_mod=no + if test -z "${LT_MULTI_MODULE}"; then + # By default we will add the -single_module flag. You can override + # by either setting the environment variable LT_MULTI_MODULE + # non-empty at configure time, or by adding -multi_module to the + # link flags. + rm -rf libconftest.dylib* + echo "int foo(void){return 1;}" > conftest.c + echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ +-dynamiclib -Wl,-single_module conftest.c" >&5 + $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ + -dynamiclib -Wl,-single_module conftest.c 2>conftest.err + _lt_result=$? + if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then + lt_cv_apple_cc_single_mod=yes + else + cat conftest.err >&5 + fi + rm -rf libconftest.dylib* + rm -f conftest.* + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 +$as_echo "$lt_cv_apple_cc_single_mod" >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 +$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; } +if test "${lt_cv_ld_exported_symbols_list+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_ld_exported_symbols_list=no + save_LDFLAGS=$LDFLAGS + echo "_main" > conftest.sym + LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + lt_cv_ld_exported_symbols_list=yes +else + lt_cv_ld_exported_symbols_list=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 +$as_echo "$lt_cv_ld_exported_symbols_list" >&6; } + case $host_os in + rhapsody* | darwin1.[012]) + _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;; + darwin1.*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + darwin*) # darwin 5.x on + # if running on 10.5 or later, the deployment target defaults + # to the OS version, if on x86, and 10.4, the deployment + # target defaults to 10.4. Don't you love it? + case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in + 10.0,*86*-darwin8*|10.0,*-darwin[91]*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + 10.[012]*) + _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;; + 10.*) + _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;; + esac + ;; + esac + if test "$lt_cv_apple_cc_single_mod" = "yes"; then + _lt_dar_single_mod='$single_module' + fi + if test "$lt_cv_ld_exported_symbols_list" = "yes"; then + _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym' + else + _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}' + fi + if test "$DSYMUTIL" != ":"; then + _lt_dsymutil='~$DSYMUTIL $lib || :' + else + _lt_dsymutil= + fi + ;; + esac + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +$as_echo_n "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test "${ac_cv_prog_CPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CPP needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +$as_echo "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5 ; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 +$as_echo_n "checking for ANSI C header files... " >&6; } +if test "${ac_cv_header_stdc+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#include +#include + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + ac_cv_header_stdc=yes +else + ac_cv_header_stdc=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + +if test $ac_cv_header_stdc = yes; then + # SunOS 4.x string.h does not declare mem*, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "memchr" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "free" >/dev/null 2>&1; then : + +else + ac_cv_header_stdc=no +fi +rm -f conftest* + +fi + +if test $ac_cv_header_stdc = yes; then + # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. + if test "$cross_compiling" = yes; then : + : +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +#include +#if ((' ' & 0x0FF) == 0x020) +# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') +# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) +#else +# define ISLOWER(c) \ + (('a' <= (c) && (c) <= 'i') \ + || ('j' <= (c) && (c) <= 'r') \ + || ('s' <= (c) && (c) <= 'z')) +# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) +#endif + +#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) +int +main () +{ + int i; + for (i = 0; i < 256; i++) + if (XOR (islower (i), ISLOWER (i)) + || toupper (i) != TOUPPER (i)) + return 2; + return 0; +} +_ACEOF +if ac_fn_c_try_run "$LINENO"; then : + +else + ac_cv_header_stdc=no +fi +rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ + conftest.$ac_objext conftest.beam conftest.$ac_ext +fi + +fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 +$as_echo "$ac_cv_header_stdc" >&6; } +if test $ac_cv_header_stdc = yes; then + +$as_echo "@%:@define STDC_HEADERS 1" >>confdefs.h + +fi + +# On IRIX 5.3, sys/types and inttypes.h are conflicting. +for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ + inttypes.h stdint.h unistd.h +do : + as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` +ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +" +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : + cat >>confdefs.h <<_ACEOF +@%:@define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 +_ACEOF + +fi + +done + + +for ac_header in dlfcn.h +do : + ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default +" +if test "x$ac_cv_header_dlfcn_h" = x""yes; then : + cat >>confdefs.h <<_ACEOF +@%:@define HAVE_DLFCN_H 1 +_ACEOF + +fi + +done + + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +if test -z "$CXX"; then + if test -n "$CCC"; then + CXX=$CCC + else + if test -n "$ac_tool_prefix"; then + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$CXX"; then + ac_cv_prog_CXX="$CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CXX=$ac_cv_prog_CXX +if test -n "$CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 +$as_echo "$CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$CXX" && break + done +fi +if test -z "$CXX"; then + ac_ct_CXX=$CXX + for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_CXX"; then + ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_ac_ct_CXX="$ac_prog" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_CXX=$ac_cv_prog_ac_ct_CXX +if test -n "$ac_ct_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 +$as_echo "$ac_ct_CXX" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$ac_ct_CXX" && break +done + + if test "x$ac_ct_CXX" = x; then + CXX="g++" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CXX=$ac_ct_CXX + fi +fi + + fi +fi +# Provide some information about the compiler. +$as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 +set X $ac_compile +ac_compiler=$2 +for ac_option in --version -v -V -qversion; do + { { ac_try="$ac_compiler $ac_option >&5" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_compiler $ac_option >&5") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + sed '10a\ +... rest of stderr output deleted ... + 10q' conftest.err >conftest.er1 + cat conftest.er1 >&5 + fi + rm -f conftest.er1 conftest.err + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +done + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 +$as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } +if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_compiler_gnu=yes +else + ac_compiler_gnu=no +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +ac_cv_cxx_compiler_gnu=$ac_compiler_gnu + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 +$as_echo "$ac_cv_cxx_compiler_gnu" >&6; } +if test $ac_compiler_gnu = yes; then + GXX=yes +else + GXX= +fi +ac_test_CXXFLAGS=${CXXFLAGS+set} +ac_save_CXXFLAGS=$CXXFLAGS +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 +$as_echo_n "checking whether $CXX accepts -g... " >&6; } +if test "${ac_cv_prog_cxx_g+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_save_cxx_werror_flag=$ac_cxx_werror_flag + ac_cxx_werror_flag=yes + ac_cv_prog_cxx_g=no + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +else + CXXFLAGS="" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + +else + ac_cxx_werror_flag=$ac_save_cxx_werror_flag + CXXFLAGS="-g" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_compile "$LINENO"; then : + ac_cv_prog_cxx_g=yes +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + ac_cxx_werror_flag=$ac_save_cxx_werror_flag +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 +$as_echo "$ac_cv_prog_cxx_g" >&6; } +if test "$ac_test_CXXFLAGS" = set; then + CXXFLAGS=$ac_save_CXXFLAGS +elif test $ac_cv_prog_cxx_g = yes; then + if test "$GXX" = yes; then + CXXFLAGS="-g -O2" + else + CXXFLAGS="-g" + fi +else + if test "$GXX" = yes; then + CXXFLAGS="-O2" + else + CXXFLAGS= + fi +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +depcc="$CXX" am_compiler_list= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 +$as_echo_n "checking dependency style of $depcc... " >&6; } +if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_CXX_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` + fi + am__universal=false + case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_CXX_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_CXX_dependencies_compiler_type=none +fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 +$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } +CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type + + if + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then + am__fastdepCXX_TRUE= + am__fastdepCXX_FALSE='#' +else + am__fastdepCXX_TRUE='#' + am__fastdepCXX_FALSE= +fi + + +if test -n "$CXX" && ( test "X$CXX" != "Xno" && + ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) || + (test "X$CXX" != "Xg++"))) ; then + ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C++ preprocessor" >&5 +$as_echo_n "checking how to run the C++ preprocessor... " >&6; } +if test -z "$CXXCPP"; then + if test "${ac_cv_prog_CXXCPP+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # Double quotes because CXXCPP needs to be expanded + for CXXCPP in "$CXX -E" "/lib/cpp" + do + ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + break +fi + + done + ac_cv_prog_CXXCPP=$CXXCPP + +fi + CXXCPP=$ac_cv_prog_CXXCPP +else + ac_cv_prog_CXXCPP=$CXXCPP +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXXCPP" >&5 +$as_echo "$CXXCPP" >&6; } +ac_preproc_ok=false +for ac_cxx_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # Prefer to if __STDC__ is defined, since + # exists even on freestanding compilers. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@ifdef __STDC__ +@%:@ include +@%:@else +@%:@ include +@%:@endif + Syntax error +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + +else + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +@%:@include +_ACEOF +if ac_fn_cxx_try_cpp "$LINENO"; then : + # Broken: success on invalid input. +continue +else + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok; then : + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +_lt_caught_CXX_error=yes; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +else + _lt_caught_CXX_error=yes +fi + + + + + +# Set options + + + + + + @%:@ Check whether --enable-shared was given. +if test "${enable_shared+set}" = set; then : + enableval=$enable_shared; p=${PACKAGE-default} + case $enableval in + yes) enable_shared=yes ;; + no) enable_shared=no ;; + *) + enable_shared=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_shared=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_shared=yes +fi + + + + + + + + + + @%:@ Check whether --enable-static was given. +if test "${enable_static+set}" = set; then : + enableval=$enable_static; p=${PACKAGE-default} + case $enableval in + yes) enable_static=yes ;; + no) enable_static=no ;; + *) + enable_static=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_static=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_static=yes +fi + + + + + + + + + + +@%:@ Check whether --with-pic was given. +if test "${with_pic+set}" = set; then : + withval=$with_pic; pic_mode="$withval" +else + pic_mode=default +fi + + +test -z "$pic_mode" && pic_mode=default + + + + + + + + @%:@ Check whether --enable-fast-install was given. +if test "${enable_fast_install+set}" = set; then : + enableval=$enable_fast_install; p=${PACKAGE-default} + case $enableval in + yes) enable_fast_install=yes ;; + no) enable_fast_install=no ;; + *) + enable_fast_install=no + # Look at the argument we got. We use all the common list separators. + lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," + for pkg in $enableval; do + IFS="$lt_save_ifs" + if test "X$pkg" = "X$p"; then + enable_fast_install=yes + fi + done + IFS="$lt_save_ifs" + ;; + esac +else + enable_fast_install=yes +fi + + + + + + + + + + + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + + + + + + + + + + + + + + + + + + + + + + + + +test -z "$LN_S" && LN_S="ln -s" + + + + + + + + + + + + + + +if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 +$as_echo_n "checking for objdir... " >&6; } +if test "${lt_cv_objdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + rm -f .libs 2>/dev/null +mkdir .libs 2>/dev/null +if test -d .libs; then + lt_cv_objdir=.libs +else + # MS-DOS does not allow filenames that begin with a dot. + lt_cv_objdir=_libs +fi +rmdir .libs 2>/dev/null +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 +$as_echo "$lt_cv_objdir" >&6; } +objdir=$lt_cv_objdir + + + + + +cat >>confdefs.h <<_ACEOF +@%:@define LT_OBJDIR "$lt_cv_objdir/" +_ACEOF + + + + + + + + + + + + + + + + + +case $host_os in +aix3*) + # AIX sometimes has problems with the GCC collect2 program. For some + # reason, if we set the COLLECT_NAMES environment variable, the problems + # vanish in a puff of smoke. + if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES + fi + ;; +esac + +# Sed substitution that helps us do robust quoting. It backslashifies +# metacharacters that are still active within double-quoted strings. +sed_quote_subst='s/\(["`$\\]\)/\\\1/g' + +# Same as above, but do not quote variable references. +double_quote_subst='s/\(["`\\]\)/\\\1/g' + +# Sed substitution to delay expansion of an escaped shell variable in a +# double_quote_subst'ed string. +delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' + +# Sed substitution to delay expansion of an escaped single quote. +delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' + +# Sed substitution to avoid accidental globbing in evaled expressions +no_glob_subst='s/\*/\\\*/g' + +# Global variables: +ofile=libtool +can_build_shared=yes + +# All known linkers require a `.a' archive for static linking (except MSVC, +# which needs '.lib'). +libext=a + +with_gnu_ld="$lt_cv_prog_gnu_ld" + +old_CC="$CC" +old_CFLAGS="$CFLAGS" + +# Set sane defaults for various variables +test -z "$CC" && CC=cc +test -z "$LTCC" && LTCC=$CC +test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS +test -z "$LD" && LD=ld +test -z "$ac_objext" && ac_objext=o + +for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + +# Only perform the check for file, if the check method requires it +test -z "$MAGIC_CMD" && MAGIC_CMD=file +case $deplibs_check_method in +file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 +$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + + + +if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5 +$as_echo_n "checking for file... " >&6; } +if test "${lt_cv_path_MAGIC_CMD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MAGIC_CMD in +[\\/*] | ?:[\\/]*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac +fi + +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 +$as_echo "$MAGIC_CMD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + else + MAGIC_CMD=: + fi +fi + + fi + ;; +esac + +# Use C for the default configuration in the libtool script + +lt_save_CC="$CC" +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +# Source file extension for C test sources. +ac_ext=c + +# Object file extension for compiled C test sources. +objext=o +objext=$objext + +# Code to be used in simple compile tests +lt_simple_compile_test_code="int some_variable = 0;" + +# Code to be used in simple link tests +lt_simple_link_test_code='int main(){return(0);}' + + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + +# Save the default compiler, since it gets overwritten when the other +# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. +compiler_DEFAULT=$CC + +# save warnings/boilerplate of simple test code +ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + +ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + +if test -n "$compiler"; then + +lt_prog_compiler_no_builtin_flag= + +if test "$GCC" = yes; then + lt_prog_compiler_no_builtin_flag=' -fno-builtin' + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 +$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } +if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_rtti_exceptions=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="-fno-rtti -fno-exceptions" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_rtti_exceptions=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 +$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; } + +if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then + lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" +else + : +fi + +fi + + + + + + + lt_prog_compiler_wl= +lt_prog_compiler_pic= +lt_prog_compiler_static= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + if test "$GCC" = yes; then + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_static='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic='-fno-common' + ;; + + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + ;; + + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + + msdosdjgpp*) + # Just because we use GCC doesn't mean we suddenly get shared libraries + # on systems that don't support them. + lt_prog_compiler_can_build_shared=no + enable_shared=no + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic=-Kconform_pic + fi + ;; + + *) + lt_prog_compiler_pic='-fPIC' + ;; + esac + else + # PORTME Check for flag to pass linker flags through the system compiler. + case $host_os in + aix*) + lt_prog_compiler_wl='-Wl,' + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static='-Bstatic' + else + lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' + fi + ;; + + mingw* | cygwin* | pw32* | os2* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + lt_prog_compiler_pic='-DDLL_EXPORT' + ;; + + hpux9* | hpux10* | hpux11*) + lt_prog_compiler_wl='-Wl,' + # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but + # not for PA HP-UX. + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic='+Z' + ;; + esac + # Is there a better lt_prog_compiler_static that works with the bundled CC? + lt_prog_compiler_static='${wl}-a ${wl}archive' + ;; + + irix5* | irix6* | nonstopux*) + lt_prog_compiler_wl='-Wl,' + # PIC (with -KPIC) is the default. + lt_prog_compiler_static='-non_shared' + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + # old Intel for x86_64 which still supported -KPIC. + ecc*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-static' + ;; + # icc used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + icc* | ifort*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fPIC' + lt_prog_compiler_static='-static' + ;; + # Lahey Fortran 8.1. + lf95*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='--shared' + lt_prog_compiler_static='--static' + ;; + pgcc* | pgf77* | pgf90* | pgf95*) + # Portland Group compilers (*not* the Pentium gcc compiler, + # which looks to be a dead project) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-fpic' + lt_prog_compiler_static='-Bstatic' + ;; + ccc*) + lt_prog_compiler_wl='-Wl,' + # All Alpha code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + xl*) + # IBM XL C 8.0/Fortran 10.1 on PPC + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-qpic' + lt_prog_compiler_static='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C 5.9 + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='-Wl,' + ;; + *Sun\ F*) + # Sun Fortran 8.3 passes all unrecognized flags to the linker + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + lt_prog_compiler_wl='' + ;; + esac + ;; + esac + ;; + + newsos6) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + *nto* | *qnx*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic='-fPIC -shared' + ;; + + osf3* | osf4* | osf5*) + lt_prog_compiler_wl='-Wl,' + # All OSF/1 code is PIC. + lt_prog_compiler_static='-non_shared' + ;; + + rdos*) + lt_prog_compiler_static='-non_shared' + ;; + + solaris*) + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + case $cc_basename in + f77* | f90* | f95*) + lt_prog_compiler_wl='-Qoption ld ';; + *) + lt_prog_compiler_wl='-Wl,';; + esac + ;; + + sunos4*) + lt_prog_compiler_wl='-Qoption ld ' + lt_prog_compiler_pic='-PIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4 | sysv4.2uw2* | sysv4.3*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + sysv4*MP*) + if test -d /usr/nec ;then + lt_prog_compiler_pic='-Kconform_pic' + lt_prog_compiler_static='-Bstatic' + fi + ;; + + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_pic='-KPIC' + lt_prog_compiler_static='-Bstatic' + ;; + + unicos*) + lt_prog_compiler_wl='-Wl,' + lt_prog_compiler_can_build_shared=no + ;; + + uts4*) + lt_prog_compiler_pic='-pic' + lt_prog_compiler_static='-Bstatic' + ;; + + *) + lt_prog_compiler_can_build_shared=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic= + ;; + *) + lt_prog_compiler_pic="$lt_prog_compiler_pic@&t@ -DPIC" + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5 +$as_echo "$lt_prog_compiler_pic" >&6; } + + + + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic@&t@ -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works" = xyes; then + case $lt_prog_compiler_pic in + "" | " "*) ;; + *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; + esac +else + lt_prog_compiler_pic= + lt_prog_compiler_can_build_shared=no +fi + +fi + + + + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works=yes + fi + else + lt_cv_prog_compiler_static_works=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 +$as_echo "$lt_cv_prog_compiler_static_works" >&6; } + +if test x"$lt_cv_prog_compiler_static_works" = xyes; then + : +else + lt_prog_compiler_static= +fi + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 +$as_echo "$lt_cv_prog_compiler_c_o" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + runpath_var= + allow_undefined_flag= + always_export_symbols=no + archive_cmds= + archive_expsym_cmds= + compiler_needs_object=no + enable_shared_with_static_runtimes=no + export_dynamic_flag_spec= + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + hardcode_automatic=no + hardcode_direct=no + hardcode_direct_absolute=no + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld= + hardcode_libdir_separator= + hardcode_minus_L=no + hardcode_shlibpath_var=unsupported + inherit_rpath=no + link_all_deplibs=unknown + module_cmds= + module_expsym_cmds= + old_archive_from_new_cmds= + old_archive_from_expsyms_cmds= + thread_safe_flag_spec= + whole_archive_flag_spec= + # include_expsyms should be a list of space-separated symbols to be *always* + # included in the symbol list + include_expsyms= + # exclude_expsyms can be an extended regexp of symbols to exclude + # it will be wrapped by ` (' and `)$', so one must not match beginning or + # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc', + # as well as any symbol that contains `d'. + exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out + # platforms (ab)use it in PIC code, but their linkers get confused if + # the symbol is explicitly referenced. Since portable code cannot + # rely on this symbol name, it's probably fine to never include it in + # preloaded symbol tables. + # Exclude shared library initialization/finalization symbols. + extract_expsyms_cmds= + + case $host_os in + cygwin* | mingw* | pw32* | cegcc*) + # FIXME: the MSVC++ port hasn't been tested in a loooong time + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + if test "$GCC" != yes; then + with_gnu_ld=no + fi + ;; + interix*) + # we just hope/assume this is gcc and not c89 (= MSVC++) + with_gnu_ld=yes + ;; + openbsd*) + with_gnu_ld=no + ;; + linux* | k*bsd*-gnu) + link_all_deplibs=no + ;; + esac + + ld_shlibs=yes + if test "$with_gnu_ld" = yes; then + # If archive_cmds runs LD, not CC, wlarc should be empty + wlarc='${wl}' + + # Set some defaults for GNU ld with shared library support. These + # are reset later if shared libraries are not supported. Putting them + # here allows them to be overridden if necessary. + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec='${wl}--export-dynamic' + # ancient GNU ld didn't support --whole-archive et. al. + if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec= + fi + supports_anon_versioning=no + case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; + *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 + *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... + *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... + *\ 2.11.*) ;; # other 2.11 versions + *) supports_anon_versioning=yes ;; + esac + + # See if GNU ld supports shared libraries. + case $host_os in + aix[3-9]*) + # On AIX/PPC, the GNU linker is very broken + if test "$host_cpu" != ia64; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: the GNU linker, at least up to release 2.9.1, is reported +*** to be unable to reliably create shared libraries on AIX. +*** Therefore, libtool is disabling shared libraries support. If you +*** really care for shared libraries, you may want to modify your PATH +*** so that a non-GNU linker is found, and then restart. + +_LT_EOF + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs=no + fi + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec='-L$libdir' + allow_undefined_flag=unsupported + always_export_symbols=no + enable_shared_with_static_runtimes=yes + export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs=no + fi + ;; + + interix[3-9]*) + hardcode_direct=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) + tmp_diet=no + if test "$host_os" = linux-dietlibc; then + case $cc_basename in + diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) + esac + fi + if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ + && test "$tmp_diet" = no + then + tmp_addflag= + tmp_sharedflag='-shared' + case $cc_basename,$host_cpu in + pgcc*) # Portland Group C compiler + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag' + ;; + pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers + whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + tmp_addflag=' $pic_flag -Mnomain' ;; + ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 + tmp_addflag=' -i_dynamic' ;; + efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 + tmp_addflag=' -i_dynamic -nofor_main' ;; + ifc* | ifort*) # Intel Fortran compiler + tmp_addflag=' -nofor_main' ;; + lf95*) # Lahey Fortran 8.1 + whole_archive_flag_spec= + tmp_sharedflag='--shared' ;; + xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) + tmp_sharedflag='-qmkshrobj' + tmp_addflag= ;; + esac + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) # Sun C 5.9 + whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object=yes + tmp_sharedflag='-G' ;; + *Sun\ F*) # Sun Fortran 8.3 + tmp_sharedflag='-G' ;; + esac + archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + + case $cc_basename in + xlf*) + # IBM XL Fortran 10.1 on PPC cannot create shared libs itself + whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' + hardcode_libdir_flag_spec= + hardcode_libdir_flag_spec_ld='-rpath $libdir' + archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' + fi + ;; + esac + else + ld_shlibs=no + fi + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' + wlarc= + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + fi + ;; + + solaris*) + if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: The releases 2.8.* of the GNU linker cannot reliably +*** create shared libraries on Solaris systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.9.1 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) + case `$LD -v 2>&1` in + *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) + ld_shlibs=no + cat <<_LT_EOF 1>&2 + +*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not +*** reliably create shared libraries on SCO systems. Therefore, libtool +*** is disabling shared libraries support. We urge you to upgrade GNU +*** binutils to release 2.16.91.0.3 or newer. Another option is to modify +*** your PATH or compiler configuration so that the native linker is +*** used, and then restart. + +_LT_EOF + ;; + *) + # For security reasons, it is highly recommended that you always + # use absolute paths for naming shared libraries, and exclude the + # DT_RUNPATH tag from executables and libraries. But doing so + # requires that you compile everything twice, which is a pain. + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + ;; + + sunos4*) + archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' + wlarc= + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + *) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + else + ld_shlibs=no + fi + ;; + esac + + if test "$ld_shlibs" = no; then + runpath_var= + hardcode_libdir_flag_spec= + export_dynamic_flag_spec= + whole_archive_flag_spec= + fi + else + # PORTME fill in a description of your system's linker (not GNU ld) + case $host_os in + aix3*) + allow_undefined_flag=unsupported + always_export_symbols=yes + archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' + # Note: this linker hardcodes the directories in LIBPATH if there + # are no directories specified by -L. + hardcode_minus_L=yes + if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then + # Neither direct hardcoding nor static linking is supported with a + # broken collect2. + hardcode_direct=unsupported + fi + ;; + + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then + aix_use_runtimelinking=yes + break + fi + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds='' + hardcode_direct=yes + hardcode_direct_absolute=yes + hardcode_libdir_separator=':' + link_all_deplibs=yes + file_list_spec='${wl}-f,' + + if test "$GCC" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L=yes + hardcode_libdir_flag_spec='-L$libdir' + hardcode_libdir_separator= + fi + ;; + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + link_all_deplibs=no + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to export. + always_export_symbols=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag='-berok' + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag="-z nodefs" + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag=' ${wl}-bernotok' + allow_undefined_flag=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec='$convenience' + archive_cmds_need_lc=yes + # This is similar to how AIX traditionally builds its shared libraries. + archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds='' + ;; + m68k) + archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + ;; + esac + ;; + + bsdi[45]*) + export_dynamic_flag_spec=-rdynamic + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # When not using gcc, we currently assume that we are using + # Microsoft Visual C++. + # hardcode_libdir_flag_spec is actually meaningless, as there is + # no search path for DLLs. + hardcode_libdir_flag_spec=' ' + allow_undefined_flag=unsupported + # Tell ltmain to make .lib files, not .a files. + libext=lib + # Tell ltmain to make .dll files, not .so files. + shrext_cmds=".dll" + # FIXME: Setting linknames here is a bad hack. + archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames=' + # The linker will automatically build a .lib file if we build a DLL. + old_archive_from_new_cmds='true' + # FIXME: Should let the user specify the lib program. + old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' + fix_srcfile_path='`cygpath -w "$srcfile"`' + enable_shared_with_static_runtimes=yes + ;; + + darwin* | rhapsody*) + + + archive_cmds_need_lc=no + hardcode_direct=no + hardcode_automatic=yes + hardcode_shlibpath_var=unsupported + whole_archive_flag_spec='' + link_all_deplibs=yes + allow_undefined_flag="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + + else + ld_shlibs=no + fi + + ;; + + dgux*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + freebsd1*) + ld_shlibs=no + ;; + + # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor + # support. Future versions do this automatically, but an explicit c++rt0.o + # does not break anything, and helps significantly (at the cost of a little + # extra space). + freebsd2.2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + # Unfortunately, older versions of FreeBSD 2 do not have this feature. + freebsd2*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + # FreeBSD 3 and greater uses gcc -shared to do shared libraries. + freebsd* | dragonfly*) + archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + hpux9*) + if test "$GCC" = yes; then + archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + fi + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + export_dynamic_flag_spec='${wl}-E' + ;; + + hpux10*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_flag_spec_ld='+b $libdir' + hardcode_libdir_separator=: + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + fi + ;; + + hpux11*) + if test "$GCC" = yes -a "$with_gnu_ld" = no; then + case $host_cpu in + hppa*64*) + archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + else + case $host_cpu in + hppa*64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + ia64*) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + fi + if test "$with_gnu_ld" = no; then + hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' + hardcode_libdir_separator=: + + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct=no + hardcode_shlibpath_var=no + ;; + *) + hardcode_direct=yes + hardcode_direct_absolute=yes + export_dynamic_flag_spec='${wl}-E' + + # hardcode_minus_L: Not really in the search PATH, + # but as the default location of the library. + hardcode_minus_L=yes + ;; + esac + fi + ;; + + irix5* | irix6* | nonstopux*) + if test "$GCC" = yes; then + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + # Try to use the -exported_symbol ld option, if it does not + # work, assume that -exports_file does not work either and + # implicitly export all symbols. + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int foo(void) {} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' + +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS="$save_LDFLAGS" + else + archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + inherit_rpath=yes + link_all_deplibs=yes + ;; + + netbsd* | netbsdelf*-gnu) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out + else + archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_direct=yes + hardcode_shlibpath_var=no + ;; + + newsos6) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + hardcode_shlibpath_var=no + ;; + + *nto* | *qnx*) + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct=yes + hardcode_shlibpath_var=no + hardcode_direct_absolute=yes + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + export_dynamic_flag_spec='${wl}-E' + else + case $host_os in + openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) + archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-R$libdir' + ;; + *) + archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' + hardcode_libdir_flag_spec='${wl}-rpath,$libdir' + ;; + esac + fi + else + ld_shlibs=no + fi + ;; + + os2*) + hardcode_libdir_flag_spec='-L$libdir' + hardcode_minus_L=yes + allow_undefined_flag=unsupported + archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def' + old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def' + ;; + + osf3*) + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + fi + archive_cmds_need_lc='no' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator=: + ;; + + osf4* | osf5*) # as osf3* with the addition of -msym flag + if test "$GCC" = yes; then + allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' + else + allow_undefined_flag=' -expect_unresolved \*' + archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ + $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp' + + # Both c and cxx compiler support -rpath directly + hardcode_libdir_flag_spec='-rpath $libdir' + fi + archive_cmds_need_lc='no' + hardcode_libdir_separator=: + ;; + + solaris*) + no_undefined_flag=' -z defs' + if test "$GCC" = yes; then + wlarc='${wl}' + archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + else + case `$CC -V 2>&1` in + *"Compilers 5.0"*) + wlarc='' + archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' + ;; + *) + wlarc='${wl}' + archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' + ;; + esac + fi + hardcode_libdir_flag_spec='-R$libdir' + hardcode_shlibpath_var=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. GCC discards it without `$wl', + # but is careful enough not to reorder. + # Supported since Solaris 2.6 (maybe 2.5.1?) + if test "$GCC" = yes; then + whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + else + whole_archive_flag_spec='-z allextract$convenience -z defaultextract' + fi + ;; + esac + link_all_deplibs=yes + ;; + + sunos4*) + if test "x$host_vendor" = xsequent; then + # Use $CC to link under sequent, because it throws in some extra .o + # files that make .init and .fini sections work. + archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' + fi + hardcode_libdir_flag_spec='-L$libdir' + hardcode_direct=yes + hardcode_minus_L=yes + hardcode_shlibpath_var=no + ;; + + sysv4) + case $host_vendor in + sni) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=yes # is this really true??? + ;; + siemens) + ## LD is ld it makes a PLAMLIB + ## CC just makes a GrossModule. + archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' + reload_cmds='$CC -r -o $output$reload_objs' + hardcode_direct=no + ;; + motorola) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_direct=no #Motorola manual says yes, but my tests say they lie + ;; + esac + runpath_var='LD_RUN_PATH' + hardcode_shlibpath_var=no + ;; + + sysv4.3*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + export_dynamic_flag_spec='-Bexport' + ;; + + sysv4*MP*) + if test -d /usr/nec; then + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_shlibpath_var=no + runpath_var=LD_RUN_PATH + hardcode_runpath_var=yes + ld_shlibs=yes + fi + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag='${wl}-z,text' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag='${wl}-z,text' + allow_undefined_flag='${wl}-z,nodefs' + archive_cmds_need_lc=no + hardcode_shlibpath_var=no + hardcode_libdir_flag_spec='${wl}-R,$libdir' + hardcode_libdir_separator=':' + link_all_deplibs=yes + export_dynamic_flag_spec='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + if test "$GCC" = yes; then + archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + else + archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + fi + ;; + + uts4*) + archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' + hardcode_libdir_flag_spec='-L$libdir' + hardcode_shlibpath_var=no + ;; + + *) + ld_shlibs=no + ;; + esac + + if test x$host_vendor = xsni; then + case $host in + sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) + export_dynamic_flag_spec='${wl}-Blargedynsym' + ;; + esac + fi + fi + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 +$as_echo "$ld_shlibs" >&6; } +test "$ld_shlibs" = no && can_build_shared=no + +with_gnu_ld=$with_gnu_ld + + + + + + + + + + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl + pic_flag=$lt_prog_compiler_pic + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag + allow_undefined_flag= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + archive_cmds_need_lc=no + else + archive_cmds_need_lc=yes + fi + allow_undefined_flag=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5 +$as_echo "$archive_cmds_need_lc" >&6; } + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +if test "$GCC" = yes; then + case $host_os in + darwin*) lt_awk_arg="/^libraries:/,/LR/" ;; + *) lt_awk_arg="/^libraries:/" ;; + esac + lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then + # if the path contains ";" then we assume it to be the separator + # otherwise default to the standard path separator (i.e. ":") - it is + # assumed that no part of a normal pathname contains ";" but that should + # okay in the real world where ";" in dirpaths is itself problematic. + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'` + else + lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + # Ok, now we have the path, separated by spaces, we can step through it + # and add multilib dir if necessary. + lt_tmp_lt_search_path_spec= + lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` + for lt_sys_path in $lt_search_path_spec; do + if test -d "$lt_sys_path/$lt_multi_os_dir"; then + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir" + else + test -d "$lt_sys_path" && \ + lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" + fi + done + lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk ' +BEGIN {RS=" "; FS="/|\n";} { + lt_foo=""; + lt_count=0; + for (lt_i = NF; lt_i > 0; lt_i--) { + if ($lt_i != "" && $lt_i != ".") { + if ($lt_i == "..") { + lt_count++; + } else { + if (lt_count == 0) { + lt_foo="/" $lt_i lt_foo; + } else { + lt_count--; + } + } + } + } + if (lt_foo != "") { lt_freq[lt_foo]++; } + if (lt_freq[lt_foo] == 1) { print lt_foo; } +}'` + sys_lib_search_path_spec=`$ECHO $lt_search_path_spec` +else + sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" +fi +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action= +if test -n "$hardcode_libdir_flag_spec" || + test -n "$runpath_var" || + test "X$hardcode_automatic" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no && + test "$hardcode_minus_L" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 +$as_echo "$hardcode_action" >&6; } + +if test "$hardcode_action" = relink || + test "$inherit_rpath" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + +fi + + ;; + + *) + ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" +if test "x$ac_cv_func_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5 +$as_echo_n "checking for shl_load in -ldld... " >&6; } +if test "${ac_cv_lib_dld_shl_load+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char shl_load (); +int +main () +{ +return shl_load (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_shl_load=yes +else + ac_cv_lib_dld_shl_load=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5 +$as_echo "$ac_cv_lib_dld_shl_load" >&6; } +if test "x$ac_cv_lib_dld_shl_load" = x""yes; then : + lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld" +else + ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" +if test "x$ac_cv_func_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5 +$as_echo_n "checking for dlopen in -ldl... " >&6; } +if test "${ac_cv_lib_dl_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldl $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dl_dlopen=yes +else + ac_cv_lib_dl_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5 +$as_echo "$ac_cv_lib_dl_dlopen" >&6; } +if test "x$ac_cv_lib_dl_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 +$as_echo_n "checking for dlopen in -lsvld... " >&6; } +if test "${ac_cv_lib_svld_dlopen+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lsvld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dlopen (); +int +main () +{ +return dlopen (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_svld_dlopen=yes +else + ac_cv_lib_svld_dlopen=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5 +$as_echo "$ac_cv_lib_svld_dlopen" >&6; } +if test "x$ac_cv_lib_svld_dlopen" = x""yes; then : + lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld" +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 +$as_echo_n "checking for dld_link in -ldld... " >&6; } +if test "${ac_cv_lib_dld_dld_link+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldld $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char dld_link (); +int +main () +{ +return dld_link (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_dld_dld_link=yes +else + ac_cv_lib_dld_dld_link=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5 +$as_echo "$ac_cv_lib_dld_dld_link" >&6; } +if test "x$ac_cv_lib_dld_dld_link" = x""yes; then : + lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld" +fi + + +fi + + +fi + + +fi + + +fi + + +fi + + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 +$as_echo_n "checking whether a program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line __oline__ "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 +$as_echo "$lt_cv_dlopen_self" >&6; } + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 +$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; } +if test "${lt_cv_dlopen_self_static+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "$cross_compiling" = yes; then : + lt_cv_dlopen_self_static=cross +else + lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 + lt_status=$lt_dlunknown + cat > conftest.$ac_ext <<_LT_EOF +#line __oline__ "configure" +#include "confdefs.h" + +#if HAVE_DLFCN_H +#include +#endif + +#include + +#ifdef RTLD_GLOBAL +# define LT_DLGLOBAL RTLD_GLOBAL +#else +# ifdef DL_GLOBAL +# define LT_DLGLOBAL DL_GLOBAL +# else +# define LT_DLGLOBAL 0 +# endif +#endif + +/* We may have to define LT_DLLAZY_OR_NOW in the command line if we + find out it does not work in some platform. */ +#ifndef LT_DLLAZY_OR_NOW +# ifdef RTLD_LAZY +# define LT_DLLAZY_OR_NOW RTLD_LAZY +# else +# ifdef DL_LAZY +# define LT_DLLAZY_OR_NOW DL_LAZY +# else +# ifdef RTLD_NOW +# define LT_DLLAZY_OR_NOW RTLD_NOW +# else +# ifdef DL_NOW +# define LT_DLLAZY_OR_NOW DL_NOW +# else +# define LT_DLLAZY_OR_NOW 0 +# endif +# endif +# endif +# endif +#endif + +void fnord() { int i=42;} +int main () +{ + void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); + int status = $lt_dlunknown; + + if (self) + { + if (dlsym (self,"fnord")) status = $lt_dlno_uscore; + else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; + /* dlclose (self); */ + } + else + puts (dlerror ()); + + return status; +} +_LT_EOF + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 + (eval $ac_link) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then + (./conftest; exit; ) >&5 2>/dev/null + lt_status=$? + case x$lt_status in + x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; + x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; + esac + else : + # compilation failed + lt_cv_dlopen_self_static=no + fi +fi +rm -fr conftest* + + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 +$as_echo "$lt_cv_dlopen_self_static" >&6; } + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi + + + + + + + + + + + + + + + + + +striplib= +old_striplib= +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 +$as_echo_n "checking whether stripping libraries is possible... " >&6; } +if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then + test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" + test -z "$striplib" && striplib="$STRIP --strip-unneeded" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } +else +# FIXME - insert some real tests, host_os isn't really good enough + case $host_os in + darwin*) + if test -n "$STRIP" ; then + striplib="$STRIP -x" + old_striplib="$STRIP -S" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } + else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + fi + ;; + *) + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } + ;; + esac +fi + + + + + + + + + + + + + # Report which library types will actually be built + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 +$as_echo_n "checking if libtool supports shared libraries... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 +$as_echo "$can_build_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 +$as_echo_n "checking whether to build shared libraries... " >&6; } + test "$can_build_shared" = "no" && enable_shared=no + + # On AIX, shared libraries and static libraries use the same namespace, and + # are all built from PIC. + case $host_os in + aix3*) + test "$enable_shared" = yes && enable_static=no + if test -n "$RANLIB"; then + archive_cmds="$archive_cmds~\$RANLIB \$lib" + postinstall_cmds='$RANLIB $lib' + fi + ;; + + aix[4-9]*) + if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then + test "$enable_shared" = yes && enable_static=no + fi + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 +$as_echo "$enable_shared" >&6; } + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 +$as_echo_n "checking whether to build static libraries... " >&6; } + # Make sure either enable_shared or enable_static is yes. + test "$enable_shared" = yes || enable_static=yes + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 +$as_echo "$enable_static" >&6; } + + + + +fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +CC="$lt_save_CC" + + +ac_ext=cpp +ac_cpp='$CXXCPP $CPPFLAGS' +ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_cxx_compiler_gnu + +archive_cmds_need_lc_CXX=no +allow_undefined_flag_CXX= +always_export_symbols_CXX=no +archive_expsym_cmds_CXX= +compiler_needs_object_CXX=no +export_dynamic_flag_spec_CXX= +hardcode_direct_CXX=no +hardcode_direct_absolute_CXX=no +hardcode_libdir_flag_spec_CXX= +hardcode_libdir_flag_spec_ld_CXX= +hardcode_libdir_separator_CXX= +hardcode_minus_L_CXX=no +hardcode_shlibpath_var_CXX=unsupported +hardcode_automatic_CXX=no +inherit_rpath_CXX=no +module_cmds_CXX= +module_expsym_cmds_CXX= +link_all_deplibs_CXX=unknown +old_archive_cmds_CXX=$old_archive_cmds +no_undefined_flag_CXX= +whole_archive_flag_spec_CXX= +enable_shared_with_static_runtimes_CXX=no + +# Source file extension for C++ test sources. +ac_ext=cpp + +# Object file extension for compiled C++ test sources. +objext=o +objext_CXX=$objext + +# No sense in running all these tests if we already determined that +# the CXX compiler isn't working. Some variables (like enable_shared) +# are currently assumed to apply to all compilers on this platform, +# and will be corrupted by setting them based on a non-working compiler. +if test "$_lt_caught_CXX_error" != yes; then + # Code to be used in simple compile tests + lt_simple_compile_test_code="int some_variable = 0;" + + # Code to be used in simple link tests + lt_simple_link_test_code='int main(int, char *[]) { return(0); }' + + # ltmain only uses $CC for tagged configurations so make sure $CC is set. + + + + + + +# If no C compiler was specified, use CC. +LTCC=${LTCC-"$CC"} + +# If no C compiler flags were specified, use CFLAGS. +LTCFLAGS=${LTCFLAGS-"$CFLAGS"} + +# Allow CC to be a program name with arguments. +compiler=$CC + + + # save warnings/boilerplate of simple test code + ac_outfile=conftest.$ac_objext +echo "$lt_simple_compile_test_code" >conftest.$ac_ext +eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_compiler_boilerplate=`cat conftest.err` +$RM conftest* + + ac_outfile=conftest.$ac_objext +echo "$lt_simple_link_test_code" >conftest.$ac_ext +eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err +_lt_linker_boilerplate=`cat conftest.err` +$RM -r conftest* + + + # Allow CC to be a program name with arguments. + lt_save_CC=$CC + lt_save_LD=$LD + lt_save_GCC=$GCC + GCC=$GXX + lt_save_with_gnu_ld=$with_gnu_ld + lt_save_path_LD=$lt_cv_path_LD + if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then + lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx + else + $as_unset lt_cv_prog_gnu_ld + fi + if test -n "${lt_cv_path_LDCXX+set}"; then + lt_cv_path_LD=$lt_cv_path_LDCXX + else + $as_unset lt_cv_path_LD + fi + test -z "${LDCXX+set}" || LD=$LDCXX + CC=${CXX-"c++"} + compiler=$CC + compiler_CXX=$CC + for cc_temp in $compiler""; do + case $cc_temp in + compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; + distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; + \-*) ;; + *) break;; + esac +done +cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"` + + + if test -n "$compiler"; then + # We don't want -fno-exception when compiling C++ code, so set the + # no_builtin_flag separately + if test "$GXX" = yes; then + lt_prog_compiler_no_builtin_flag_CXX=' -fno-builtin' + else + lt_prog_compiler_no_builtin_flag_CXX= + fi + + if test "$GXX" = yes; then + # Set up default GNU C++ configuration + + + +@%:@ Check whether --with-gnu-ld was given. +if test "${with_gnu_ld+set}" = set; then : + withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes +else + with_gnu_ld=no +fi + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 +$as_echo_n "checking for ld used by $CC... " >&6; } + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [\\/]* | ?:[\\/]*) + re_direlt='/[^/][^/]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 +$as_echo_n "checking for GNU ld... " >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 +$as_echo_n "checking for non-GNU ld... " >&6; } +fi +if test "${lt_cv_path_LD+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &5 +$as_echo "$LD" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 +$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } +if test "${lt_cv_prog_gnu_ld+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + # I'd rather use --version here, but apparently some GNU lds only accept -v. +case `$LD -v 2>&1 &5 +$as_echo "$lt_cv_prog_gnu_ld" >&6; } +with_gnu_ld=$lt_cv_prog_gnu_ld + + + + + + + + # Check if GNU C++ uses GNU ld as the underlying linker, since the + # archiving commands below assume that GNU ld is being used. + if test "$with_gnu_ld" = yes; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # If archive_cmds runs LD, not CC, wlarc should be empty + # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to + # investigate it a little bit more. (MM) + wlarc='${wl}' + + # ancient GNU ld didn't support --whole-archive et. al. + if eval "`$CC -print-prog-name=ld` --help 2>&1" | + $GREP 'no-whole-archive' > /dev/null; then + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + else + whole_archive_flag_spec_CXX= + fi + else + with_gnu_ld=no + wlarc= + + # A generic and very simple default shared library creation + # command for GNU C++ for the case where it uses the native + # linker, instead of GNU ld. If possible, this setting should + # overridden to take advantage of the native linker features on + # the platform it is being used on. + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + fi + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + GXX=no + with_gnu_ld=no + wlarc= + fi + + # PORTME: fill in a description of your system's C++ link characteristics + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + ld_shlibs_CXX=yes + case $host_os in + aix3*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aix[4-9]*) + if test "$host_cpu" = ia64; then + # On IA64, the linker does run time linking by default, so we don't + # have to do anything special. + aix_use_runtimelinking=no + exp_sym_flag='-Bexport' + no_entry_flag="" + else + aix_use_runtimelinking=no + + # Test if we are trying to use run time linking or normal + # AIX style linking. If -brtl is somewhere in LDFLAGS, we + # need to do runtime linking. + case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) + for ld_flag in $LDFLAGS; do + case $ld_flag in + *-brtl*) + aix_use_runtimelinking=yes + break + ;; + esac + done + ;; + esac + + exp_sym_flag='-bexport' + no_entry_flag='-bnoentry' + fi + + # When large executables or shared objects are built, AIX ld can + # have problems creating the table of contents. If linking a library + # or program results in "error TOC overflow" add -mminimal-toc to + # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not + # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. + + archive_cmds_CXX='' + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + file_list_spec_CXX='${wl}-f,' + + if test "$GXX" = yes; then + case $host_os in aix4.[012]|aix4.[012].*) + # We only want to do this on AIX 4.2 and lower, the check + # below for broken collect2 doesn't work under 4.3+ + collect2name=`${CC} -print-prog-name=collect2` + if test -f "$collect2name" && + strings "$collect2name" | $GREP resolve_lib_name >/dev/null + then + # We have reworked collect2 + : + else + # We have old collect2 + hardcode_direct_CXX=unsupported + # It fails to find uninstalled libraries when the uninstalled + # path is not listed in the libpath. Setting hardcode_minus_L + # to unsupported forces relinking + hardcode_minus_L_CXX=yes + hardcode_libdir_flag_spec_CXX='-L$libdir' + hardcode_libdir_separator_CXX= + fi + esac + shared_flag='-shared' + if test "$aix_use_runtimelinking" = yes; then + shared_flag="$shared_flag "'${wl}-G' + fi + else + # not using gcc + if test "$host_cpu" = ia64; then + # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release + # chokes on -Wl,-G. The following line is correct: + shared_flag='-G' + else + if test "$aix_use_runtimelinking" = yes; then + shared_flag='${wl}-G' + else + shared_flag='${wl}-bM:SRE' + fi + fi + fi + + export_dynamic_flag_spec_CXX='${wl}-bexpall' + # It seems that -bexpall does not export symbols beginning with + # underscore (_), so it is better to generate a list of symbols to + # export. + always_export_symbols_CXX=yes + if test "$aix_use_runtimelinking" = yes; then + # Warning - without using the other runtime loading flags (-brtl), + # -berok will link without error, but may produce a broken library. + allow_undefined_flag_CXX='-berok' + # Determine the default libpath from the value encoded in an empty + # executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + + archive_expsym_cmds_CXX='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag" + else + if test "$host_cpu" = ia64; then + hardcode_libdir_flag_spec_CXX='${wl}-R $libdir:/usr/lib:/lib' + allow_undefined_flag_CXX="-z nodefs" + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols" + else + # Determine the default libpath from the value encoded in an + # empty executable. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + +lt_aix_libpath_sed=' + /Import File Strings/,/^$/ { + /^0/ { + s/^0 *\(.*\)$/\1/ + p + } + }' +aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +# Check for a 64-bit object if we didn't find anything. +if test -z "$aix_libpath"; then + aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi + + hardcode_libdir_flag_spec_CXX='${wl}-blibpath:$libdir:'"$aix_libpath" + # Warning - without using the other run time loading flags, + # -berok will link without error, but may produce a broken library. + no_undefined_flag_CXX=' ${wl}-bernotok' + allow_undefined_flag_CXX=' ${wl}-berok' + # Exported symbols can be pulled into shared objects from archives + whole_archive_flag_spec_CXX='$convenience' + archive_cmds_need_lc_CXX=yes + # This is similar to how AIX traditionally builds its shared + # libraries. + archive_expsym_cmds_CXX="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname' + fi + fi + ;; + + beos*) + if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then + allow_undefined_flag_CXX=unsupported + # Joseph Beckenbach says some releases of gcc + # support --undefined. This deserves some investigation. FIXME + archive_cmds_CXX='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + else + ld_shlibs_CXX=no + fi + ;; + + chorus*) + case $cc_basename in + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + cygwin* | mingw* | pw32* | cegcc*) + # _LT_TAGVAR(hardcode_libdir_flag_spec, CXX) is actually meaningless, + # as there is no search path for DLLs. + hardcode_libdir_flag_spec_CXX='-L$libdir' + allow_undefined_flag_CXX=unsupported + always_export_symbols_CXX=no + enable_shared_with_static_runtimes_CXX=yes + + if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + # If the export-symbols file already is a .def file (1st line + # is EXPORTS), use it as is; otherwise, prepend... + archive_expsym_cmds_CXX='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then + cp $export_symbols $output_objdir/$soname.def; + else + echo EXPORTS > $output_objdir/$soname.def; + cat $export_symbols >> $output_objdir/$soname.def; + fi~ + $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' + else + ld_shlibs_CXX=no + fi + ;; + darwin* | rhapsody*) + + + archive_cmds_need_lc_CXX=no + hardcode_direct_CXX=no + hardcode_automatic_CXX=yes + hardcode_shlibpath_var_CXX=unsupported + whole_archive_flag_spec_CXX='' + link_all_deplibs_CXX=yes + allow_undefined_flag_CXX="$_lt_dar_allow_undefined" + case $cc_basename in + ifort*) _lt_dar_can_shared=yes ;; + *) _lt_dar_can_shared=$GCC ;; + esac + if test "$_lt_dar_can_shared" = "yes"; then + output_verbose_link_cmd=echo + archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}" + module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}" + module_expsym_cmds_CXX="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}" + if test "$lt_cv_apple_cc_single_mod" != "yes"; then + archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}" + archive_expsym_cmds_CXX="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}" + fi + + else + ld_shlibs_CXX=no + fi + + ;; + + dgux*) + case $cc_basename in + ec++*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + ghcx*) + # Green Hills C++ Compiler + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + freebsd[12]*) + # C++ shared libraries reported to be fairly broken before + # switch to ELF + ld_shlibs_CXX=no + ;; + + freebsd-elf*) + archive_cmds_need_lc_CXX=no + ;; + + freebsd* | dragonfly*) + # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF + # conventions + ld_shlibs_CXX=yes + ;; + + gnu*) + ;; + + hpux9*) + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + export_dynamic_flag_spec_CXX='${wl}-E' + hardcode_direct_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + archive_cmds_CXX='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib' + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + hpux10*|hpux11*) + if test $with_gnu_ld = no; then + hardcode_libdir_flag_spec_CXX='${wl}+b ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + case $host_cpu in + hppa*64*|ia64*) + ;; + *) + export_dynamic_flag_spec_CXX='${wl}-E' + ;; + esac + fi + case $host_cpu in + hppa*64*|ia64*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + ;; + *) + hardcode_direct_CXX=yes + hardcode_direct_absolute_CXX=yes + hardcode_minus_L_CXX=yes # Not in the search PATH, + # but as the default + # location of the library. + ;; + esac + + case $cc_basename in + CC*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + aCC*) + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes; then + if test $with_gnu_ld = no; then + case $host_cpu in + hppa*64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + ia64*) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + ;; + esac + fi + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + interix[3-9]*) + hardcode_direct_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}-E' + # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. + # Instead, shared libraries are loaded at an image base (0x10000000 by + # default) and relocated if they conflict, which is a slow very memory + # consuming and fragmenting process. To avoid this, we pick a random, + # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link + # time. Moving up from 0x10000000 also allows more sbrk(2) space. + archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + archive_expsym_cmds_CXX='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' + ;; + irix5* | irix6*) + case $cc_basename in + CC*) + # SGI C++ + archive_cmds_CXX='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + + # Archives containing C++ object files must be created using + # "CC -ar", where "CC" is the IRIX C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -ar -WR,-u -o $oldlib $oldobjs' + ;; + *) + if test "$GXX" = yes; then + if test "$with_gnu_ld" = no; then + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + else + archive_cmds_CXX='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib' + fi + fi + link_all_deplibs_CXX=yes + ;; + esac + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + inherit_rpath_CXX=yes + ;; + + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + archive_expsym_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib' + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + + # Archives containing C++ object files must be created using + # "CC -Bstatic", where "CC" is the KAI C++ compiler. + old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' + ;; + icpc* | ecpc* ) + # Intel C++ + with_gnu_ld=yes + # version 8.0 and above of icpc choke on multiply defined symbols + # if we add $predep_objects and $postdep_objects, however 7.1 and + # earlier do not add the objects themselves. + case `$CC -V 2>&1` in + *"Version 7."*) + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + *) # Version 8.0 or newer + tmp_idyn= + case $host_cpu in + ia64*) tmp_idyn=' -i_dynamic';; + esac + archive_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib' + ;; + esac + archive_cmds_need_lc_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive$convenience ${wl}--no-whole-archive' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + case `$CC -V` in + *pgCC\ [1-5]* | *pgcpp\ [1-5]*) + prelink_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ + compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"' + old_archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ + $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~ + $RANLIB $oldlib' + archive_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='tpldir=Template.dir~ + rm -rf $tpldir~ + $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ + $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + *) # Version 6 will use weak symbols + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}--rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + whole_archive_flag_spec_CXX='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + ;; + cxx*) + # Compaq C++ + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' + archive_expsym_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols' + + runpath_var=LD_RUN_PATH + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + xl*) + # IBM XL 8.0 on PPC, with GNU ld + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + export_dynamic_flag_spec_CXX='${wl}--export-dynamic' + archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' + if test "x$supports_anon_versioning" = xyes; then + archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~ + cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ + echo "local: *; };" >> $output_objdir/$libname.ver~ + $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib' + fi + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols' + hardcode_libdir_flag_spec_CXX='-R$libdir' + whole_archive_flag_spec_CXX='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive' + compiler_needs_object_CXX=yes + + # Not sure whether something based on + # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 + # would be better. + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + esac + ;; + esac + ;; + + lynxos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + m88k*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + mvs*) + case $cc_basename in + cxx*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + netbsd*) + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + archive_cmds_CXX='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' + wlarc= + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + fi + # Workaround some broken pre-1.5 toolchains + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' + ;; + + *nto* | *qnx*) + ld_shlibs_CXX=yes + ;; + + openbsd2*) + # C++ shared libraries are fairly broken + ld_shlibs_CXX=no + ;; + + openbsd*) + if test -f /usr/libexec/ld.so; then + hardcode_direct_CXX=yes + hardcode_shlibpath_var_CXX=no + hardcode_direct_absolute_CXX=yes + archive_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + archive_expsym_cmds_CXX='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib' + export_dynamic_flag_spec_CXX='${wl}-E' + whole_archive_flag_spec_CXX="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive' + fi + output_verbose_link_cmd=echo + else + ld_shlibs_CXX=no + fi + ;; + + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + # Kuck and Associates, Inc. (KAI) C++ Compiler + + # KCC will only create a shared library if the output file + # ends with ".so" (or ".sl" for HP-UX), so rename the library + # to its proper name (with version) after linking. + archive_cmds_CXX='tempext=`echo $shared_ext | $SED -e '\''s/\([^()0-9A-Za-z{}]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' + + hardcode_libdir_flag_spec_CXX='${wl}-rpath,$libdir' + hardcode_libdir_separator_CXX=: + + # Archives containing C++ object files must be created using + # the KAI C++ compiler. + case $host in + osf3*) old_archive_cmds_CXX='$CC -Bstatic -o $oldlib $oldobjs' ;; + *) old_archive_cmds_CXX='$CC -o $oldlib $oldobjs' ;; + esac + ;; + RCC*) + # Rational C++ 2.4.1 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + cxx*) + case $host in + osf3*) + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + ;; + *) + allow_undefined_flag_CXX=' -expect_unresolved \*' + archive_cmds_CXX='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib' + archive_expsym_cmds_CXX='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ + echo "-hidden">> $lib.exp~ + $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~ + $RM $lib.exp' + hardcode_libdir_flag_spec_CXX='-rpath $libdir' + ;; + esac + + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + # + # There doesn't appear to be a way to prevent this compiler from + # explicitly linking system object files so we need to strip them + # from the output so that they don't get included in the library + # dependencies. + output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed' + ;; + *) + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + allow_undefined_flag_CXX=' ${wl}-expect_unresolved ${wl}\*' + case $host in + osf3*) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + *) + archive_cmds_CXX='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' + ;; + esac + + hardcode_libdir_flag_spec_CXX='${wl}-rpath ${wl}$libdir' + hardcode_libdir_separator_CXX=: + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + + else + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + fi + ;; + esac + ;; + + psos*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + lcc*) + # Lucid + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + archive_cmds_need_lc_CXX=yes + no_undefined_flag_CXX=' -zdefs' + archive_cmds_CXX='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + hardcode_libdir_flag_spec_CXX='-R$libdir' + hardcode_shlibpath_var_CXX=no + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + # The compiler driver will combine and reorder linker options, + # but understands `-z linker_flag'. + # Supported since Solaris 2.6 (maybe 2.5.1?) + whole_archive_flag_spec_CXX='-z allextract$convenience -z defaultextract' + ;; + esac + link_all_deplibs_CXX=yes + + output_verbose_link_cmd='echo' + + # Archives containing C++ object files must be created using + # "CC -xar", where "CC" is the Sun C++ compiler. This is + # necessary to make sure instantiated templates are included + # in the archive. + old_archive_cmds_CXX='$CC -xar -o $oldlib $oldobjs' + ;; + gcx*) + # Green Hills C++ Compiler + archive_cmds_CXX='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + + # The C++ compiler must be used to create the archive. + old_archive_cmds_CXX='$CC $LDFLAGS -archive -o $oldlib $oldobjs' + ;; + *) + # GNU C++ compiler with Solaris linker + if test "$GXX" = yes && test "$with_gnu_ld" = no; then + no_undefined_flag_CXX=' ${wl}-z ${wl}defs' + if $CC --version | $GREP -v '^2\.7' > /dev/null; then + archive_cmds_CXX='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + else + # g++ 2.7 appears to require `-G' NOT `-shared' on this + # platform. + archive_cmds_CXX='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib' + archive_expsym_cmds_CXX='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ + $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' + + # Commands to make compiler produce verbose output that lists + # what "hidden" libraries, object files and flags are used when + # linking a shared library. + output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"' + fi + + hardcode_libdir_flag_spec_CXX='${wl}-R $wl$libdir' + case $host_os in + solaris2.[0-5] | solaris2.[0-5].*) ;; + *) + whole_archive_flag_spec_CXX='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract' + ;; + esac + fi + ;; + esac + ;; + + sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) + no_undefined_flag_CXX='${wl}-z,text' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + sysv5* | sco3.2v5* | sco5v6*) + # Note: We can NOT use -z defs as we might desire, because we do not + # link with -lc, and that would cause any symbols used from libc to + # always be unresolved, which means just about no library would + # ever link correctly. If we're not using GNU ld we use -z text + # though, which does catch some bad symbols but isn't as heavy-handed + # as -z defs. + no_undefined_flag_CXX='${wl}-z,text' + allow_undefined_flag_CXX='${wl}-z,nodefs' + archive_cmds_need_lc_CXX=no + hardcode_shlibpath_var_CXX=no + hardcode_libdir_flag_spec_CXX='${wl}-R,$libdir' + hardcode_libdir_separator_CXX=':' + link_all_deplibs_CXX=yes + export_dynamic_flag_spec_CXX='${wl}-Bexport' + runpath_var='LD_RUN_PATH' + + case $cc_basename in + CC*) + archive_cmds_CXX='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + *) + archive_cmds_CXX='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + archive_expsym_cmds_CXX='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags' + ;; + esac + ;; + + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + ;; + + vxworks*) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + + *) + # FIXME: insert proper C++ library support + ld_shlibs_CXX=no + ;; + esac + + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } + test "$ld_shlibs_CXX" = no && can_build_shared=no + + GCC_CXX="$GXX" + LD_CXX="$LD" + + ## CAVEAT EMPTOR: + ## There is no encapsulation within the following macros, do not change + ## the running order or otherwise move them around unless you know exactly + ## what you are doing... + # Dependencies to place before and after the object being linked: +predep_objects_CXX= +postdep_objects_CXX= +predeps_CXX= +postdeps_CXX= +compiler_lib_search_path_CXX= + +cat > conftest.$ac_ext <<_LT_EOF +class Foo +{ +public: + Foo (void) { a = 0; } +private: + int a; +}; +_LT_EOF + +if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # Parse the compiler output and extract the necessary + # objects, libraries and library flags. + + # Sentinel used to keep track of whether or not we are before + # the conftest object file. + pre_test_object_deps_done=no + + for p in `eval "$output_verbose_link_cmd"`; do + case $p in + + -L* | -R* | -l*) + # Some compilers place space between "-{L,R}" and the path. + # Remove the space. + if test $p = "-L" || + test $p = "-R"; then + prev=$p + continue + else + prev= + fi + + if test "$pre_test_object_deps_done" = no; then + case $p in + -L* | -R*) + # Internal compiler library paths should come after those + # provided the user. The postdeps already come after the + # user supplied libs so there is no need to process them. + if test -z "$compiler_lib_search_path_CXX"; then + compiler_lib_search_path_CXX="${prev}${p}" + else + compiler_lib_search_path_CXX="${compiler_lib_search_path_CXX} ${prev}${p}" + fi + ;; + # The "-l" case would never come before the object being + # linked, so don't bother handling this case. + esac + else + if test -z "$postdeps_CXX"; then + postdeps_CXX="${prev}${p}" + else + postdeps_CXX="${postdeps_CXX} ${prev}${p}" + fi + fi + ;; + + *.$objext) + # This assumes that the test object file only shows up + # once in the compiler output. + if test "$p" = "conftest.$objext"; then + pre_test_object_deps_done=yes + continue + fi + + if test "$pre_test_object_deps_done" = no; then + if test -z "$predep_objects_CXX"; then + predep_objects_CXX="$p" + else + predep_objects_CXX="$predep_objects_CXX $p" + fi + else + if test -z "$postdep_objects_CXX"; then + postdep_objects_CXX="$p" + else + postdep_objects_CXX="$postdep_objects_CXX $p" + fi + fi + ;; + + *) ;; # Ignore the rest. + + esac + done + + # Clean up. + rm -f a.out a.exe +else + echo "libtool.m4: error: problem compiling CXX test program" +fi + +$RM -f confest.$objext + +# PORTME: override above test on systems where it is broken +case $host_os in +interix[3-9]*) + # Interix 3.5 installs completely hosed .la files for C++, so rather than + # hack all around it, let's just trust "g++" to DTRT. + predep_objects_CXX= + postdep_objects_CXX= + postdeps_CXX= + ;; + +linux*) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; + +solaris*) + case $cc_basename in + CC*) + # The more standards-conforming stlport4 library is + # incompatible with the Cstd library. Avoid specifying + # it if it's in CXXFLAGS. Ignore libCrun as + # -library=stlport4 depends on it. + case " $CXX $CXXFLAGS " in + *" -library=stlport4 "*) + solaris_use_stlport4=yes + ;; + esac + + # Adding this requires a known-good setup of shared libraries for + # Sun compiler versions before 5.6, else PIC objects from an old + # archive will be linked into the output, leading to subtle bugs. + if test "$solaris_use_stlport4" != yes; then + postdeps_CXX='-library=Cstd -library=Crun' + fi + ;; + esac + ;; +esac + + +case " $postdeps_CXX " in +*" -lc "*) archive_cmds_need_lc_CXX=no ;; +esac + compiler_lib_search_dirs_CXX= +if test -n "${compiler_lib_search_path_CXX}"; then + compiler_lib_search_dirs_CXX=`echo " ${compiler_lib_search_path_CXX}" | ${SED} -e 's! -L! !g' -e 's!^ !!'` +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + lt_prog_compiler_wl_CXX= +lt_prog_compiler_pic_CXX= +lt_prog_compiler_static_CXX= + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 +$as_echo_n "checking for $compiler option to produce PIC... " >&6; } + + # C++ specific cases for pic, static, wl, etc. + if test "$GXX" = yes; then + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-static' + + case $host_os in + aix*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + fi + ;; + + amigaos*) + case $host_cpu in + powerpc) + # see comment about AmigaOS4 .so support + lt_prog_compiler_pic_CXX='-fPIC' + ;; + m68k) + # FIXME: we need at least 68020 code to build shared libraries, but + # adding the `-m68020' flag to GCC prevents building anything better, + # like `-m68040'. + lt_prog_compiler_pic_CXX='-m68020 -resident32 -malways-restore-a4' + ;; + esac + ;; + + beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) + # PIC is the default for these OSes. + ;; + mingw* | cygwin* | os2* | pw32* | cegcc*) + # This hack is so that the source file can tell whether it is being + # built for inclusion in a dll (and should export symbols for example). + # Although the cygwin gcc ignores -fPIC, still need this for old-style + # (--disable-auto-import) libraries + lt_prog_compiler_pic_CXX='-DDLL_EXPORT' + ;; + darwin* | rhapsody*) + # PIC is the default on this platform + # Common symbols not allowed in MH_DYLIB files + lt_prog_compiler_pic_CXX='-fno-common' + ;; + *djgpp*) + # DJGPP does not support shared libraries at all + lt_prog_compiler_pic_CXX= + ;; + interix[3-9]*) + # Interix 3.x gcc -fpic/-fPIC options generate broken code. + # Instead, we relocate shared libraries at runtime. + ;; + sysv4*MP*) + if test -d /usr/nec; then + lt_prog_compiler_pic_CXX=-Kconform_pic + fi + ;; + hpux*) + # PIC is the default for 64-bit PA HP-UX, but not for 32-bit + # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag + # sets the default TLS model and affects inlining. + case $host_cpu in + hppa*64*) + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + *) + lt_prog_compiler_pic_CXX='-fPIC' + ;; + esac + else + case $host_os in + aix[4-9]*) + # All AIX code is PIC. + if test "$host_cpu" = ia64; then + # AIX 5 now supports IA64 processor + lt_prog_compiler_static_CXX='-Bstatic' + else + lt_prog_compiler_static_CXX='-bnso -bI:/lib/syscalls.exp' + fi + ;; + chorus*) + case $cc_basename in + cxch68*) + # Green Hills C++ Compiler + # _LT_TAGVAR(lt_prog_compiler_static, CXX)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" + ;; + esac + ;; + dgux*) + case $cc_basename in + ec++*) + lt_prog_compiler_pic_CXX='-KPIC' + ;; + ghcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + freebsd* | dragonfly*) + # FreeBSD uses GNU C++ + ;; + hpux9* | hpux10* | hpux11*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + if test "$host_cpu" != ia64; then + lt_prog_compiler_pic_CXX='+Z' + fi + ;; + aCC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='${wl}-a ${wl}archive' + case $host_cpu in + hppa*64*|ia64*) + # +Z the default + ;; + *) + lt_prog_compiler_pic_CXX='+Z' + ;; + esac + ;; + *) + ;; + esac + ;; + interix*) + # This is c89, which is MS Visual C++ (no shared libs) + # Anyone wants to do a port? + ;; + irix5* | irix6* | nonstopux*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_static_CXX='-non_shared' + # CC pic flag -KPIC is the default. + ;; + *) + ;; + esac + ;; + linux* | k*bsd*-gnu | kopensolaris*-gnu) + case $cc_basename in + KCC*) + # KAI C++ Compiler + lt_prog_compiler_wl_CXX='--backend -Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + ;; + ecpc* ) + # old Intel C++ for x86_64 which still supported -KPIC. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-static' + ;; + icpc* ) + # Intel C++, used to be incompatible with GCC. + # ICC 10 doesn't accept -KPIC any more. + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fPIC' + lt_prog_compiler_static_CXX='-static' + ;; + pgCC* | pgcpp*) + # Portland Group C++ compiler + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-fpic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + cxx*) + # Compaq C++ + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + xlc* | xlC*) + # IBM XL 8.0 on PPC + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-qpic' + lt_prog_compiler_static_CXX='-qstaticlink' + ;; + *) + case `$CC -V 2>&1 | sed 5q` in + *Sun\ C*) + # Sun C++ 5.9 + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + esac + ;; + esac + ;; + lynxos*) + ;; + m88k*) + ;; + mvs*) + case $cc_basename in + cxx*) + lt_prog_compiler_pic_CXX='-W c,exportall' + ;; + *) + ;; + esac + ;; + netbsd* | netbsdelf*-gnu) + ;; + *qnx* | *nto*) + # QNX uses GNU C++, but need to define -shared option too, otherwise + # it will coredump. + lt_prog_compiler_pic_CXX='-fPIC -shared' + ;; + osf3* | osf4* | osf5*) + case $cc_basename in + KCC*) + lt_prog_compiler_wl_CXX='--backend -Wl,' + ;; + RCC*) + # Rational C++ 2.4.1 + lt_prog_compiler_pic_CXX='-pic' + ;; + cxx*) + # Digital/Compaq C++ + lt_prog_compiler_wl_CXX='-Wl,' + # Make sure the PIC flag is empty. It appears that all Alpha + # Linux and Compaq Tru64 Unix objects are PIC. + lt_prog_compiler_pic_CXX= + lt_prog_compiler_static_CXX='-non_shared' + ;; + *) + ;; + esac + ;; + psos*) + ;; + solaris*) + case $cc_basename in + CC*) + # Sun C++ 4.2, 5.x and Centerline C++ + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + lt_prog_compiler_wl_CXX='-Qoption ld ' + ;; + gcx*) + # Green Hills C++ Compiler + lt_prog_compiler_pic_CXX='-PIC' + ;; + *) + ;; + esac + ;; + sunos4*) + case $cc_basename in + CC*) + # Sun C++ 4.x + lt_prog_compiler_pic_CXX='-pic' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + lcc*) + # Lucid + lt_prog_compiler_pic_CXX='-pic' + ;; + *) + ;; + esac + ;; + sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) + case $cc_basename in + CC*) + lt_prog_compiler_wl_CXX='-Wl,' + lt_prog_compiler_pic_CXX='-KPIC' + lt_prog_compiler_static_CXX='-Bstatic' + ;; + esac + ;; + tandem*) + case $cc_basename in + NCC*) + # NonStop-UX NCC 3.20 + lt_prog_compiler_pic_CXX='-KPIC' + ;; + *) + ;; + esac + ;; + vxworks*) + ;; + *) + lt_prog_compiler_can_build_shared_CXX=no + ;; + esac + fi + +case $host_os in + # For platforms which do not support PIC, -DPIC is meaningless: + *djgpp*) + lt_prog_compiler_pic_CXX= + ;; + *) + lt_prog_compiler_pic_CXX="$lt_prog_compiler_pic_CXX@&t@ -DPIC" + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic_CXX" >&5 +$as_echo "$lt_prog_compiler_pic_CXX" >&6; } + + + +# +# Check to make sure the PIC flag actually works. +# +if test -n "$lt_prog_compiler_pic_CXX"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works" >&5 +$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic_CXX works... " >&6; } +if test "${lt_cv_prog_compiler_pic_works_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_pic_works_CXX=no + ac_outfile=conftest.$ac_objext + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$lt_prog_compiler_pic_CXX@&t@ -DPIC" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_pic_works_CXX=yes + fi + fi + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_pic_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_pic_works_CXX" = xyes; then + case $lt_prog_compiler_pic_CXX in + "" | " "*) ;; + *) lt_prog_compiler_pic_CXX=" $lt_prog_compiler_pic_CXX" ;; + esac +else + lt_prog_compiler_pic_CXX= + lt_prog_compiler_can_build_shared_CXX=no +fi + +fi + + + +# +# Check to make sure the static flag actually works. +# +wl=$lt_prog_compiler_wl_CXX eval lt_tmp_static_flag=\"$lt_prog_compiler_static_CXX\" +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 +$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } +if test "${lt_cv_prog_compiler_static_works_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_static_works_CXX=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $lt_tmp_static_flag" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&5 + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + lt_cv_prog_compiler_static_works_CXX=yes + fi + else + lt_cv_prog_compiler_static_works_CXX=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_static_works_CXX" >&6; } + +if test x"$lt_cv_prog_compiler_static_works_CXX" = xyes; then + : +else + lt_prog_compiler_static_CXX= +fi + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 +$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; } +if test "${lt_cv_prog_compiler_c_o_CXX+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + lt_cv_prog_compiler_c_o_CXX=no + $RM -r conftest 2>/dev/null + mkdir conftest + cd conftest + mkdir out + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + lt_compiler_flag="-o out/conftest2.$ac_objext" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&5) + (eval "$lt_compile" 2>out/conftest.err) + ac_status=$? + cat out/conftest.err >&5 + echo "$as_me:__oline__: \$? = $ac_status" >&5 + if (exit $ac_status) && test -s out/conftest2.$ac_objext + then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp + $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 + if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then + lt_cv_prog_compiler_c_o_CXX=yes + fi + fi + chmod u+w . 2>&5 + $RM conftest* + # SGI C++ compiler will create directory out/ii_files/ for + # template instantiation + test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files + $RM out/* && rmdir out + cd .. + $RM -r conftest + $RM conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o_CXX" >&5 +$as_echo "$lt_cv_prog_compiler_c_o_CXX" >&6; } + + + + +hard_links="nottested" +if test "$lt_cv_prog_compiler_c_o_CXX" = no && test "$need_locks" != no; then + # do not overwrite the value of need_locks provided by the user + { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 +$as_echo_n "checking if we can lock with hard links... " >&6; } + hard_links=yes + $RM conftest* + ln conftest.a conftest.b 2>/dev/null && hard_links=no + touch conftest.a + ln conftest.a conftest.b 2>&5 || hard_links=no + ln conftest.a conftest.b 2>/dev/null && hard_links=no + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 +$as_echo "$hard_links" >&6; } + if test "$hard_links" = no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5 +$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;} + need_locks=warn + fi +else + need_locks=no +fi + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 +$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } + + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + case $host_os in + aix[4-9]*) + # If we're using GNU nm, then we don't want the "-C" option. + # -C means demangle to AIX nm, but means don't demangle with GNU nm + if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then + export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + else + export_symbols_cmds_CXX='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols' + fi + ;; + pw32*) + export_symbols_cmds_CXX="$ltdll_cmds" + ;; + cygwin* | mingw* | cegcc*) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;/^.*[ ]__nm__/s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' + ;; + linux* | k*bsd*-gnu) + link_all_deplibs_CXX=no + ;; + *) + export_symbols_cmds_CXX='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' + ;; + esac + exclude_expsyms_CXX='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs_CXX" >&5 +$as_echo "$ld_shlibs_CXX" >&6; } +test "$ld_shlibs_CXX" = no && can_build_shared=no + +with_gnu_ld_CXX=$with_gnu_ld + + + + + + +# +# Do we need to explicitly link libc? +# +case "x$archive_cmds_need_lc_CXX" in +x|xyes) + # Assume -lc should be added + archive_cmds_need_lc_CXX=yes + + if test "$enable_shared" = yes && test "$GCC" = yes; then + case $archive_cmds_CXX in + *'~'*) + # FIXME: we may have to deal with multi-command sequences. + ;; + '$CC '*) + # Test whether the compiler implicitly links with -lc since on some + # systems, -lgcc has to come before -lc. If gcc already passes -lc + # to ld, don't add -lc before -lgcc. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 +$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; } + $RM conftest* + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } 2>conftest.err; then + soname=conftest + lib=conftest + libobjs=conftest.$ac_objext + deplibs= + wl=$lt_prog_compiler_wl_CXX + pic_flag=$lt_prog_compiler_pic_CXX + compiler_flags=-v + linker_flags=-v + verstring= + output_objdir=. + libname=conftest + lt_save_allow_undefined_flag=$allow_undefined_flag_CXX + allow_undefined_flag_CXX= + if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 + (eval $archive_cmds_CXX 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + then + archive_cmds_need_lc_CXX=no + else + archive_cmds_need_lc_CXX=yes + fi + allow_undefined_flag_CXX=$lt_save_allow_undefined_flag + else + cat conftest.err 1>&5 + fi + $RM conftest* + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc_CXX" >&5 +$as_echo "$archive_cmds_need_lc_CXX" >&6; } + ;; + esac + fi + ;; +esac + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 +$as_echo_n "checking dynamic linker characteristics... " >&6; } + +library_names_spec= +libname_spec='lib$name' +soname_spec= +shrext_cmds=".so" +postinstall_cmds= +postuninstall_cmds= +finish_cmds= +finish_eval= +shlibpath_var= +shlibpath_overrides_runpath=unknown +version_type=none +dynamic_linker="$host_os ld.so" +sys_lib_dlsearch_path_spec="/lib /usr/lib" +need_lib_prefix=unknown +hardcode_into_libs=no + +# when you set need_version to no, make sure it does not cause -set_version +# flags to be left without arguments +need_version=unknown + +case $host_os in +aix3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a' + shlibpath_var=LIBPATH + + # AIX 3 has no versioning support, so we append a major version to the name. + soname_spec='${libname}${release}${shared_ext}$major' + ;; + +aix[4-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + hardcode_into_libs=yes + if test "$host_cpu" = ia64; then + # AIX 5 supports IA64 + library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + else + # With GCC up to 2.95.x, collect2 would create an import file + # for dependence libraries. The import file would start with + # the line `#! .'. This would cause the generated library to + # depend on `.', always an invalid library. This was fixed in + # development snapshots of GCC prior to 3.0. + case $host_os in + aix4 | aix4.[01] | aix4.[01].*) + if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' + echo ' yes ' + echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then + : + else + can_build_shared=no + fi + ;; + esac + # AIX (on Power*) has no versioning support, so currently we can not hardcode correct + # soname into executable. Probably we can add versioning support to + # collect2, so additional links can be useful in future. + if test "$aix_use_runtimelinking" = yes; then + # If using run time linking (on AIX 4.2 or later) use lib.so + # instead of lib.a to let people know that these are not + # typical AIX shared libraries. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + else + # We preserve .a as extension for shared libraries through AIX4.2 + # and later when we are not doing run time linking. + library_names_spec='${libname}${release}.a $libname.a' + soname_spec='${libname}${release}${shared_ext}$major' + fi + shlibpath_var=LIBPATH + fi + ;; + +amigaos*) + case $host_cpu in + powerpc) + # Since July 2007 AmigaOS4 officially supports .so libraries. + # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + ;; + m68k) + library_names_spec='$libname.ixlibrary $libname.a' + # Create ${libname}_ixlibrary.a entries in /sys/libs. + finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' + ;; + esac + ;; + +beos*) + library_names_spec='${libname}${shared_ext}' + dynamic_linker="$host_os ld.so" + shlibpath_var=LIBRARY_PATH + ;; + +bsdi[45]*) + version_type=linux + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" + sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" + # the default ld.so.conf also contains /usr/contrib/lib and + # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow + # libtool to hard-code these into programs + ;; + +cygwin* | mingw* | pw32* | cegcc*) + version_type=windows + shrext_cmds=".dll" + need_version=no + need_lib_prefix=no + + case $GCC,$host_os in + yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*) + library_names_spec='$libname.dll.a' + # DLL is installed to $(libdir)/../bin by postinstall_cmds + postinstall_cmds='base_file=`basename \${file}`~ + dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~ + dldir=$destdir/`dirname \$dlpath`~ + test -d \$dldir || mkdir -p \$dldir~ + $install_prog $dir/$dlname \$dldir/$dlname~ + chmod a+x \$dldir/$dlname~ + if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then + eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; + fi' + postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ + dlpath=$dir/\$dldll~ + $RM \$dlpath' + shlibpath_overrides_runpath=yes + + case $host_os in + cygwin*) + # Cygwin DLLs use 'cyg' prefix rather than 'lib' + soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib" + ;; + mingw* | cegcc*) + # MinGW DLLs use traditional 'lib' prefix + soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"` + if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then + # It is most probably a Windows format PATH printed by + # mingw gcc, but we are running on Cygwin. Gcc prints its search + # path with ; separators, and with drive letters. We can handle the + # drive letters (cygwin fileutils understands them), so leave them, + # especially as we might pass files found there to a mingw objdump, + # which wouldn't understand a cygwinified path. Ahh. + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` + else + sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` + fi + ;; + pw32*) + # pw32 DLLs use 'pw' prefix rather than 'lib' + library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' + ;; + esac + ;; + + *) + library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' + ;; + esac + dynamic_linker='Win32 ld.exe' + # FIXME: first we should search . and the directory the executable is in + shlibpath_var=PATH + ;; + +darwin* | rhapsody*) + dynamic_linker="$host_os dyld" + version_type=darwin + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext' + soname_spec='${libname}${release}${major}$shared_ext' + shlibpath_overrides_runpath=yes + shlibpath_var=DYLD_LIBRARY_PATH + shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' + + sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' + ;; + +dgux*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +freebsd1*) + dynamic_linker=no + ;; + +freebsd* | dragonfly*) + # DragonFly does not have aout. When/if they implement a new + # versioning mechanism, adjust this. + if test -x /usr/bin/objformat; then + objformat=`/usr/bin/objformat` + else + case $host_os in + freebsd[123]*) objformat=aout ;; + *) objformat=elf ;; + esac + fi + version_type=freebsd-$objformat + case $version_type in + freebsd-elf*) + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + need_version=no + need_lib_prefix=no + ;; + freebsd-*) + library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix' + need_version=yes + ;; + esac + shlibpath_var=LD_LIBRARY_PATH + case $host_os in + freebsd2*) + shlibpath_overrides_runpath=yes + ;; + freebsd3.[01]* | freebsdelf3.[01]*) + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ + freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + *) # from 4.6 on, and DragonFly + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + esac + ;; + +gnu*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + hardcode_into_libs=yes + ;; + +hpux9* | hpux10* | hpux11*) + # Give a soname corresponding to the major version so that dld.sl refuses to + # link against other versions. + version_type=sunos + need_lib_prefix=no + need_version=no + case $host_cpu in + ia64*) + shrext_cmds='.so' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.so" + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + if test "X$HPUX_IA64_MODE" = X32; then + sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" + else + sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" + fi + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + hppa*64*) + shrext_cmds='.sl' + hardcode_into_libs=yes + dynamic_linker="$host_os dld.sl" + shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH + shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" + sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec + ;; + *) + shrext_cmds='.sl' + dynamic_linker="$host_os dld.sl" + shlibpath_var=SHLIB_PATH + shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + ;; + esac + # HP-UX runs *really* slowly unless shared libraries are mode 555. + postinstall_cmds='chmod 555 $lib' + ;; + +interix[3-9]*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +irix5* | irix6* | nonstopux*) + case $host_os in + nonstopux*) version_type=nonstopux ;; + *) + if test "$lt_cv_prog_gnu_ld" = yes; then + version_type=linux + else + version_type=irix + fi ;; + esac + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}' + case $host_os in + irix5* | nonstopux*) + libsuff= shlibsuff= + ;; + *) + case $LD in # libtool.m4 will add one of these switches to LD + *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") + libsuff= shlibsuff= libmagic=32-bit;; + *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") + libsuff=32 shlibsuff=N32 libmagic=N32;; + *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") + libsuff=64 shlibsuff=64 libmagic=64-bit;; + *) libsuff= shlibsuff= libmagic=never-match;; + esac + ;; + esac + shlibpath_var=LD_LIBRARY${shlibsuff}_PATH + shlibpath_overrides_runpath=no + sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}" + sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}" + hardcode_into_libs=yes + ;; + +# No shared lib support for Linux oldld, aout, or coff. +linux*oldld* | linux*aout* | linux*coff*) + dynamic_linker=no + ;; + +# This must be Linux ELF. +linux* | k*bsd*-gnu | kopensolaris*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + # Some binutils ld are patched to set DT_RUNPATH + save_LDFLAGS=$LDFLAGS + save_libdir=$libdir + eval "libdir=/foo; wl=\"$lt_prog_compiler_wl_CXX\"; \ + LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec_CXX\"" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_cxx_try_link "$LINENO"; then : + if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then : + shlibpath_overrides_runpath=yes +fi +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext + LDFLAGS=$save_LDFLAGS + libdir=$save_libdir + + # This implies no fast_install, which is unacceptable. + # Some rework will be needed to allow for fast_install + # before this can be enabled. + hardcode_into_libs=yes + + # Append ld.so.conf contents to the search path + if test -f /etc/ld.so.conf; then + lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '` + sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" + fi + + # We used to test for /lib/ld.so.1 and disable shared libraries on + # powerpc, because MkLinux only supported shared libraries with the + # GNU dynamic linker. Since this was broken with cross compilers, + # most powerpc-linux boxes support dynamic linking these days and + # people can always --disable-shared, the test was removed, and we + # assume the GNU/Linux dynamic linker is in use. + dynamic_linker='GNU/Linux ld.so' + ;; + +netbsdelf*-gnu) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='NetBSD ld.elf_so' + ;; + +netbsd*) + version_type=sunos + need_lib_prefix=no + need_version=no + if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + dynamic_linker='NetBSD (a.out) ld.so' + else + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + dynamic_linker='NetBSD ld.elf_so' + fi + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + ;; + +newsos6) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + ;; + +*nto* | *qnx*) + version_type=qnx + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + dynamic_linker='ldqnx.so' + ;; + +openbsd*) + version_type=sunos + sys_lib_dlsearch_path_spec="/usr/lib" + need_lib_prefix=no + # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs. + case $host_os in + openbsd3.3 | openbsd3.3.*) need_version=yes ;; + *) need_version=no ;; + esac + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' + shlibpath_var=LD_LIBRARY_PATH + if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then + case $host_os in + openbsd2.[89] | openbsd2.[89].*) + shlibpath_overrides_runpath=no + ;; + *) + shlibpath_overrides_runpath=yes + ;; + esac + else + shlibpath_overrides_runpath=yes + fi + ;; + +os2*) + libname_spec='$name' + shrext_cmds=".dll" + need_lib_prefix=no + library_names_spec='$libname${shared_ext} $libname.a' + dynamic_linker='OS/2 ld.exe' + shlibpath_var=LIBPATH + ;; + +osf3* | osf4* | osf5*) + version_type=osf + need_lib_prefix=no + need_version=no + soname_spec='${libname}${release}${shared_ext}$major' + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" + sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec" + ;; + +rdos*) + dynamic_linker=no + ;; + +solaris*) + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + # ldd complains unless libraries are executable + postinstall_cmds='chmod +x $lib' + ;; + +sunos4*) + version_type=sunos + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix' + finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + if test "$with_gnu_ld" = yes; then + need_lib_prefix=no + fi + need_version=yes + ;; + +sysv4 | sysv4.3*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + case $host_vendor in + sni) + shlibpath_overrides_runpath=no + need_lib_prefix=no + runpath_var=LD_RUN_PATH + ;; + siemens) + need_lib_prefix=no + ;; + motorola) + need_lib_prefix=no + need_version=no + shlibpath_overrides_runpath=no + sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' + ;; + esac + ;; + +sysv4*MP*) + if test -d /usr/nec ;then + version_type=linux + library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}' + soname_spec='$libname${shared_ext}.$major' + shlibpath_var=LD_LIBRARY_PATH + fi + ;; + +sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + version_type=freebsd-elf + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=yes + hardcode_into_libs=yes + if test "$with_gnu_ld" = yes; then + sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' + else + sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' + case $host_os in + sco3.2v5*) + sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" + ;; + esac + fi + sys_lib_dlsearch_path_spec='/usr/lib' + ;; + +tpf*) + # TPF is a cross-target only. Preferred cross-host = GNU/Linux. + version_type=linux + need_lib_prefix=no + need_version=no + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + shlibpath_var=LD_LIBRARY_PATH + shlibpath_overrides_runpath=no + hardcode_into_libs=yes + ;; + +uts4*) + version_type=linux + library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}' + soname_spec='${libname}${release}${shared_ext}$major' + shlibpath_var=LD_LIBRARY_PATH + ;; + +*) + dynamic_linker=no + ;; +esac +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 +$as_echo "$dynamic_linker" >&6; } +test "$dynamic_linker" = no && can_build_shared=no + +variables_saved_for_relink="PATH $shlibpath_var $runpath_var" +if test "$GCC" = yes; then + variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" +fi + +if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then + sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec" +fi +if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then + sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec" +fi + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 +$as_echo_n "checking how to hardcode library paths into programs... " >&6; } +hardcode_action_CXX= +if test -n "$hardcode_libdir_flag_spec_CXX" || + test -n "$runpath_var_CXX" || + test "X$hardcode_automatic_CXX" = "Xyes" ; then + + # We can hardcode non-existent directories. + if test "$hardcode_direct_CXX" != no && + # If the only mechanism to avoid hardcoding is shlibpath_var, we + # have to relink, otherwise we might link with an installed library + # when we should be linking with a yet-to-be-installed one + ## test "$_LT_TAGVAR(hardcode_shlibpath_var, CXX)" != no && + test "$hardcode_minus_L_CXX" != no; then + # Linking always hardcodes the temporary library directory. + hardcode_action_CXX=relink + else + # We can link without hardcoding, and we can hardcode nonexisting dirs. + hardcode_action_CXX=immediate + fi +else + # We cannot hardcode anything, or else we can only hardcode existing + # directories. + hardcode_action_CXX=unsupported +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action_CXX" >&5 +$as_echo "$hardcode_action_CXX" >&6; } + +if test "$hardcode_action_CXX" = relink || + test "$inherit_rpath_CXX" = yes; then + # Fast installation is not supported + enable_fast_install=no +elif test "$shlibpath_overrides_runpath" = yes || + test "$enable_shared" = no; then + # Fast installation is not necessary + enable_fast_install=needless +fi + + + + + + + + fi # test -n "$compiler" + + CC=$lt_save_CC + LDCXX=$LD + LD=$lt_save_LD + GCC=$lt_save_GCC + with_gnu_ld=$lt_save_with_gnu_ld + lt_cv_path_LDCXX=$lt_cv_path_LD + lt_cv_path_LD=$lt_save_path_LD + lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld + lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld +fi # test "$_lt_caught_CXX_error" != yes + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + ac_config_commands="$ac_config_commands libtool" + + + + +# Only expand once: + + + +@%:@ Check whether --enable-double was given. +if test "${enable_double+set}" = set; then : + enableval=$enable_double; case "${enableval}" in + yes) double=true ;; + no) double=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-double" "$LINENO" 5 ;; +esac +else + double=false +fi + + +if (test x$double = xtrue) ;then + +$as_echo "@%:@define MGL_USE_DOUBLE 1" >>confdefs.h + +else + +$as_echo "@%:@define MGL_USE_DOUBLE 0" >>confdefs.h + +fi + +@%:@ Check whether --enable-all was given. +if test "${enable_all+set}" = set; then : + enableval=$enable_all; case "${enableval}" in + yes) all=true ;; + no) all=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-all" "$LINENO" 5 ;; +esac +else + all=false +fi + + +@%:@ Check whether --enable-langall was given. +if test "${enable_langall+set}" = set; then : + enableval=$enable_langall; case "${enableval}" in + yes) langall=true ;; + no) langall=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-langall" "$LINENO" 5 ;; +esac +else + langall=false +fi + + +@%:@ Check whether --enable-pthread was given. +if test "${enable_pthread+set}" = set; then : + enableval=$enable_pthread; case "${enableval}" in + yes) pthread=true ;; + no) pthread=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-pthread" "$LINENO" 5 ;; +esac +else + pthread=true +fi + +ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" +if test "x$ac_cv_header_pthread_h" = x""yes; then : + (test x$all = xtrue || test x$pthread = xtrue) && PTHREAD_FLAGS=-DHAVE_PTHREAD +else + (test x$all = xtrue || test x$pthread = xtrue) && echo "Please install posix threads headers" && exit +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lpthread" >&5 +$as_echo_n "checking for main in -lpthread... " >&6; } +if test "${ac_cv_lib_pthread_main+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpthread $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pthread_main=yes +else + ac_cv_lib_pthread_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_main" >&5 +$as_echo "$ac_cv_lib_pthread_main" >&6; } +if test "x$ac_cv_lib_pthread_main" = x""yes; then : + (test x$all = xtrue || test x$pthread = xtrue) && PTHREAD_LIBS=-lpthread +else + (test x$all = xtrue || test x$pthread = xtrue) && echo "Please install posix threads library" && exit +fi + + if test x$pthread = xtrue; then + USE_PTHREAD_TRUE= + USE_PTHREAD_FALSE='#' +else + USE_PTHREAD_TRUE='#' + USE_PTHREAD_FALSE= +fi + + +@%:@ Check whether --enable-gsl was given. +if test "${enable_gsl+set}" = set; then : + enableval=$enable_gsl; case "${enableval}" in + yes) gsl=true ;; + no) gsl=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-gsl" "$LINENO" 5 ;; +esac +else + gsl=true +fi + + +if (test x$all = xtrue || test x$gsl = xtrue) ;then + GSL_PROG=gsl-config + # Extract the first word of "$GSL_PROG", so it can be a program name with args. +set dummy $GSL_PROG; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_GSL_FLAGS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$GSL_FLAGS"; then + ac_cv_prog_GSL_FLAGS="$GSL_FLAGS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_GSL_FLAGS="`$GSL_PROG --cflags`" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +GSL_FLAGS=$ac_cv_prog_GSL_FLAGS +if test -n "$GSL_FLAGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GSL_FLAGS" >&5 +$as_echo "$GSL_FLAGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + # Extract the first word of "$GSL_PROG", so it can be a program name with args. +set dummy $GSL_PROG; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_GSL_LIBS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$GSL_LIBS"; then + ac_cv_prog_GSL_LIBS="$GSL_LIBS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_GSL_LIBS="`$GSL_PROG --libs`" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +GSL_LIBS=$ac_cv_prog_GSL_LIBS +if test -n "$GSL_LIBS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GSL_LIBS" >&5 +$as_echo "$GSL_LIBS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "$GSL_LIBS" ;then + test_gsl=true + else + echo "Please install gsl headers and libraries and make sure that \ + path to $GSL_PROG exist in your PATH" + exit + fi +else + GSL_FLAGS=-DNO_GSL + +fi + if test x$test_gsl = xtrue; then + USE_GSL_TRUE= + USE_GSL_FALSE='#' +else + USE_GSL_TRUE='#' + USE_GSL_FALSE= +fi + + +@%:@ Check whether --enable-glut was given. +if test "${enable_glut+set}" = set; then : + enableval=$enable_glut; case "${enableval}" in + yes) glut=true ;; + no) glut=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-glut" "$LINENO" 5 ;; +esac +else + glut=false +fi + + +case "${host}" in + *darwin*) + GL_LIBS="-framework OpenGL" + + if (test x$all = xtrue || test x$glut = xtrue) ;then + GLUT_LIBS="-framework GLUT -framework OpenGL" + + fi + ;; + + *w32*) + GL_LIBS=opengl32 + ac_fn_c_check_header_mongrel "$LINENO" "GL/gl.h" "ac_cv_header_GL_gl_h" "$ac_includes_default" +if test "x$ac_cv_header_GL_gl_h" = x""yes; then : + +else + echo "Please install OpenGL headers (GL/gl.h)"; exit +fi + + + as_ac_Lib=`$as_echo "ac_cv_lib_${GL_LIBS}''_main" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GL_LIBS}" >&5 +$as_echo_n "checking for main in -l${GL_LIBS}... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l${GL_LIBS} $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + GL_LIBS=-l${GL_LIBS} +else + echo "Please install OpenGL library (lib${GL_LIBS}.a)"; exit +fi + + GLUT_LIBS=glut32 + ac_fn_c_check_header_mongrel "$LINENO" "GL/glut.h" "ac_cv_header_GL_glut_h" "$ac_includes_default" +if test "x$ac_cv_header_GL_glut_h" = x""yes; then : + (test x$all = xtrue || test x$glut = xtrue) && GLUT_FLAGS=-DHAVE_GLUT +else + (test x$all = xtrue || test x$glut = xtrue) && (echo "Please install FreeGLUT headers (GL/glut.h)" && exit) +fi + + + as_ac_Lib=`$as_echo "ac_cv_lib_${GLUT_LIBS}''_main" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GLUT_LIBS}" >&5 +$as_echo_n "checking for main in -l${GLUT_LIBS}... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l${GLUT_LIBS} $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + (test x$all = xtrue || test x$glut = xtrue) && GLUT_LIBS=-l${GLUT_LIBS} +else + (test x$all = xtrue || test x$glut = xtrue) && echo "Please install FreeGLUT library (lib${GLUT_LIBS}.a)" && exit +fi + + ;; + + *) + GL_LIBS=GL + ac_fn_c_check_header_mongrel "$LINENO" "GL/gl.h" "ac_cv_header_GL_gl_h" "$ac_includes_default" +if test "x$ac_cv_header_GL_gl_h" = x""yes; then : + +else + echo "Please install OpenGL headers (GL/gl.h)"; exit +fi + + + as_ac_Lib=`$as_echo "ac_cv_lib_${GL_LIBS}''_main" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GL_LIBS}" >&5 +$as_echo_n "checking for main in -l${GL_LIBS}... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l${GL_LIBS} $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + GL_LIBS=-l${GL_LIBS} +else + echo "Please install OpenGL library (lib${GL_LIBS}.a)"; exit +fi + + GLUT_LIBS=glut + ac_fn_c_check_header_mongrel "$LINENO" "GL/glut.h" "ac_cv_header_GL_glut_h" "$ac_includes_default" +if test "x$ac_cv_header_GL_glut_h" = x""yes; then : + (test x$all = xtrue || test x$glut = xtrue) && GLUT_FLAGS=-DHAVE_GLUT +else + (test x$all = xtrue || test x$glut = xtrue) && (echo "Please install FreeGLUT headers (GL/glut.h)" && exit) +fi + + + as_ac_Lib=`$as_echo "ac_cv_lib_${GLUT_LIBS}''_main" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GLUT_LIBS}" >&5 +$as_echo_n "checking for main in -l${GLUT_LIBS}... " >&6; } +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-l${GLUT_LIBS} $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + eval "$as_ac_Lib=yes" +else + eval "$as_ac_Lib=no" +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +eval ac_res=\$$as_ac_Lib + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : + (test x$all = xtrue || test x$glut = xtrue) && GLUT_LIBS=-l${GLUT_LIBS} +else + (test x$all = xtrue || test x$glut = xtrue) && echo "Please install FreeGLUT library (lib${GLUT_LIBS}.a)" && exit +fi + + ;; + +esac + if (test x$all = xtrue || test x$glut = xtrue); then + USE_GLUT_TRUE= + USE_GLUT_FALSE='#' +else + USE_GLUT_TRUE='#' + USE_GLUT_FALSE= +fi + + +case "${host}" in + *linux*) + ADDON_FLAGS=-DNO_COLOR_ARRAY + ;; + + *) + ;; +esac + +@%:@ Check whether --enable-hdf5 was given. +if test "${enable_hdf5+set}" = set; then : + enableval=$enable_hdf5; case "${enableval}" in + yes) hdf5=true ;; + no) hdf5=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-hdf5" "$LINENO" 5 ;; +esac +else + hdf5=false +fi + +@%:@ Check whether --enable-hdf5_18 was given. +if test "${enable_hdf5_18+set}" = set; then : + enableval=$enable_hdf5_18; case "${enableval}" in + yes) hdf5_18=true ;; + no) hdf5_18=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-hdf5_18" "$LINENO" 5 ;; +esac +else + hdf5_18=false +fi + +#AC_CHECK_HEADER(hdf5.h,[(test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && HDF5_FLAGS=-DHAVE_HDF5 AC_SUBST(HDF5_FLAGS)], +ac_fn_c_check_header_mongrel "$LINENO" "hdf5.h" "ac_cv_header_hdf5_h" "$ac_includes_default" +if test "x$ac_cv_header_hdf5_h" = x""yes; then : + (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && HDF5_FLAGS=-DHAVE_HDF5 +else + (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && echo "Please install hdf5 headers" && exit +fi + + +if ((test x$all = xtrue || test x$hdf5 = xtrue) && test x$hdf5_18 = xfalse) ;then + HDF5_FLAGS="$HDF5_FLAGS -DH5_USE_16_API" + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lhdf5" >&5 +$as_echo_n "checking for main in -lhdf5... " >&6; } +if test "${ac_cv_lib_hdf5_main+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lhdf5 $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_hdf5_main=yes +else + ac_cv_lib_hdf5_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_hdf5_main" >&5 +$as_echo "$ac_cv_lib_hdf5_main" >&6; } +if test "x$ac_cv_lib_hdf5_main" = x""yes; then : + (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && HDF5_LIBS=-lhdf5 +else + (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && echo "Please install hdf5 library" && exit +fi + + if (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue); then + USE_HDF5_TRUE= + USE_HDF5_FALSE='#' +else + USE_HDF5_TRUE='#' + USE_HDF5_FALSE= +fi + + + +@%:@ Check whether --enable-hdf4 was given. +if test "${enable_hdf4+set}" = set; then : + enableval=$enable_hdf4; case "${enableval}" in + yes) hdf4=true ;; + no) hdf4=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-hdf4" "$LINENO" 5 ;; +esac +else + hdf4=false +fi + +ac_fn_c_check_header_mongrel "$LINENO" "hdf/mfhdf.h" "ac_cv_header_hdf_mfhdf_h" "$ac_includes_default" +if test "x$ac_cv_header_hdf_mfhdf_h" = x""yes; then : + (test x$all = xtrue || test x$hdf4 = xtrue) && HDF4_FLAGS=-DHAVE_HDF4 +else + (test x$all = xtrue || test x$hdf4 = xtrue) && echo "Please install hdf4 headers" && exit +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ldf" >&5 +$as_echo_n "checking for main in -ldf... " >&6; } +if test "${ac_cv_lib_df_main+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldf $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_df_main=yes +else + ac_cv_lib_df_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_df_main" >&5 +$as_echo "$ac_cv_lib_df_main" >&6; } +if test "x$ac_cv_lib_df_main" = x""yes; then : + (test x$all = xtrue || test x$hdf4 = xtrue) && HDF4_LIBS="-lmfhdf -ldf" +else + (test x$all = xtrue || test x$hdf4 = xtrue) && echo "Please install hdf4 library" && exit +fi + + if (test x$all = xtrue || test x$hdf4 = xtrue); then + USE_HDF4_TRUE= + USE_HDF4_FALSE='#' +else + USE_HDF4_TRUE='#' + USE_HDF4_FALSE= +fi + + +@%:@ Check whether --enable-gif was given. +if test "${enable_gif+set}" = set; then : + enableval=$enable_gif; case "${enableval}" in + yes) gif=true ;; + no) gif=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-gif" "$LINENO" 5 ;; +esac +else + gif=false +fi + +ac_fn_c_check_header_mongrel "$LINENO" "gif_lib.h" "ac_cv_header_gif_lib_h" "$ac_includes_default" +if test "x$ac_cv_header_gif_lib_h" = x""yes; then : + (test x$all = xtrue || test x$gif = xtrue) && GIF_FLAGS=-DHAVE_GIF +else + (test x$all = xtrue || test x$gif = xtrue) && echo "Please install gif headers" && exit +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lgif" >&5 +$as_echo_n "checking for main in -lgif... " >&6; } +if test "${ac_cv_lib_gif_main+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lgif $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_gif_main=yes +else + ac_cv_lib_gif_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gif_main" >&5 +$as_echo "$ac_cv_lib_gif_main" >&6; } +if test "x$ac_cv_lib_gif_main" = x""yes; then : + (test x$all = xtrue || test x$gif = xtrue) && GIF_LIBS=-lgif +else + (test x$all = xtrue || test x$gif = xtrue) && echo "Please install gif library" && exit +fi + + if (test x$all = xtrue || test x$gif = xtrue); then + USE_GIF_TRUE= + USE_GIF_FALSE='#' +else + USE_GIF_TRUE='#' + USE_GIF_FALSE= +fi + + +ac_fn_c_check_header_mongrel "$LINENO" "png.h" "ac_cv_header_png_h" "$ac_includes_default" +if test "x$ac_cv_header_png_h" = x""yes; then : + +else + echo "Please install png headers" && exit +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lpng" >&5 +$as_echo_n "checking for main in -lpng... " >&6; } +if test "${ac_cv_lib_png_main+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpng $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_png_main=yes +else + ac_cv_lib_png_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_png_main" >&5 +$as_echo "$ac_cv_lib_png_main" >&6; } +if test "x$ac_cv_lib_png_main" = x""yes; then : + PNG_LIBS=-lpng +else + echo "Please install png library" && exit +fi + + +@%:@ Check whether --enable-jpeg was given. +if test "${enable_jpeg+set}" = set; then : + enableval=$enable_jpeg; case "${enableval}" in + yes) jpeg=true ;; + no) jpeg=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-jpeg" "$LINENO" 5 ;; +esac +else + jpeg=false +fi + +ac_fn_c_check_header_mongrel "$LINENO" "jpeglib.h" "ac_cv_header_jpeglib_h" "$ac_includes_default" +if test "x$ac_cv_header_jpeglib_h" = x""yes; then : + (test x$all = xtrue || test x$jpeg = xtrue) && JPEG_FLAGS=-DHAVE_JPEG +else + (test x$all = xtrue || test x$jpeg = xtrue) && echo "Please install jpeg headers" && exit +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ljpeg" >&5 +$as_echo_n "checking for main in -ljpeg... " >&6; } +if test "${ac_cv_lib_jpeg_main+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ljpeg $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_jpeg_main=yes +else + ac_cv_lib_jpeg_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_jpeg_main" >&5 +$as_echo "$ac_cv_lib_jpeg_main" >&6; } +if test "x$ac_cv_lib_jpeg_main" = x""yes; then : + (test x$all = xtrue || test x$jpeg = xtrue) && JPEG_LIBS=-ljpeg +else + (test x$all = xtrue || test x$jpeg = xtrue) && echo "Please install jpeg library" && exit +fi + + if (test x$all = xtrue || test x$jpeg = xtrue); then + USE_JPEG_TRUE= + USE_JPEG_FALSE='#' +else + USE_JPEG_TRUE='#' + USE_JPEG_FALSE= +fi + + +@%:@ Check whether --enable-fltk was given. +if test "${enable_fltk+set}" = set; then : + enableval=$enable_fltk; case "${enableval}" in + yes) fltk=true ;; + no) fltk=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-fltk" "$LINENO" 5 ;; +esac +else + fltk=false +fi + +if (test x$all = xtrue || test x$fltk = xtrue) ;then + FLTK_PROG=fltk-config + # Extract the first word of "$FLTK_PROG", so it can be a program name with args. +set dummy $FLTK_PROG; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_FLTK_FLAGS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$FLTK_FLAGS"; then + ac_cv_prog_FLTK_FLAGS="$FLTK_FLAGS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_FLTK_FLAGS="`$FLTK_PROG --cxxflags`" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +FLTK_FLAGS=$ac_cv_prog_FLTK_FLAGS +if test -n "$FLTK_FLAGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FLTK_FLAGS" >&5 +$as_echo "$FLTK_FLAGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + # Extract the first word of "$FLTK_PROG", so it can be a program name with args. +set dummy $FLTK_PROG; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_FLTK_LIBS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$FLTK_LIBS"; then + ac_cv_prog_FLTK_LIBS="$FLTK_LIBS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_FLTK_LIBS="`$FLTK_PROG --ldflags`" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +FLTK_LIBS=$ac_cv_prog_FLTK_LIBS +if test -n "$FLTK_LIBS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $FLTK_LIBS" >&5 +$as_echo "$FLTK_LIBS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "$FLTK_FLAGS" && test "$FLTK_LIBS" ;then + test_fltk=true + else + echo "Please install FLTK headers and libraries and make sure that \ + path to $FLTK_PROG exist in your PATH" + exit + fi +fi + if test x$test_fltk = xtrue; then + USE_FLTK_TRUE= + USE_FLTK_FALSE='#' +else + USE_FLTK_TRUE='#' + USE_FLTK_FALSE= +fi + + +@%:@ Check whether --enable-wx was given. +if test "${enable_wx+set}" = set; then : + enableval=$enable_wx; case "${enableval}" in + yes) wx=true ;; + no) wx=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-wx" "$LINENO" 5 ;; +esac +else + wx=false +fi + +if (test x$all = xtrue || test x$wx = xtrue) ;then +#if (test x$wx = xtrue) ;then + WX_PROG=wx-config + # Extract the first word of "$WX_PROG", so it can be a program name with args. +set dummy $WX_PROG; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WX_FLAGS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$WX_FLAGS"; then + ac_cv_prog_WX_FLAGS="$WX_FLAGS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_WX_FLAGS="`$WX_PROG --cflags`" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +WX_FLAGS=$ac_cv_prog_WX_FLAGS +if test -n "$WX_FLAGS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WX_FLAGS" >&5 +$as_echo "$WX_FLAGS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + # Extract the first word of "$WX_PROG", so it can be a program name with args. +set dummy $WX_PROG; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_WX_LIBS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$WX_LIBS"; then + ac_cv_prog_WX_LIBS="$WX_LIBS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_WX_LIBS="`$WX_PROG --libs`" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +WX_LIBS=$ac_cv_prog_WX_LIBS +if test -n "$WX_LIBS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WX_LIBS" >&5 +$as_echo "$WX_LIBS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if test "$WX_FLAGS" && test "$WX_LIBS" ;then + test_wx=true + else + echo "Please install wxwidget headers and libraries and make sure that \ + path to $WX_PROG exist in your PATH" + exit + fi +fi + if test x$test_wx = xtrue; then + USE_WX_TRUE= + USE_WX_FALSE='#' +else + USE_WX_TRUE='#' + USE_WX_FALSE= +fi + + +@%:@ Check whether --enable-qt was given. +if test "${enable_qt+set}" = set; then : + enableval=$enable_qt; case "${enableval}" in + yes) qt=true ;; + no) qt=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-qt" "$LINENO" 5 ;; +esac +else + qt=false +fi + +if (test x$all = xtrue || test x$qt = xtrue) ;then + + + + + test x"$TROLL" != x && echo 'ViM rox emacs.' + + +@%:@ Check whether --with-qt was given. +if test "${with_qt+set}" = set; then : + withval=$with_qt; QT_PATH=$withval +else + QT_PATH= +fi + + + # Find Qt. + if test -d /usr/local/Trolltech; then + # Try to find the latest version. + tmp_qt_paths=`echo /usr/local/Trolltech/*/bin | tr ' ' '\n' | sort -nr \ + | xargs | sed 's/ */:/g'` + fi + + # Find qmake. + for ac_prog in qmake-qt4${EXEEXT} +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_QMAKE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $QMAKE in + [\\/]* | ?:[\\/]*) + ac_cv_path_QMAKE="$QMAKE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$QT_DIR:$QT_PATH:$PATH:$tmp_qt_paths" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_QMAKE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +QMAKE=$ac_cv_path_QMAKE +if test -n "$QMAKE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $QMAKE" >&5 +$as_echo "$QMAKE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$QMAKE" && break +done +test -n "$QMAKE" || QMAKE="missing" + + if test x"$QMAKE" = xmissing; then + for ac_prog in qmake${EXEEXT} +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_QMAKE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $QMAKE in + [\\/]* | ?:[\\/]*) + ac_cv_path_QMAKE="$QMAKE" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$QT_DIR:$QT_PATH:$PATH:$tmp_qt_paths" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_QMAKE="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +QMAKE=$ac_cv_path_QMAKE +if test -n "$QMAKE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $QMAKE" >&5 +$as_echo "$QMAKE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$QMAKE" && break +done +test -n "$QMAKE" || QMAKE="missing" + + if test x"$QMAKE" = xmissing; then + as_fn_error $? "Cannot find qmake in your PATH. Try using --with-qt." "$LINENO" 5 + fi + fi + + # Find moc (Meta Object Compiler). + for ac_prog in moc-qt4${EXEEXT} +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MOC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MOC in + [\\/]* | ?:[\\/]*) + ac_cv_path_MOC="$MOC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$QT_PATH:$PATH:$tmp_qt_paths" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_MOC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MOC=$ac_cv_path_MOC +if test -n "$MOC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MOC" >&5 +$as_echo "$MOC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$MOC" && break +done +test -n "$MOC" || MOC="missing" + + if test x"$MOC" = xmissing; then + for ac_prog in moc${EXEEXT} +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_MOC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $MOC in + [\\/]* | ?:[\\/]*) + ac_cv_path_MOC="$MOC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$QT_PATH:$PATH:$tmp_qt_paths" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_MOC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +MOC=$ac_cv_path_MOC +if test -n "$MOC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MOC" >&5 +$as_echo "$MOC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$MOC" && break +done +test -n "$MOC" || MOC="missing" + + if test x"$MOC" = xmissing; then + as_fn_error $? "Cannot find moc (Meta Object Compiler) in your PATH. Try using --with-qt." "$LINENO" 5 + fi + fi + + # Find uic (User Interface Compiler). + for ac_prog in uic-qt4${EXEEXT} +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_UIC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $UIC in + [\\/]* | ?:[\\/]*) + ac_cv_path_UIC="$UIC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$QT_PATH:$PATH:$tmp_qt_paths" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_UIC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +UIC=$ac_cv_path_UIC +if test -n "$UIC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UIC" >&5 +$as_echo "$UIC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$UIC" && break +done +test -n "$UIC" || UIC="missing" + + if test x"$UIC" = xmissing; then + for ac_prog in uic${EXEEXT} +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_UIC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $UIC in + [\\/]* | ?:[\\/]*) + ac_cv_path_UIC="$UIC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$QT_PATH:$PATH:$tmp_qt_paths" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_UIC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +UIC=$ac_cv_path_UIC +if test -n "$UIC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $UIC" >&5 +$as_echo "$UIC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$UIC" && break +done +test -n "$UIC" || UIC="missing" + + if test x"$UIC" = xmissing; then + as_fn_error $? "Cannot find uic (User Interface Compiler) in your PATH. Try using --with-qt." "$LINENO" 5 + fi + fi + + # Find rcc (Qt Resource Compiler). + for ac_prog in rcc-qt4${EXEEXT} +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_RCC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $RCC in + [\\/]* | ?:[\\/]*) + ac_cv_path_RCC="$RCC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$QT_PATH:$PATH:$tmp_qt_paths" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_RCC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +RCC=$ac_cv_path_RCC +if test -n "$RCC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RCC" >&5 +$as_echo "$RCC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$RCC" && break +done +test -n "$RCC" || RCC="false" + + if test x"$RCC" = xfalse; then + for ac_prog in rcc${EXEEXT} +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_RCC+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $RCC in + [\\/]* | ?:[\\/]*) + ac_cv_path_RCC="$RCC" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_dummy="$QT_PATH:$PATH:$tmp_qt_paths" +for as_dir in $as_dummy +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_RCC="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +RCC=$ac_cv_path_RCC +if test -n "$RCC"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RCC" >&5 +$as_echo "$RCC" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$RCC" && break +done +test -n "$RCC" || RCC="false" + + if test x"$RCC" = xfalse; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot find rcc (Qt Resource Compiler) in your PATH. Try using --with-qt." >&5 +$as_echo "$as_me: WARNING: Cannot find rcc (Qt Resource Compiler) in your PATH. Try using --with-qt." >&2;} + fi + fi + + # If we don't know the path to Qt, guess it from the path to qmake. + if test x"$QT_PATH" = x; then + QT_PATH=`dirname "$QMAKE"` + fi + if test x"$QT_PATH" = x; then + as_fn_error $? "Cannot find the path to your Qt install. Use --with-qt." "$LINENO" 5 + fi + + + # Get ready to build a test-app with Qt. + + # Look for a writable temporary directory. + + if test x"$TMPDIR" = x || test ! -d "$TMPDIR" || test ! -w "$TMPDIR"; then + echo "$as_me:$LINENO: no TMPDIR or bad TMPDIR ($TMPDIR)" \ + >&5 + for i in /tmp /var/tmp; do + if test -d "$i" && test -w "$i"; then + TMPDIR=$i + export TMPDIR + echo "$as_me:$LINENO: setting TMPDIR=$TMPDIR" >&5 + break + fi + done + fi + + # Kludge!! QMake has a very strange behavior. For instance, if you + # install Qt under your $HOME and run QMake somewhere else under your + # $HOME, it will try to be clever and produce Makefiles with relative + # include paths. In order to avoid this, we will test QMake from a + # temporary directory (usually /tmp). Note that this problem was only + # observed with Qt 4. + my_configure_pwd=`pwd` + my_tmpdir="$TMPDIR/conftest$$.dir" + test -d "$my_tmpdir" || mkdir "$my_tmpdir" + if test -w "$my_tmpdir" && cd "$my_tmpdir" + then + : + else + as_fn_error $? "Cannot cd to or write in $my_tmpdir" "$LINENO" 5 + fi + cat >conftest.h <<_ASEOF +#include + +class Foo: public QObject +{ + Q_OBJECT; +public: + Foo(); + ~Foo() {} +public slots: + void setValue(int value); +signals: + void valueChanged(int newValue); +private: + int value_; +}; +_ASEOF + + cat >conftest.cpp <<_ASEOF +#include "conftest.h" +Foo::Foo() + : value_ (42) +{ + connect(this, SIGNAL(valueChanged(int)), this, SLOT(setValue(int))); +} + +void Foo::setValue(int value) +{ + value_ = value; +} + +int main() +{ + Foo f; +} +_ASEOF + if $QMAKE -project; then :; else + as_fn_error $? "Calling $QMAKE -project failed." "$LINENO" 5 + fi + + # Find the .pro file generated by qmake. + pro_file='conftest.dir.pro' + test -f $pro_file || pro_file=`echo *.pro` + if test -f "$pro_file"; then :; else + as_fn_error $? "Can't find the .pro file generated by Qmake." "$LINENO" 5 + fi + + + + + + + + echo "$as_me:$LINENO: Invoking $QMAKE on $pro_file" >&5 + sed 's/^/| /' "$pro_file" >&5 + + if $QMAKE; then :; else + as_fn_error $? "Calling $QMAKE failed." "$LINENO" 5 + fi + # Try to compile a simple Qt app. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can build a simple Qt app" >&5 +$as_echo_n "checking whether we can build a simple Qt app... " >&6; } +if test "${at_cv_qt_build+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + at_cv_qt_build=ko + : ${MAKE=make} + + if $MAKE >&5 2>&1; then + at_cv_qt_build='ok, looks like Qt 4' + else + echo "$as_me:$LINENO: Build failed, trying to #include \ +instead" >&5 + sed 's///' conftest.h > tmp.h && mv tmp.h conftest.h + if $MAKE >&5 2>&1; then + at_cv_qt_build='ok, looks like Qt 3' + else + # Sometimes (such as on Debian) build will fail because Qt hasn't been + # installed in debug mode and qmake tries (by default) to build apps in + # debug mode => Try again in release mode. + echo "$as_me:$LINENO: Build failed, trying to enforce release mode" \ + >&5 + + # Tweak the value of CONFIG in the .pro file for +release. + + qt_conf='' + for at_mod in +release; do + at_mod=`echo "$at_mod" | sed 's/^-//; tough + s/^+//; beef + :ough + s/^/CONFIG -= /;n + :eef + s/^/CONFIG += /'` + qt_conf="$qt_conf +$at_mod" + done + echo "$qt_conf" | sed 1d >>"$pro_file" + + + sed 's///' conftest.h > tmp.h && mv tmp.h conftest.h + if $MAKE >&5 2>&1; then + at_cv_qt_build='ok, looks like Qt 4, release mode forced' + else + echo "$as_me:$LINENO: Build failed, trying to #include \ +instead" >&5 + sed 's///' conftest.h > tmp.h && mv tmp.h conftest.h + if $MAKE >&5 2>&1; then + at_cv_qt_build='ok, looks like Qt 3, release mode forced' + else + at_cv_qt_build=ko + echo "$as_me:$LINENO: failed program was:" >&5 + sed 's/^/| /' conftest.h >&5 + echo "$as_me:$LINENO: failed program was:" >&5 + sed 's/^/| /' conftest.cpp >&5 + fi # if make with Qt3-style #include and release mode forced. + fi # if make with Qt4-style #include and release mode forced. + fi # if make with Qt3-style #include. + fi # if make with Qt4-style #include. + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_qt_build" >&5 +$as_echo "$at_cv_qt_build" >&6; } + if test x"$at_cv_qt_build" = xko; then + as_fn_error $? "Cannot build a test Qt program" "$LINENO" 5 + fi + QT_VERSION_MAJOR=`echo "$at_cv_qt_build" | sed 's/^^0-9*//'` + + + # This sed filter is applied after an expression of the form: /^FOO.*=/!d; + # It starts by removing the beginning of the line, removing references to + # SUBLIBS, removing unnecessary whitespaces at the beginning, and prefixes + # all variable uses by QT_. + qt_sed_filter='s///; + s/$(SUBLIBS)//g; + s/^ *//; + s/\$(\(@<:@A-Z_@:>@@<:@A-Z_@:>@*\))/$(QT_\1)/g' + + # Find the Makefile (qmake happens to generate a fake Makefile which invokes + # a Makefile.Debug or Makefile.Release). We we have both, we'll pick the + # Makefile.Release. The reason is that the main difference is that release + # uses -Os and debug -g. We can override -Os by passing another -O but we + # usually don't override -g. + if test -f Makefile.Release; then + at_mfile='Makefile.Release' + else + at_mfile='Makefile' + fi + if test -f $at_mfile; then :; else + cd "$my_configure_pwd" + as_fn_error $? "Cannot find the Makefile generated by qmake." "$LINENO" 5 + fi + + # Find the DEFINES of Qt (should have been named CPPFLAGS). + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the DEFINES to use with Qt" >&5 +$as_echo_n "checking for the DEFINES to use with Qt... " >&6; } +if test "${at_cv_env_QT_DEFINES+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + at_cv_env_QT_DEFINES=`sed "/^DEFINES@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_DEFINES" >&5 +$as_echo "$at_cv_env_QT_DEFINES" >&6; } + QT_DEFINES=$at_cv_env_QT_DEFINES + + + # Find the CFLAGS of Qt (We can use Qt in C?!) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the CFLAGS to use with Qt" >&5 +$as_echo_n "checking for the CFLAGS to use with Qt... " >&6; } +if test "${at_cv_env_QT_CFLAGS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + at_cv_env_QT_CFLAGS=`sed "/^CFLAGS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_CFLAGS" >&5 +$as_echo "$at_cv_env_QT_CFLAGS" >&6; } + QT_CFLAGS=$at_cv_env_QT_CFLAGS + + + # Find the CXXFLAGS of Qt. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the CXXFLAGS to use with Qt" >&5 +$as_echo_n "checking for the CXXFLAGS to use with Qt... " >&6; } +if test "${at_cv_env_QT_CXXFLAGS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + at_cv_env_QT_CXXFLAGS=`sed "/^CXXFLAGS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_CXXFLAGS" >&5 +$as_echo "$at_cv_env_QT_CXXFLAGS" >&6; } + QT_CXXFLAGS=$at_cv_env_QT_CXXFLAGS + + + # Find the INCPATH of Qt. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the INCPATH to use with Qt" >&5 +$as_echo_n "checking for the INCPATH to use with Qt... " >&6; } +if test "${at_cv_env_QT_INCPATH+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + at_cv_env_QT_INCPATH=`sed "/^INCPATH@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_INCPATH" >&5 +$as_echo "$at_cv_env_QT_INCPATH" >&6; } + QT_INCPATH=$at_cv_env_QT_INCPATH + + + QT_CPPFLAGS="$at_cv_env_QT_DEFINES $at_cv_env_QT_INCPATH" + + + # Find the LFLAGS of Qt (Should have been named LDFLAGS) + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the LDFLAGS to use with Qt" >&5 +$as_echo_n "checking for the LDFLAGS to use with Qt... " >&6; } +if test "${at_cv_env_QT_LDFLAGS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + at_cv_env_QT_LDFLAGS=`sed "/^LDFLAGS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_LDFLAGS" >&5 +$as_echo "$at_cv_env_QT_LDFLAGS" >&6; } + QT_LFLAGS=$at_cv_env_QT_LDFLAGS + + QT_LDFLAGS=$at_cv_env_QT_LDFLAGS + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether host operating system is Darwin" >&5 +$as_echo_n "checking whether host operating system is Darwin... " >&6; } + at_darwin="no" + case $host_os in + darwin*) + at_darwin="yes" + ;; + esac + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_darwin" >&5 +$as_echo "$at_darwin" >&6; } + + # Find the LIBS of Qt. + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the LIBS to use with Qt" >&5 +$as_echo_n "checking for the LIBS to use with Qt... " >&6; } +if test "${at_cv_env_QT_LIBS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + at_cv_env_QT_LIBS=`sed "/^LIBS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile` + if test x$at_darwin = xyes; then + # Fix QT_LIBS: as of today Libtool (GNU Libtool 1.5.23a) doesn't handle + # -F properly. The "bug" has been fixed on 22 October 2006 + # by Peter O'Gorman but we provide backward compatibility here. + at_cv_env_QT_LIBS=`echo "$at_cv_env_QT_LIBS" \ + | sed 's/^-F/-Wl,-F/;s/ -F/ -Wl,-F/g'` + fi + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_env_QT_LIBS" >&5 +$as_echo "$at_cv_env_QT_LIBS" >&6; } + QT_LIBS=$at_cv_env_QT_LIBS + + + cd "$my_configure_pwd" || echo 'WTF!' + rm -rf "$my_tmpdir" + + + if test x"$QMAKE" = x; then + as_fn_error $? "\$QMAKE is empty. \ +Did you invoke AT@&t@_WITH_QT before AT@&t@_REQUIRE_QT_VERSION?" "$LINENO" 5 + fi + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt's version" >&5 +$as_echo_n "checking for Qt's version... " >&6; } +if test "${at_cv_QT_VERSION+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + echo "$as_me:$LINENO: Running $QMAKE --version:" >&5 + $QMAKE --version >&5 2>&1 + qmake_version_sed='/^.*\([0-9]\.[0-9]\.[0-9]\).*$/!d;s//\1/' + at_cv_QT_VERSION=`$QMAKE --version 2>&1 | sed "$qmake_version_sed"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_QT_VERSION" >&5 +$as_echo "$at_cv_QT_VERSION" >&6; } + if test x"$at_cv_QT_VERSION" = x; then + as_fn_error $? "Cannot detect Qt's version." "$LINENO" 5 + fi + QT_VERSION=$at_cv_QT_VERSION + + as_arg_v1=$QT_VERSION +as_arg_v2=4.3 +awk "$as_awk_strverscmp" v1="$as_arg_v1" v2="$as_arg_v2" /dev/null +case $? in @%:@( + 1) : + as_fn_error $? "This package requires Qt 4.3 or above." "$LINENO" 5 ;; @%:@( + 0) : + ;; @%:@( + 2) : + ;; @%:@( + *) : + ;; +esac + + test_qt=true +fi + if test x$test_qt = xtrue; then + USE_QT_TRUE= + USE_QT_FALSE='#' +else + USE_QT_TRUE='#' + USE_QT_FALSE= +fi + + +@%:@ Check whether --enable-python was given. +if test "${enable_python+set}" = set; then : + enableval=$enable_python; case "${enableval}" in + yes) python=true ;; + no) python=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-python" "$LINENO" 5 ;; +esac +else + python=false +fi + +if (test x$langall = xtrue || test x$python = xtrue) ;then + # Extract the first word of "python-config", so it can be a program name with args. +set dummy python-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_PYTHON_HEADERS+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$PYTHON_HEADERS"; then + ac_cv_prog_PYTHON_HEADERS="$PYTHON_HEADERS" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_PYTHON_HEADERS="`python-config --cflags`" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +PYTHON_HEADERS=$ac_cv_prog_PYTHON_HEADERS +if test -n "$PYTHON_HEADERS"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON_HEADERS" >&5 +$as_echo "$PYTHON_HEADERS" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + # Extract the first word of "swig$EXEEXT", so it can be a program name with args. +set dummy swig$EXEEXT; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_HAVE_SWIG+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$HAVE_SWIG"; then + ac_cv_prog_HAVE_SWIG="$HAVE_SWIG" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_HAVE_SWIG="true" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +HAVE_SWIG=$ac_cv_prog_HAVE_SWIG +if test -n "$HAVE_SWIG"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_SWIG" >&5 +$as_echo "$HAVE_SWIG" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + if (test "$PYTHON_HEADERS" && test "$HAVE_SWIG") ;then + test_python=true + + + + + # Find any Python interpreter. + if test -z "$PYTHON"; then + for ac_prog in python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 python2.1 python2.0 +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_path_PYTHON+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + case $PYTHON in + [\\/]* | ?:[\\/]*) + ac_cv_path_PYTHON="$PYTHON" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_path_PYTHON="$as_dir/$ac_word$ac_exec_ext" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PYTHON=$ac_cv_path_PYTHON +if test -n "$PYTHON"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PYTHON" >&5 +$as_echo "$PYTHON" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$PYTHON" && break +done +test -n "$PYTHON" || PYTHON=":" + + fi + am_display_PYTHON=python + + + if test "$PYTHON" = :; then + as_fn_error $? "no suitable Python interpreter found" "$LINENO" 5 + else + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON version" >&5 +$as_echo_n "checking for $am_display_PYTHON version... " >&6; } +if test "${am_cv_python_version+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[:3])"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_version" >&5 +$as_echo "$am_cv_python_version" >&6; } + PYTHON_VERSION=$am_cv_python_version + + + + PYTHON_PREFIX='${prefix}' + + PYTHON_EXEC_PREFIX='${exec_prefix}' + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON platform" >&5 +$as_echo_n "checking for $am_display_PYTHON platform... " >&6; } +if test "${am_cv_python_platform+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"` +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_platform" >&5 +$as_echo "$am_cv_python_platform" >&6; } + PYTHON_PLATFORM=$am_cv_python_platform + + + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON script directory" >&5 +$as_echo_n "checking for $am_display_PYTHON script directory... " >&6; } +if test "${am_cv_python_pythondir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null || + echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pythondir" >&5 +$as_echo "$am_cv_python_pythondir" >&6; } + pythondir=$am_cv_python_pythondir + + + + pkgpythondir=\${pythondir}/$PACKAGE + + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $am_display_PYTHON extension module directory" >&5 +$as_echo_n "checking for $am_display_PYTHON extension module directory... " >&6; } +if test "${am_cv_python_pyexecdir+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null || + echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_python_pyexecdir" >&5 +$as_echo "$am_cv_python_pyexecdir" >&6; } + pyexecdir=$am_cv_python_pyexecdir + + + + pkgpyexecdir=\${pyexecdir}/$PACKAGE + + + + fi + + + else + echo Please install python-dev and swig packages + exit + fi +fi + if test x$test_python = xtrue ; then + USE_PYTHON_TRUE= + USE_PYTHON_FALSE='#' +else + USE_PYTHON_TRUE='#' + USE_PYTHON_FALSE= +fi + + +@%:@ Check whether --enable-octave was given. +if test "${enable_octave+set}" = set; then : + enableval=$enable_octave; case "${enableval}" in + yes) octave=true ;; + no) octave=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-octave" "$LINENO" 5 ;; +esac +else + octave=false +fi + +if (test x$langall = xtrue || test x$octave = xtrue) ;then + # Extract the first word of "octave-config", so it can be a program name with args. +set dummy octave-config; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_OCTAVE+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OCTAVE"; then + ac_cv_prog_OCTAVE="$OCTAVE" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_OCTAVE="octave-config" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OCTAVE=$ac_cv_prog_OCTAVE +if test -n "$OCTAVE"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCTAVE" >&5 +$as_echo "$OCTAVE" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +# find Octave arch + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Octave arch" >&5 +$as_echo_n "checking for Octave arch... " >&6; } + OCTAVE_ARCH=`$OCTAVE -p CANONICAL_HOST_TYPE`-`$OCTAVE -p API_VERSION` + OCTAVE_INCFLAGS="-I`$OCTAVE -p OCTINCLUDEDIR`" + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OCTAVE_ARCH" >&5 +$as_echo "$OCTAVE_ARCH" >&6; } + OCTAVE_ARCH=$OCTAVE_ARCH + + OCTAVE_INCFLAGS=$OCTAVE_INCFLAGS + + test_octave=true +fi + if test x$test_octave = xtrue ; then + USE_OCTAVE_TRUE= + USE_OCTAVE_FALSE='#' +else + USE_OCTAVE_TRUE='#' + USE_OCTAVE_FALSE= +fi + + +@%:@ Check whether --enable-testio was given. +if test "${enable_testio+set}" = set; then : + enableval=$enable_testio; case "${enableval}" in + yes) testio=true ;; + no) testio=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-testio" "$LINENO" 5 ;; +esac +else + testio=false +fi + + if test x$testio = xtrue ; then + USE_TESTIO_TRUE= + USE_TESTIO_FALSE='#' +else + USE_TESTIO_TRUE='#' + USE_TESTIO_FALSE= +fi + + +@%:@ Check whether --enable-docs was given. +if test "${enable_docs+set}" = set; then : + enableval=$enable_docs; case "${enableval}" in + yes) docs=true ;; + no) docs=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-docs" "$LINENO" 5 ;; +esac +else + docs=false +fi + +if (test x$docs = xtrue || test x$all = xtrue) ;then + ac_config_files="$ac_config_files texinfo/Makefile texinfo/png/Makefile" + +fi + if (test x$docs = xtrue || test x$all = xtrue) ; then + USE_DOCS_TRUE= + USE_DOCS_FALSE='#' +else + USE_DOCS_TRUE='#' + USE_DOCS_FALSE= +fi + + +AM_CXXFLAGS="-Wall $GSL_FLAGS" + + +ac_config_files="$ac_config_files Makefile mgl/Makefile examples/Makefile include/Makefile lang/Makefile utils/Makefile widgets/Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, we kill variables containing newlines. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +( + for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do + eval ac_val=\$$ac_var + case $ac_val in #( + *${as_nl}*) + case $ac_var in #( + *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + esac + case $ac_var in #( + _ | IFS | as_nl) ;; #( + BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( + *) { eval $ac_var=; unset $ac_var;} ;; + esac ;; + esac + done + + (set) 2>&1 | + case $as_nl`(ac_space=' '; set) 2>&1` in #( + *${as_nl}ac_space=\ *) + # `set' does not quote correctly, so add quotes: double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \. + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; #( + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" + ;; + esac | + sort +) | + sed ' + /^ac_cv_env_/b end + t clear + :clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + :end' >>confcache +if diff "$cache_file" confcache >/dev/null 2>&1; then :; else + if test -w "$cache_file"; then + test "x$cache_file" != "x/dev/null" && + { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +$as_echo "$as_me: updating cache $cache_file" >&6;} + cat confcache >$cache_file + else + { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +DEFS=-DHAVE_CONFIG_H + +ac_libobjs= +ac_ltlibobjs= +U= +for ac_i in : $LIB@&t@OBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' + ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR + # will be set to the directory where LIBOBJS objects are built. + as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" + as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' +done +LIB@&t@OBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + if test -n "$EXEEXT"; then + am__EXEEXT_TRUE= + am__EXEEXT_FALSE='#' +else + am__EXEEXT_TRUE='#' + am__EXEEXT_FALSE= +fi + +if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then + as_fn_error $? "conditional \"AMDEP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_PTHREAD_TRUE}" && test -z "${USE_PTHREAD_FALSE}"; then + as_fn_error $? "conditional \"USE_PTHREAD\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_GSL_TRUE}" && test -z "${USE_GSL_FALSE}"; then + as_fn_error $? "conditional \"USE_GSL\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_GLUT_TRUE}" && test -z "${USE_GLUT_FALSE}"; then + as_fn_error $? "conditional \"USE_GLUT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_HDF5_TRUE}" && test -z "${USE_HDF5_FALSE}"; then + as_fn_error $? "conditional \"USE_HDF5\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_HDF4_TRUE}" && test -z "${USE_HDF4_FALSE}"; then + as_fn_error $? "conditional \"USE_HDF4\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_GIF_TRUE}" && test -z "${USE_GIF_FALSE}"; then + as_fn_error $? "conditional \"USE_GIF\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_JPEG_TRUE}" && test -z "${USE_JPEG_FALSE}"; then + as_fn_error $? "conditional \"USE_JPEG\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_FLTK_TRUE}" && test -z "${USE_FLTK_FALSE}"; then + as_fn_error $? "conditional \"USE_FLTK\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_WX_TRUE}" && test -z "${USE_WX_FALSE}"; then + as_fn_error $? "conditional \"USE_WX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_QT_TRUE}" && test -z "${USE_QT_FALSE}"; then + as_fn_error $? "conditional \"USE_QT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_PYTHON_TRUE}" && test -z "${USE_PYTHON_FALSE}"; then + as_fn_error $? "conditional \"USE_PYTHON\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_OCTAVE_TRUE}" && test -z "${USE_OCTAVE_FALSE}"; then + as_fn_error $? "conditional \"USE_OCTAVE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_TESTIO_TRUE}" && test -z "${USE_TESTIO_FALSE}"; then + as_fn_error $? "conditional \"USE_TESTIO\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_DOCS_TRUE}" && test -z "${USE_DOCS_FALSE}"; then + as_fn_error $? "conditional \"USE_DOCS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi + +: ${CONFIG_STATUS=./config.status} +ac_write_fail=0 +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +as_write_fail=0 +cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false + +SHELL=\${CONFIG_SHELL-$SHELL} +export SHELL +_ASEOF +cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 +## -------------------- ## +## M4sh Initialization. ## +## -------------------- ## + +# Be more Bourne compatible +DUALCASE=1; export DUALCASE # for MKS sh +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : + emulate sh + NULLCMD=: + # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' + setopt NO_GLOB_SUBST +else + case `(set -o) 2>/dev/null` in @%:@( + *posix*) : + set -o posix ;; @%:@( + *) : + ;; +esac +fi + + +as_nl=' +' +export as_nl +# Printing a long string crashes Solaris 7 /usr/bin/printf. +as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo +as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo +# Prefer a ksh shell builtin over an external printf program on Solaris, +# but without wasting forks for bash or zsh. +if test -z "$BASH_VERSION$ZSH_VERSION" \ + && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='print -r --' + as_echo_n='print -rn --' +elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then + as_echo='printf %s\n' + as_echo_n='printf %s' +else + if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then + as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' + as_echo_n='/usr/ucb/echo -n' + else + as_echo_body='eval expr "X$1" : "X\\(.*\\)"' + as_echo_n_body='eval + arg=$1; + case $arg in @%:@( + *"$as_nl"*) + expr "X$arg" : "X\\(.*\\)$as_nl"; + arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; + esac; + expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" + ' + export as_echo_n_body + as_echo_n='sh -c $as_echo_n_body as_echo' + fi + export as_echo_body + as_echo='sh -c $as_echo_body as_echo' +fi + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + PATH_SEPARATOR=: + (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { + (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || + PATH_SEPARATOR=';' + } +fi + + +# IFS +# We need space, tab and new line, in precisely that order. Quoting is +# there to prevent editors from complaining about space-tab. +# (If _AS_PATH_WALK were called with IFS unset, it would disable word +# splitting by setting IFS to empty value.) +IFS=" "" $as_nl" + +# Find who we are. Look in the path if we contain no directory separator. +case $0 in @%:@(( + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + done +IFS=$as_save_IFS + + ;; +esac +# We did not find ourselves, most probably we were run as `sh COMMAND' +# in which case we are not to be found in the path. +if test "x$as_myself" = x; then + as_myself=$0 +fi +if test ! -f "$as_myself"; then + $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + exit 1 +fi + +# Unset variables that we do not need and which cause bugs (e.g. in +# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" +# suppresses any "Segmentation fault" message there. '((' could +# trigger a bug in pdksh 5.2.14. +for as_var in BASH_ENV ENV MAIL MAILPATH +do eval test x\${$as_var+set} = xset \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# CDPATH. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + + +@%:@ as_fn_error STATUS ERROR [LINENO LOG_FD] +@%:@ ---------------------------------------- +@%:@ Output "`basename @S|@0`: error: ERROR" to stderr. If LINENO and LOG_FD are +@%:@ provided, also output the error to LOG_FD, referencing LINENO. Then exit the +@%:@ script with STATUS, using 1 if that was 0. +as_fn_error () +{ + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + fi + $as_echo "$as_me: error: $2" >&2 + as_fn_exit $as_status +} @%:@ as_fn_error + + +@%:@ as_fn_set_status STATUS +@%:@ ----------------------- +@%:@ Set @S|@? to STATUS, without forking. +as_fn_set_status () +{ + return $1 +} @%:@ as_fn_set_status + +@%:@ as_fn_exit STATUS +@%:@ ----------------- +@%:@ Exit the shell with STATUS, even in a "trap 0" or "set -e" context. +as_fn_exit () +{ + set +e + as_fn_set_status $1 + exit $1 +} @%:@ as_fn_exit + +@%:@ as_fn_unset VAR +@%:@ --------------- +@%:@ Portably unset VAR. +as_fn_unset () +{ + { eval $1=; unset $1;} +} +as_unset=as_fn_unset +@%:@ as_fn_append VAR VALUE +@%:@ ---------------------- +@%:@ Append the text in VALUE to the end of the definition contained in VAR. Take +@%:@ advantage of any shell optimizations that allow amortized linear growth over +@%:@ repeated appends, instead of the typical quadratic growth present in naive +@%:@ implementations. +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : + eval 'as_fn_append () + { + eval $1+=\$2 + }' +else + as_fn_append () + { + eval $1=\$$1\$2 + } +fi # as_fn_append + +@%:@ as_fn_arith ARG... +@%:@ ------------------ +@%:@ Perform arithmetic evaluation on the ARGs, and store the result in the +@%:@ global @S|@as_val. Take advantage of shells that can avoid forks. The arguments +@%:@ must be portable across @S|@(()) and expr. +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : + eval 'as_fn_arith () + { + as_val=$(( $* )) + }' +else + as_fn_arith () + { + as_val=`expr "$@" || test $? -eq 1` + } +fi # as_fn_arith + + +if expr a : '\(a\)' >/dev/null 2>&1 && + test "X`expr 00001 : '.*\(...\)'`" = X001; then + as_expr=expr +else + as_expr=false +fi + +if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + +if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then + as_dirname=dirname +else + as_dirname=false +fi + +as_me=`$as_basename -- "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ + s//\1/ + q + } + /^X\/\(\/\/\)$/{ + s//\1/ + q + } + /^X\/\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +ECHO_C= ECHO_N= ECHO_T= +case `echo -n x` in @%:@((((( +-n*) + case `echo 'xy\c'` in + *c*) ECHO_T=' ';; # ECHO_T is single tab character. + xy) ECHO_C='\c';; + *) echo `echo ksh88 bug on AIX 6.1` > /dev/null + ECHO_T=' ';; + esac;; +*) + ECHO_N='-n';; +esac + +rm -f conf$$ conf$$.exe conf$$.file +if test -d conf$$.dir; then + rm -f conf$$.dir/conf$$.file +else + rm -f conf$$.dir + mkdir conf$$.dir 2>/dev/null +fi +if (echo >conf$$.file) 2>/dev/null; then + if ln -s conf$$.file conf$$ 2>/dev/null; then + as_ln_s='ln -s' + # ... but there are two gotchas: + # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. + # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. + # In both cases, we have to default to `cp -p'. + ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || + as_ln_s='cp -p' + elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln + else + as_ln_s='cp -p' + fi +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file +rmdir conf$$.dir 2>/dev/null + + +@%:@ as_fn_mkdir_p +@%:@ ------------- +@%:@ Create "@S|@as_dir" as a directory, including parents if necessary. +as_fn_mkdir_p () +{ + + case $as_dir in #( + -*) as_dir=./$as_dir;; + esac + test -d "$as_dir" || eval $as_mkdir_p || { + as_dirs= + while :; do + case $as_dir in #( + *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *) as_qdir=$as_dir;; + esac + as_dirs="'$as_qdir' $as_dirs" + as_dir=`$as_dirname -- "$as_dir" || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + test -d "$as_dir" && break + done + test -z "$as_dirs" || eval "mkdir $as_dirs" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" + + +} @%:@ as_fn_mkdir_p +if mkdir -p . 2>/dev/null; then + as_mkdir_p='mkdir -p "$as_dir"' +else + test -d ./-p && rmdir ./-p + as_mkdir_p=false +fi + +if test -x / >/dev/null 2>&1; then + as_test_x='test -x' +else + if ls -dL / >/dev/null 2>&1; then + as_ls_L_option=L + else + as_ls_L_option= + fi + as_test_x=' + eval sh -c '\'' + if test -d "$1"; then + test -d "$1/."; + else + case $1 in @%:@( + -*)set "./$1";; + esac; + case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in @%:@(( + ???[sx]*):;;*)false;;esac;fi + '\'' sh + ' +fi +as_executable_p=$as_test_x + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" + + +exec 6>&1 +## ----------------------------------- ## +## Main body of $CONFIG_STATUS script. ## +## ----------------------------------- ## +_ASEOF +test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# Save the log message, to keep $0 and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. +ac_log=" +This file was extended by mathgl $as_me 1.10, which was +generated by GNU Autoconf 2.67. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +on `(hostname || uname -n) 2>/dev/null | sed 1q` +" + +_ACEOF + +case $ac_config_files in *" +"*) set x $ac_config_files; shift; ac_config_files=$*;; +esac + +case $ac_config_headers in *" +"*) set x $ac_config_headers; shift; ac_config_headers=$*;; +esac + + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# Files that config.status was made for. +config_files="$ac_config_files" +config_headers="$ac_config_headers" +config_commands="$ac_config_commands" + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +ac_cs_usage="\ +\`$as_me' instantiates files and other configuration actions +from templates according to the current configuration. Unless the files +and actions are specified as TAGs, all are instantiated by default. + +Usage: $0 [OPTION]... [TAG]... + + -h, --help print this help, then exit + -V, --version print version number and configuration settings, then exit + --config print configuration, then exit + -q, --quiet, --silent + do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + --header=FILE[:TEMPLATE] + instantiate the configuration header FILE + +Configuration files: +$config_files + +Configuration headers: +$config_headers + +Configuration commands: +$config_commands + +Report bugs to ." + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_version="\\ +mathgl config.status 1.10 +configured by $0, generated by GNU Autoconf 2.67, + with options \\"\$ac_cs_config\\" + +Copyright (C) 2010 Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." + +ac_pwd='$ac_pwd' +srcdir='$srcdir' +INSTALL='$INSTALL' +MKDIR_P='$MKDIR_P' +AWK='$AWK' +test -n "\$AWK" || AWK=awk +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# The default lists apply if the user does not specify any file. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=?*) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` + ac_shift=: + ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; + *) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) + $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; + --debug | --debu | --deb | --de | --d | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; + esac + as_fn_append CONFIG_FILES " '$ac_optarg'" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + case $ac_optarg in + *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append CONFIG_HEADERS " '$ac_optarg'" + ac_need_defaults=false;; + --he | --h) + # Conflict between --help and --header + as_fn_error $? "ambiguous option: \`$1' +Try \`$0 --help' for more information.";; + --help | --hel | -h ) + $as_echo "$ac_cs_usage"; exit ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) as_fn_error $? "unrecognized option: \`$1' +Try \`$0 --help' for more information." ;; + + *) as_fn_append ac_config_targets " $1" + ac_need_defaults=false ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +if \$ac_cs_recheck; then + set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion + shift + \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + CONFIG_SHELL='$SHELL' + export CONFIG_SHELL + exec "\$@" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../@%:@@%:@ /;s/...$/ @%:@@%:@/;p;x;p;x' <<_ASBOX +@%:@@%:@ Running $as_me. @%:@@%:@ +_ASBOX + $as_echo "$ac_log" +} >&5 + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +# +# INIT-COMMANDS +# +AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" + + +# The HP-UX ksh and POSIX shell print the target directory to stdout +# if CDPATH is set. +(unset CDPATH) >/dev/null 2>&1 && unset CDPATH + +sed_quote_subst='$sed_quote_subst' +double_quote_subst='$double_quote_subst' +delay_variable_subst='$delay_variable_subst' +AS='`$ECHO "X$AS" | $Xsed -e "$delay_single_quote_subst"`' +DLLTOOL='`$ECHO "X$DLLTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`' +macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`' +macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`' +enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`' +pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`' +enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`' +host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`' +host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`' +host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`' +build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`' +build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`' +build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`' +SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`' +Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`' +GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`' +EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`' +FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`' +LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`' +NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`' +LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`' +max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`' +ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`' +exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`' +lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`' +lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`' +lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`' +reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`' +reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`' +deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`' +file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`' +AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`' +AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`' +STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`' +RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`' +old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`' +CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`' +compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`' +GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`' +SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`' +ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`' +MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`' +need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`' +DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`' +NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`' +LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`' +OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`' +libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`' +shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`' +extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`' +variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`' +need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`' +need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`' +version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`' +runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`' +shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`' +libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`' +library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`' +soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`' +postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`' +finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`' +enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`' +old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`' +striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_dirs='`$ECHO "X$compiler_lib_search_dirs" | $Xsed -e "$delay_single_quote_subst"`' +predep_objects='`$ECHO "X$predep_objects" | $Xsed -e "$delay_single_quote_subst"`' +postdep_objects='`$ECHO "X$postdep_objects" | $Xsed -e "$delay_single_quote_subst"`' +predeps='`$ECHO "X$predeps" | $Xsed -e "$delay_single_quote_subst"`' +postdeps='`$ECHO "X$postdeps" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_path='`$ECHO "X$compiler_lib_search_path" | $Xsed -e "$delay_single_quote_subst"`' +LD_CXX='`$ECHO "X$LD_CXX" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_cmds_CXX='`$ECHO "X$old_archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_CXX='`$ECHO "X$compiler_CXX" | $Xsed -e "$delay_single_quote_subst"`' +GCC_CXX='`$ECHO "X$GCC_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_no_builtin_flag_CXX='`$ECHO "X$lt_prog_compiler_no_builtin_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_wl_CXX='`$ECHO "X$lt_prog_compiler_wl_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_pic_CXX='`$ECHO "X$lt_prog_compiler_pic_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_prog_compiler_static_CXX='`$ECHO "X$lt_prog_compiler_static_CXX" | $Xsed -e "$delay_single_quote_subst"`' +lt_cv_prog_compiler_c_o_CXX='`$ECHO "X$lt_cv_prog_compiler_c_o_CXX" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_need_lc_CXX='`$ECHO "X$archive_cmds_need_lc_CXX" | $Xsed -e "$delay_single_quote_subst"`' +enable_shared_with_static_runtimes_CXX='`$ECHO "X$enable_shared_with_static_runtimes_CXX" | $Xsed -e "$delay_single_quote_subst"`' +export_dynamic_flag_spec_CXX='`$ECHO "X$export_dynamic_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +whole_archive_flag_spec_CXX='`$ECHO "X$whole_archive_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_needs_object_CXX='`$ECHO "X$compiler_needs_object_CXX" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_new_cmds_CXX='`$ECHO "X$old_archive_from_new_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +old_archive_from_expsyms_cmds_CXX='`$ECHO "X$old_archive_from_expsyms_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +archive_cmds_CXX='`$ECHO "X$archive_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +archive_expsym_cmds_CXX='`$ECHO "X$archive_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +module_cmds_CXX='`$ECHO "X$module_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +module_expsym_cmds_CXX='`$ECHO "X$module_expsym_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +with_gnu_ld_CXX='`$ECHO "X$with_gnu_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' +allow_undefined_flag_CXX='`$ECHO "X$allow_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' +no_undefined_flag_CXX='`$ECHO "X$no_undefined_flag_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_CXX='`$ECHO "X$hardcode_libdir_flag_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_flag_spec_ld_CXX='`$ECHO "X$hardcode_libdir_flag_spec_ld_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_libdir_separator_CXX='`$ECHO "X$hardcode_libdir_separator_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_CXX='`$ECHO "X$hardcode_direct_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_direct_absolute_CXX='`$ECHO "X$hardcode_direct_absolute_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_minus_L_CXX='`$ECHO "X$hardcode_minus_L_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_shlibpath_var_CXX='`$ECHO "X$hardcode_shlibpath_var_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_automatic_CXX='`$ECHO "X$hardcode_automatic_CXX" | $Xsed -e "$delay_single_quote_subst"`' +inherit_rpath_CXX='`$ECHO "X$inherit_rpath_CXX" | $Xsed -e "$delay_single_quote_subst"`' +link_all_deplibs_CXX='`$ECHO "X$link_all_deplibs_CXX" | $Xsed -e "$delay_single_quote_subst"`' +fix_srcfile_path_CXX='`$ECHO "X$fix_srcfile_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' +always_export_symbols_CXX='`$ECHO "X$always_export_symbols_CXX" | $Xsed -e "$delay_single_quote_subst"`' +export_symbols_cmds_CXX='`$ECHO "X$export_symbols_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +exclude_expsyms_CXX='`$ECHO "X$exclude_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' +include_expsyms_CXX='`$ECHO "X$include_expsyms_CXX" | $Xsed -e "$delay_single_quote_subst"`' +prelink_cmds_CXX='`$ECHO "X$prelink_cmds_CXX" | $Xsed -e "$delay_single_quote_subst"`' +file_list_spec_CXX='`$ECHO "X$file_list_spec_CXX" | $Xsed -e "$delay_single_quote_subst"`' +hardcode_action_CXX='`$ECHO "X$hardcode_action_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_dirs_CXX='`$ECHO "X$compiler_lib_search_dirs_CXX" | $Xsed -e "$delay_single_quote_subst"`' +predep_objects_CXX='`$ECHO "X$predep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' +postdep_objects_CXX='`$ECHO "X$postdep_objects_CXX" | $Xsed -e "$delay_single_quote_subst"`' +predeps_CXX='`$ECHO "X$predeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' +postdeps_CXX='`$ECHO "X$postdeps_CXX" | $Xsed -e "$delay_single_quote_subst"`' +compiler_lib_search_path_CXX='`$ECHO "X$compiler_lib_search_path_CXX" | $Xsed -e "$delay_single_quote_subst"`' + +LTCC='$LTCC' +LTCFLAGS='$LTCFLAGS' +compiler='$compiler_DEFAULT' + +# Quote evaled strings. +for var in SED \ +GREP \ +EGREP \ +FGREP \ +LD \ +NM \ +LN_S \ +lt_SP2NL \ +lt_NL2SP \ +reload_flag \ +deplibs_check_method \ +file_magic_cmd \ +AR \ +AR_FLAGS \ +STRIP \ +RANLIB \ +CC \ +CFLAGS \ +compiler \ +lt_cv_sys_global_symbol_pipe \ +lt_cv_sys_global_symbol_to_cdecl \ +lt_cv_sys_global_symbol_to_c_name_address \ +lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ +SHELL \ +ECHO \ +lt_prog_compiler_no_builtin_flag \ +lt_prog_compiler_wl \ +lt_prog_compiler_pic \ +lt_prog_compiler_static \ +lt_cv_prog_compiler_c_o \ +need_locks \ +DSYMUTIL \ +NMEDIT \ +LIPO \ +OTOOL \ +OTOOL64 \ +shrext_cmds \ +export_dynamic_flag_spec \ +whole_archive_flag_spec \ +compiler_needs_object \ +with_gnu_ld \ +allow_undefined_flag \ +no_undefined_flag \ +hardcode_libdir_flag_spec \ +hardcode_libdir_flag_spec_ld \ +hardcode_libdir_separator \ +fix_srcfile_path \ +exclude_expsyms \ +include_expsyms \ +file_list_spec \ +variables_saved_for_relink \ +libname_spec \ +library_names_spec \ +soname_spec \ +finish_eval \ +old_striplib \ +striplib \ +compiler_lib_search_dirs \ +predep_objects \ +postdep_objects \ +predeps \ +postdeps \ +compiler_lib_search_path \ +LD_CXX \ +compiler_CXX \ +lt_prog_compiler_no_builtin_flag_CXX \ +lt_prog_compiler_wl_CXX \ +lt_prog_compiler_pic_CXX \ +lt_prog_compiler_static_CXX \ +lt_cv_prog_compiler_c_o_CXX \ +export_dynamic_flag_spec_CXX \ +whole_archive_flag_spec_CXX \ +compiler_needs_object_CXX \ +with_gnu_ld_CXX \ +allow_undefined_flag_CXX \ +no_undefined_flag_CXX \ +hardcode_libdir_flag_spec_CXX \ +hardcode_libdir_flag_spec_ld_CXX \ +hardcode_libdir_separator_CXX \ +fix_srcfile_path_CXX \ +exclude_expsyms_CXX \ +include_expsyms_CXX \ +file_list_spec_CXX \ +compiler_lib_search_dirs_CXX \ +predep_objects_CXX \ +postdep_objects_CXX \ +predeps_CXX \ +postdeps_CXX \ +compiler_lib_search_path_CXX; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Double-quote double-evaled strings. +for var in reload_cmds \ +old_postinstall_cmds \ +old_postuninstall_cmds \ +old_archive_cmds \ +extract_expsyms_cmds \ +old_archive_from_new_cmds \ +old_archive_from_expsyms_cmds \ +archive_cmds \ +archive_expsym_cmds \ +module_cmds \ +module_expsym_cmds \ +export_symbols_cmds \ +prelink_cmds \ +postinstall_cmds \ +postuninstall_cmds \ +finish_cmds \ +sys_lib_search_path_spec \ +sys_lib_dlsearch_path_spec \ +old_archive_cmds_CXX \ +old_archive_from_new_cmds_CXX \ +old_archive_from_expsyms_cmds_CXX \ +archive_cmds_CXX \ +archive_expsym_cmds_CXX \ +module_cmds_CXX \ +module_expsym_cmds_CXX \ +export_symbols_cmds_CXX \ +prelink_cmds_CXX; do + case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in + *[\\\\\\\`\\"\\\$]*) + eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" + ;; + *) + eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" + ;; + esac +done + +# Fix-up fallback echo if it was mangled by the above quoting rules. +case \$lt_ECHO in +*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\` + ;; +esac + +ac_aux_dir='$ac_aux_dir' +xsi_shell='$xsi_shell' +lt_shell_append='$lt_shell_append' + +# See if we are running on zsh, and set the options which allow our +# commands through without removal of \ escapes INIT. +if test -n "\${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST +fi + + + PACKAGE='$PACKAGE' + VERSION='$VERSION' + TIMESTAMP='$TIMESTAMP' + RM='$RM' + ofile='$ofile' + + + + + + +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + +# Handling of arguments. +for ac_config_target in $ac_config_targets +do + case $ac_config_target in + "include/mgl/config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/mgl/config.h" ;; + "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; + "texinfo/Makefile") CONFIG_FILES="$CONFIG_FILES texinfo/Makefile" ;; + "texinfo/png/Makefile") CONFIG_FILES="$CONFIG_FILES texinfo/png/Makefile" ;; + "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "mgl/Makefile") CONFIG_FILES="$CONFIG_FILES mgl/Makefile" ;; + "examples/Makefile") CONFIG_FILES="$CONFIG_FILES examples/Makefile" ;; + "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; + "lang/Makefile") CONFIG_FILES="$CONFIG_FILES lang/Makefile" ;; + "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; + "widgets/Makefile") CONFIG_FILES="$CONFIG_FILES widgets/Makefile" ;; + + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; + esac +done + + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files + test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers + test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason against having it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Hook for its removal unless debugging. +# Note that there is a small window in which the directory will not be cleaned: +# after its creation but before its name has been assigned to `$tmp'. +$debug || +{ + tmp= + trap 'exit_status=$? + { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status +' 0 + trap 'as_fn_exit 1' 1 2 13 15 +} +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./conf$$-$RANDOM + (umask 077 && mkdir "$tmp") +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 + +# Set up the scripts for CONFIG_FILES section. +# No need to generate them if there are no CONFIG_FILES. +# This happens for instance with `./config.status config.h'. +if test -n "$CONFIG_FILES"; then + + +ac_cr=`echo X | tr X '\015'` +# On cygwin, bash can eat \r inside `` if the user requested igncr. +# But we know of no other shell where ac_cr would be empty at this +# point, so we can use a bashism as a fallback. +if test "x$ac_cr" = x; then + eval ac_cr=\$\'\\r\' +fi +ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` +if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then + ac_cs_awk_cr='\\r' +else + ac_cs_awk_cr=$ac_cr +fi + +echo 'BEGIN {' >"$tmp/subs1.awk" && +_ACEOF + + +{ + echo "cat >conf$$subs.awk <<_ACEOF" && + echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && + echo "_ACEOF" +} >conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` +ac_delim='%!_!# ' +for ac_last_try in false false false false false :; do + . ./conf$$subs.sh || + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + + ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` + if test $ac_delim_n = $ac_delim_num; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done +rm -f conf$$subs.sh + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +cat >>"\$tmp/subs1.awk" <<\\_ACAWK && +_ACEOF +sed -n ' +h +s/^/S["/; s/!.*/"]=/ +p +g +s/^[^!]*!// +:repl +t repl +s/'"$ac_delim"'$// +t delim +:nl +h +s/\(.\{148\}\)..*/\1/ +t more1 +s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ +p +n +b repl +:more1 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t nl +:delim +h +s/\(.\{148\}\)..*/\1/ +t more2 +s/["\\]/\\&/g; s/^/"/; s/$/"/ +p +b +:more2 +s/["\\]/\\&/g; s/^/"/; s/$/"\\/ +p +g +s/.\{148\}// +t delim +' >$CONFIG_STATUS || ac_write_fail=1 +rm -f conf$$subs.awk +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +_ACAWK +cat >>"\$tmp/subs1.awk" <<_ACAWK && + for (key in S) S_is_set[key] = 1 + FS = "" + +} +{ + line = $ 0 + nfields = split(line, field, "@") + substed = 0 + len = length(field[1]) + for (i = 2; i < nfields; i++) { + key = field[i] + keylen = length(key) + if (S_is_set[key]) { + value = S[key] + line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) + len += length(value) + length(field[++i]) + substed = 1 + } else + len += 1 + keylen + } + + print line +} + +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then + sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" +else + cat +fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 +_ACEOF + +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// +s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// +s/^[^=]*=[ ]*$// +}' +fi + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +fi # test -n "$CONFIG_FILES" + +# Set up the scripts for CONFIG_HEADERS section. +# No need to generate them if there are no CONFIG_HEADERS. +# This happens for instance with `./config.status Makefile'. +if test -n "$CONFIG_HEADERS"; then +cat >"$tmp/defines.awk" <<\_ACAWK || +BEGIN { +_ACEOF + +# Transform confdefs.h into an awk script `defines.awk', embedded as +# here-document in config.status, that substitutes the proper values into +# config.h.in to produce config.h. + +# Create a delimiter string that does not exist in confdefs.h, to ease +# handling of long lines. +ac_delim='%!_!# ' +for ac_last_try in false false :; do + ac_t=`sed -n "/$ac_delim/p" confdefs.h` + if test -z "$ac_t"; then + break + elif $ac_last_try; then + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 + else + ac_delim="$ac_delim!$ac_delim _$ac_delim!! " + fi +done + +# For the awk script, D is an array of macro values keyed by name, +# likewise P contains macro parameters if any. Preserve backslash +# newline sequences. + +ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* +sed -n ' +s/.\{148\}/&'"$ac_delim"'/g +t rset +:rset +s/^[ ]*#[ ]*define[ ][ ]*/ / +t def +d +:def +s/\\$// +t bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3"/p +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p +d +:bsnl +s/["\\]/\\&/g +s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ +D["\1"]=" \3\\\\\\n"\\/p +t cont +s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p +t cont +d +:cont +n +s/.\{148\}/&'"$ac_delim"'/g +t clear +:clear +s/\\$// +t bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/"/p +d +:bsnlc +s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p +b cont +' >$CONFIG_STATUS || ac_write_fail=1 + +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + for (key in D) D_is_set[key] = 1 + FS = "" +} +/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { + line = \$ 0 + split(line, arg, " ") + if (arg[1] == "#") { + defundef = arg[2] + mac1 = arg[3] + } else { + defundef = substr(arg[1], 2) + mac1 = arg[2] + } + split(mac1, mac2, "(") #) + macro = mac2[1] + prefix = substr(line, 1, index(line, defundef) - 1) + if (D_is_set[macro]) { + # Preserve the white space surrounding the "#". + print prefix "define", macro P[macro] D[macro] + next + } else { + # Replace #undef with comments. This is necessary, for example, + # in the case of _POSIX_SOURCE, which is predefined and required + # on some systems where configure will not decide to define it. + if (defundef == "undef") { + print "/*", prefix defundef, macro, "*/" + next + } + } +} +{ print } +_ACAWK +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 +fi # test -n "$CONFIG_HEADERS" + + +eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" +shift +for ac_tag +do + case $ac_tag in + :[FHLC]) ac_mode=$ac_tag; continue;; + esac + case $ac_mode$ac_tag in + :[FHL]*:*);; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; + :[FH]-) ac_tag=-:-;; + :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; + esac + ac_save_IFS=$IFS + IFS=: + set x $ac_tag + IFS=$ac_save_IFS + shift + ac_file=$1 + shift + + case $ac_mode in + :L) ac_source=$1;; + :[FH]) + ac_file_inputs= + for ac_f + do + case $ac_f in + -) ac_f="$tmp/stdin";; + *) # Look for the file first in the build tree, then in the source tree + # (if the path is not absolute). The absolute path cannot be DOS-style, + # because $ac_f cannot contain `:'. + test -f "$ac_f" || + case $ac_f in + [\\/$]*) false;; + *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; + esac || + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; + esac + case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + as_fn_append ac_file_inputs " '$ac_f'" + done + + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + configure_input='Generated from '` + $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + `' by configure.' + if test x"$ac_file" != x-; then + configure_input="$ac_file. $configure_input" + { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +$as_echo "$as_me: creating $ac_file" >&6;} + fi + # Neutralize special characters interpreted by sed in replacement strings. + case $configure_input in #( + *\&* | *\|* | *\\* ) + ac_sed_conf_input=`$as_echo "$configure_input" | + sed 's/[\\\\&|]/\\\\&/g'`;; #( + *) ac_sed_conf_input=$configure_input;; + esac + + case $ac_tag in + *:-:* | *:-) cat >"$tmp/stdin" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; + esac + ;; + esac + + ac_dir=`$as_dirname -- "$ac_file" || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir="$ac_dir"; as_fn_mkdir_p + ac_builddir=. + +case "$ac_dir" in +.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; +*) + ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + # A ".." for each directory in $ac_dir_suffix. + ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + case $ac_top_builddir_sub in + "") ac_top_builddir_sub=. ac_top_build_prefix= ;; + *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; + esac ;; +esac +ac_abs_top_builddir=$ac_pwd +ac_abs_builddir=$ac_pwd$ac_dir_suffix +# for backward compatibility: +ac_top_builddir=$ac_top_build_prefix + +case $srcdir in + .) # We are building in place. + ac_srcdir=. + ac_top_srcdir=$ac_top_builddir_sub + ac_abs_top_srcdir=$ac_pwd ;; + [\\/]* | ?:[\\/]* ) # Absolute name. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir + ac_abs_top_srcdir=$srcdir ;; + *) # Relative name. + ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_build_prefix$srcdir + ac_abs_top_srcdir=$ac_pwd/$srcdir ;; +esac +ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix + + + case $ac_mode in + :F) + # + # CONFIG_FILE + # + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; + esac + ac_MKDIR_P=$MKDIR_P + case $MKDIR_P in + [\\/$]* | ?:[\\/]* ) ;; + */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; + esac +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +# If the template does not know about datarootdir, expand it. +# FIXME: This hack should be removed a few years after 2.60. +ac_datarootdir_hack=; ac_datarootdir_seen= +ac_sed_dataroot=' +/datarootdir/ { + p + q +} +/@datadir@/p +/@docdir@/p +/@infodir@/p +/@localedir@/p +/@mandir@/p' +case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in +*datarootdir*) ac_datarootdir_seen=yes;; +*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 + ac_datarootdir_hack=' + s&@datadir@&$datadir&g + s&@docdir@&$docdir&g + s&@infodir@&$infodir&g + s&@localedir@&$localedir&g + s&@mandir@&$mandir&g + s&\\\${datarootdir}&$datarootdir&g' ;; +esac +_ACEOF + +# Neutralize VPATH when `$srcdir' = `.'. +# Shell code in configure.ac might set extrasub. +# FIXME: do we really want to maintain this feature? +cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_sed_extra="$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s|@configure_input@|$ac_sed_conf_input|;t t +s&@top_builddir@&$ac_top_builddir_sub&;t t +s&@top_build_prefix@&$ac_top_build_prefix&;t t +s&@srcdir@&$ac_srcdir&;t t +s&@abs_srcdir@&$ac_abs_srcdir&;t t +s&@top_srcdir@&$ac_top_srcdir&;t t +s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t +s&@builddir@&$ac_builddir&;t t +s&@abs_builddir@&$ac_abs_builddir&;t t +s&@abs_top_builddir@&$ac_abs_top_builddir&;t t +s&@INSTALL@&$ac_INSTALL&;t t +s&@MKDIR_P@&$ac_MKDIR_P&;t t +$ac_datarootdir_hack +" +eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + +test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && + { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && + { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&5 +$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +which seems to be undefined. Please make sure it is defined" >&2;} + + rm -f "$tmp/stdin" + case $ac_file in + -) cat "$tmp/out" && rm -f "$tmp/out";; + *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; + esac \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + ;; + :H) + # + # CONFIG_HEADER + # + if test x"$ac_file" != x-; then + { + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" + } >"$tmp/config.h" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then + { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +$as_echo "$as_me: $ac_file is unchanged" >&6;} + else + rm -f "$ac_file" + mv "$tmp/config.h" "$ac_file" \ + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 + fi + else + $as_echo "/* $configure_input */" \ + && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ + || as_fn_error $? "could not create -" "$LINENO" 5 + fi +# Compute "$ac_file"'s index in $config_headers. +_am_arg="$ac_file" +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || +$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$_am_arg" : 'X\(//\)[^/]' \| \ + X"$_am_arg" : 'X\(//\)$' \| \ + X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$_am_arg" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'`/stamp-h$_am_stamp_count + ;; + + :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +$as_echo "$as_me: executing $ac_file commands" >&6;} + ;; + esac + + + case $ac_file$ac_mode in + "depfiles":C) test x"$AMDEP_TRUE" != x"" || { + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`$as_dirname -- "$mf" || +$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$mf" : 'X\(//\)[^/]' \| \ + X"$mf" : 'X\(//\)$' \| \ + X"$mf" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$mf" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`$as_dirname -- "$file" || +$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$file" : 'X\(//\)[^/]' \| \ + X"$file" : 'X\(//\)$' \| \ + X"$file" : 'X\(/\)' \| . 2>/dev/null || +$as_echo X"$file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ + s//\1/ + q + } + /^X\(\/\/\)[^/].*/{ + s//\1/ + q + } + /^X\(\/\/\)$/{ + s//\1/ + q + } + /^X\(\/\).*/{ + s//\1/ + q + } + s/.*/./; q'` + as_dir=$dirpart/$fdir; as_fn_mkdir_p + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} + ;; + "libtool":C) + + # See if we are running on zsh, and set the options which allow our + # commands through without removal of \ escapes. + if test -n "${ZSH_VERSION+set}" ; then + setopt NO_GLOB_SUBST + fi + + cfgfile="${ofile}T" + trap "$RM \"$cfgfile\"; exit 1" 1 2 15 + $RM "$cfgfile" + + cat <<_LT_EOF >> "$cfgfile" +#! $SHELL + +# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services. +# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION +# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`: +# NOTE: Changes made to this file will be lost: look at ltmain.sh. +# +# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, +# 2006, 2007, 2008 Free Software Foundation, Inc. +# Written by Gordon Matzigkeit, 1996 +# +# This file is part of GNU Libtool. +# +# GNU Libtool is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License as +# published by the Free Software Foundation; either version 2 of +# the License, or (at your option) any later version. +# +# As a special exception to the GNU General Public License, +# if you distribute this file as part of a program or library that +# is built using GNU Libtool, you may include this file under the +# same distribution terms that you use for the rest of that program. +# +# GNU Libtool is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Libtool; see the file COPYING. If not, a copy +# can be downloaded from http://www.gnu.org/licenses/gpl.html, or +# obtained by writing to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + + +# The names of the tagged configurations supported by this script. +available_tags="CXX " + +# ### BEGIN LIBTOOL CONFIG + +# Assembler program. +AS=$AS + +# DLL creation program. +DLLTOOL=$DLLTOOL + +# Object dumper program. +OBJDUMP=$OBJDUMP + +# Which release of libtool.m4 was used? +macro_version=$macro_version +macro_revision=$macro_revision + +# Whether or not to build shared libraries. +build_libtool_libs=$enable_shared + +# Whether or not to build static libraries. +build_old_libs=$enable_static + +# What type of objects to build. +pic_mode=$pic_mode + +# Whether or not to optimize for fast installation. +fast_install=$enable_fast_install + +# The host system. +host_alias=$host_alias +host=$host +host_os=$host_os + +# The build system. +build_alias=$build_alias +build=$build +build_os=$build_os + +# A sed program that does not truncate output. +SED=$lt_SED + +# Sed that helps us avoid accidentally triggering echo(1) options like -n. +Xsed="\$SED -e 1s/^X//" + +# A grep program that handles long lines. +GREP=$lt_GREP + +# An ERE matcher. +EGREP=$lt_EGREP + +# A literal string matcher. +FGREP=$lt_FGREP + +# A BSD- or MS-compatible name lister. +NM=$lt_NM + +# Whether we need soft or hard links. +LN_S=$lt_LN_S + +# What is the maximum length of a command? +max_cmd_len=$max_cmd_len + +# Object file suffix (normally "o"). +objext=$ac_objext + +# Executable file suffix (normally ""). +exeext=$exeext + +# whether the shell understands "unset". +lt_unset=$lt_unset + +# turn spaces into newlines. +SP2NL=$lt_lt_SP2NL + +# turn newlines into spaces. +NL2SP=$lt_lt_NL2SP + +# How to create reloadable object files. +reload_flag=$lt_reload_flag +reload_cmds=$lt_reload_cmds + +# Method to check whether dependent libraries are shared objects. +deplibs_check_method=$lt_deplibs_check_method + +# Command to use when deplibs_check_method == "file_magic". +file_magic_cmd=$lt_file_magic_cmd + +# The archiver. +AR=$lt_AR +AR_FLAGS=$lt_AR_FLAGS + +# A symbol stripping program. +STRIP=$lt_STRIP + +# Commands used to install an old-style archive. +RANLIB=$lt_RANLIB +old_postinstall_cmds=$lt_old_postinstall_cmds +old_postuninstall_cmds=$lt_old_postuninstall_cmds + +# A C compiler. +LTCC=$lt_CC + +# LTCC compiler flags. +LTCFLAGS=$lt_CFLAGS + +# Take the output of nm and produce a listing of raw symbols and C names. +global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe + +# Transform the output of nm in a proper C declaration. +global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl + +# Transform the output of nm in a C name address pair. +global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address + +# Transform the output of nm in a C name address pair when lib prefix is needed. +global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix + +# The name of the directory that contains temporary libtool files. +objdir=$objdir + +# Shell to use when invoking shell scripts. +SHELL=$lt_SHELL + +# An echo program that does not interpret backslashes. +ECHO=$lt_ECHO + +# Used to examine libraries when file_magic_cmd begins with "file". +MAGIC_CMD=$MAGIC_CMD + +# Must we lock files when doing compilation? +need_locks=$lt_need_locks + +# Tool to manipulate archived DWARF debug symbol files on Mac OS X. +DSYMUTIL=$lt_DSYMUTIL + +# Tool to change global to local symbols on Mac OS X. +NMEDIT=$lt_NMEDIT + +# Tool to manipulate fat objects and archives on Mac OS X. +LIPO=$lt_LIPO + +# ldd/readelf like tool for Mach-O binaries on Mac OS X. +OTOOL=$lt_OTOOL + +# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. +OTOOL64=$lt_OTOOL64 + +# Old archive suffix (normally "a"). +libext=$libext + +# Shared library suffix (normally ".so"). +shrext_cmds=$lt_shrext_cmds + +# The commands to extract the exported symbol list from a shared archive. +extract_expsyms_cmds=$lt_extract_expsyms_cmds + +# Variables whose values should be saved in libtool wrapper scripts and +# restored at link time. +variables_saved_for_relink=$lt_variables_saved_for_relink + +# Do we need the "lib" prefix for modules? +need_lib_prefix=$need_lib_prefix + +# Do we need a version for libraries? +need_version=$need_version + +# Library versioning type. +version_type=$version_type + +# Shared library runtime path variable. +runpath_var=$runpath_var + +# Shared library path variable. +shlibpath_var=$shlibpath_var + +# Is shlibpath searched before the hard-coded library search path? +shlibpath_overrides_runpath=$shlibpath_overrides_runpath + +# Format of library name prefix. +libname_spec=$lt_libname_spec + +# List of archive names. First name is the real one, the rest are links. +# The last name is the one that the linker finds with -lNAME +library_names_spec=$lt_library_names_spec + +# The coded name of the library, if different from the real name. +soname_spec=$lt_soname_spec + +# Command to use after installation of a shared archive. +postinstall_cmds=$lt_postinstall_cmds + +# Command to use after uninstallation of a shared archive. +postuninstall_cmds=$lt_postuninstall_cmds + +# Commands used to finish a libtool library installation in a directory. +finish_cmds=$lt_finish_cmds + +# As "finish_cmds", except a single script fragment to be evaled but +# not shown. +finish_eval=$lt_finish_eval + +# Whether we should hardcode library paths into libraries. +hardcode_into_libs=$hardcode_into_libs + +# Compile-time system search path for libraries. +sys_lib_search_path_spec=$lt_sys_lib_search_path_spec + +# Run-time system search path for libraries. +sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec + +# Whether dlopen is supported. +dlopen_support=$enable_dlopen + +# Whether dlopen of programs is supported. +dlopen_self=$enable_dlopen_self + +# Whether dlopen of statically linked programs is supported. +dlopen_self_static=$enable_dlopen_self_static + +# Commands to strip libraries. +old_striplib=$lt_old_striplib +striplib=$lt_striplib + + +# The linker used to build libraries. +LD=$lt_LD + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds + +# A language specific compiler. +CC=$lt_compiler + +# Is the compiler the GNU compiler? +with_gcc=$GCC + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds +archive_expsym_cmds=$lt_archive_expsym_cmds + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds +module_expsym_cmds=$lt_module_expsym_cmds + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects +postdep_objects=$lt_postdep_objects +predeps=$lt_predeps +postdeps=$lt_postdeps + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path + +# ### END LIBTOOL CONFIG + +_LT_EOF + + case $host_os in + aix3*) + cat <<\_LT_EOF >> "$cfgfile" +# AIX sometimes has problems with the GCC collect2 program. For some +# reason, if we set the COLLECT_NAMES environment variable, the problems +# vanish in a puff of smoke. +if test "X${COLLECT_NAMES+set}" != Xset; then + COLLECT_NAMES= + export COLLECT_NAMES +fi +_LT_EOF + ;; + esac + + +ltmain="$ac_aux_dir/ltmain.sh" + + + # We use sed instead of cat because bash on DJGPP gets confused if + # if finds mixed CR/LF and LF-only lines. Since sed operates in + # text mode, it properly converts lines to CR/LF. This bash problem + # is reportedly fixed, but why not run on old versions too? + sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + case $xsi_shell in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac +} + +# func_basename file +func_basename () +{ + func_basename_result="${1##*/}" +} + +# func_dirname_and_basename file append nondir_replacement +# perform func_basename and func_dirname in a single function +# call: +# dirname: Compute the dirname of FILE. If nonempty, +# add APPEND to the result, otherwise set result +# to NONDIR_REPLACEMENT. +# value returned in "$func_dirname_result" +# basename: Compute filename of FILE. +# value retuned in "$func_basename_result" +# Implementation must be kept synchronized with func_dirname +# and func_basename. For efficiency, we do not delegate to +# those functions but instead duplicate the functionality here. +func_dirname_and_basename () +{ + case ${1} in + */*) func_dirname_result="${1%/*}${2}" ;; + * ) func_dirname_result="${3}" ;; + esac + func_basename_result="${1##*/}" +} + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +func_stripname () +{ + # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are + # positional parameters, so assign one to ordinary parameter first. + func_stripname_result=${3} + func_stripname_result=${func_stripname_result#"${1}"} + func_stripname_result=${func_stripname_result%"${2}"} +} + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=${1%%=*} + func_opt_split_arg=${1#*=} +} + +# func_lo2o object +func_lo2o () +{ + case ${1} in + *.lo) func_lo2o_result=${1%.lo}.${objext} ;; + *) func_lo2o_result=${1} ;; + esac +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=${1%.*}.lo +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=$(( $* )) +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=${#1} +} + +_LT_EOF + ;; + *) # Bourne compatible functions. + cat << \_LT_EOF >> "$cfgfile" + +# func_dirname file append nondir_replacement +# Compute the dirname of FILE. If nonempty, add APPEND to the result, +# otherwise set result to NONDIR_REPLACEMENT. +func_dirname () +{ + # Extract subdirectory from the argument. + func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"` + if test "X$func_dirname_result" = "X${1}"; then + func_dirname_result="${3}" + else + func_dirname_result="$func_dirname_result${2}" + fi +} + +# func_basename file +func_basename () +{ + func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"` +} + + +# func_stripname prefix suffix name +# strip PREFIX and SUFFIX off of NAME. +# PREFIX and SUFFIX must not contain globbing or regex special +# characters, hashes, percent signs, but SUFFIX may contain a leading +# dot (in which case that matches only a dot). +# func_strip_suffix prefix name +func_stripname () +{ + case ${2} in + .*) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;; + *) func_stripname_result=`$ECHO "X${3}" \ + | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;; + esac +} + +# sed scripts: +my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q' +my_sed_long_arg='1s/^-[^=]*=//' + +# func_opt_split +func_opt_split () +{ + func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"` + func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"` +} + +# func_lo2o object +func_lo2o () +{ + func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"` +} + +# func_xform libobj-or-source +func_xform () +{ + func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'` +} + +# func_arith arithmetic-term... +func_arith () +{ + func_arith_result=`expr "$@"` +} + +# func_len string +# STRING may not start with a hyphen. +func_len () +{ + func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` +} + +_LT_EOF +esac + +case $lt_shell_append in + yes) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1+=\$2" +} +_LT_EOF + ;; + *) + cat << \_LT_EOF >> "$cfgfile" + +# func_append var value +# Append VALUE to the end of shell variable VAR. +func_append () +{ + eval "$1=\$$1\$2" +} + +_LT_EOF + ;; + esac + + + sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \ + || (rm -f "$cfgfile"; exit 1) + + mv -f "$cfgfile" "$ofile" || + (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") + chmod +x "$ofile" + + + cat <<_LT_EOF >> "$ofile" + +# ### BEGIN LIBTOOL TAG CONFIG: CXX + +# The linker used to build libraries. +LD=$lt_LD_CXX + +# Commands used to build an old-style archive. +old_archive_cmds=$lt_old_archive_cmds_CXX + +# A language specific compiler. +CC=$lt_compiler_CXX + +# Is the compiler the GNU compiler? +with_gcc=$GCC_CXX + +# Compiler flag to turn off builtin functions. +no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag_CXX + +# How to pass a linker flag through the compiler. +wl=$lt_lt_prog_compiler_wl_CXX + +# Additional compiler flags for building library objects. +pic_flag=$lt_lt_prog_compiler_pic_CXX + +# Compiler flag to prevent dynamic linking. +link_static_flag=$lt_lt_prog_compiler_static_CXX + +# Does compiler simultaneously support -c and -o options? +compiler_c_o=$lt_lt_cv_prog_compiler_c_o_CXX + +# Whether or not to add -lc for building shared libraries. +build_libtool_need_lc=$archive_cmds_need_lc_CXX + +# Whether or not to disallow shared libs when runtime libs are static. +allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes_CXX + +# Compiler flag to allow reflexive dlopens. +export_dynamic_flag_spec=$lt_export_dynamic_flag_spec_CXX + +# Compiler flag to generate shared objects directly from archives. +whole_archive_flag_spec=$lt_whole_archive_flag_spec_CXX + +# Whether the compiler copes with passing no objects directly. +compiler_needs_object=$lt_compiler_needs_object_CXX + +# Create an old-style archive from a shared archive. +old_archive_from_new_cmds=$lt_old_archive_from_new_cmds_CXX + +# Create a temporary old-style archive to link instead of a shared archive. +old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds_CXX + +# Commands used to build a shared archive. +archive_cmds=$lt_archive_cmds_CXX +archive_expsym_cmds=$lt_archive_expsym_cmds_CXX + +# Commands used to build a loadable module if different from building +# a shared archive. +module_cmds=$lt_module_cmds_CXX +module_expsym_cmds=$lt_module_expsym_cmds_CXX + +# Whether we are building with GNU ld or not. +with_gnu_ld=$lt_with_gnu_ld_CXX + +# Flag that allows shared libraries with undefined symbols to be built. +allow_undefined_flag=$lt_allow_undefined_flag_CXX + +# Flag that enforces no undefined symbols. +no_undefined_flag=$lt_no_undefined_flag_CXX + +# Flag to hardcode \$libdir into a binary during linking. +# This must work even if \$libdir does not exist +hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec_CXX + +# If ld is used when linking, flag to hardcode \$libdir into a binary +# during linking. This must work even if \$libdir does not exist. +hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld_CXX + +# Whether we need a single "-rpath" flag with a separated argument. +hardcode_libdir_separator=$lt_hardcode_libdir_separator_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary. +hardcode_direct=$hardcode_direct_CXX + +# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes +# DIR into the resulting binary and the resulting library dependency is +# "absolute",i.e impossible to change by setting \${shlibpath_var} if the +# library is relocated. +hardcode_direct_absolute=$hardcode_direct_absolute_CXX + +# Set to "yes" if using the -LDIR flag during linking hardcodes DIR +# into the resulting binary. +hardcode_minus_L=$hardcode_minus_L_CXX + +# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR +# into the resulting binary. +hardcode_shlibpath_var=$hardcode_shlibpath_var_CXX + +# Set to "yes" if building a shared library automatically hardcodes DIR +# into the library and all subsequent libraries and executables linked +# against it. +hardcode_automatic=$hardcode_automatic_CXX + +# Set to yes if linker adds runtime paths of dependent libraries +# to runtime path list. +inherit_rpath=$inherit_rpath_CXX + +# Whether libtool must link a program against all its dependency libraries. +link_all_deplibs=$link_all_deplibs_CXX + +# Fix the shell variable \$srcfile for the compiler. +fix_srcfile_path=$lt_fix_srcfile_path_CXX + +# Set to "yes" if exported symbols are required. +always_export_symbols=$always_export_symbols_CXX + +# The commands to list exported symbols. +export_symbols_cmds=$lt_export_symbols_cmds_CXX + +# Symbols that should not be listed in the preloaded symbols. +exclude_expsyms=$lt_exclude_expsyms_CXX + +# Symbols that must always be exported. +include_expsyms=$lt_include_expsyms_CXX + +# Commands necessary for linking programs (against libraries) with templates. +prelink_cmds=$lt_prelink_cmds_CXX + +# Specify filename containing input files. +file_list_spec=$lt_file_list_spec_CXX + +# How to hardcode a shared library path into an executable. +hardcode_action=$hardcode_action_CXX + +# The directories searched by this compiler when creating a shared library. +compiler_lib_search_dirs=$lt_compiler_lib_search_dirs_CXX + +# Dependencies to place before and after the objects being linked to +# create a shared library. +predep_objects=$lt_predep_objects_CXX +postdep_objects=$lt_postdep_objects_CXX +predeps=$lt_predeps_CXX +postdeps=$lt_postdeps_CXX + +# The library search path used internally by the compiler when linking +# a shared library. +compiler_lib_search_path=$lt_compiler_lib_search_path_CXX + +# ### END LIBTOOL TAG CONFIG: CXX +_LT_EOF + + ;; + + esac +done # for ac_tag + + +as_fn_exit 0 +_ACEOF +ac_clean_files=$ac_clean_files_save + +test $ac_write_fail = 0 || + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || as_fn_exit 1 +fi +if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then + { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} +fi + + diff --git a/autom4te.cache/requests b/autom4te.cache/requests new file mode 100644 index 0000000..25a790d --- /dev/null +++ b/autom4te.cache/requests @@ -0,0 +1,279 @@ +# This file was generated by Autom4te Thu Aug 5 21:29:16 UTC 2010. +# It contains the lists of macros which have been traced. +# It can be safely removed. + +@request = ( + bless( [ + '0', + 1, + [ + '/usr/share/autoconf' + ], + [ + '/usr/share/autoconf/autoconf/autoconf.m4f', + '/usr/share/aclocal/argz.m4', + '/usr/share/aclocal/libtool.m4', + '/usr/share/aclocal/ltdl.m4', + '/usr/share/aclocal/ltoptions.m4', + '/usr/share/aclocal/ltsugar.m4', + '/usr/share/aclocal/ltversion.m4', + '/usr/share/aclocal/lt~obsolete.m4', + '/usr/share/aclocal-1.11/amversion.m4', + '/usr/share/aclocal-1.11/auxdir.m4', + '/usr/share/aclocal-1.11/cond.m4', + '/usr/share/aclocal-1.11/depend.m4', + '/usr/share/aclocal-1.11/depout.m4', + '/usr/share/aclocal-1.11/init.m4', + '/usr/share/aclocal-1.11/install-sh.m4', + '/usr/share/aclocal-1.11/lead-dot.m4', + '/usr/share/aclocal-1.11/make.m4', + '/usr/share/aclocal-1.11/missing.m4', + '/usr/share/aclocal-1.11/mkdirp.m4', + '/usr/share/aclocal-1.11/options.m4', + '/usr/share/aclocal-1.11/python.m4', + '/usr/share/aclocal-1.11/runlog.m4', + '/usr/share/aclocal-1.11/sanity.m4', + '/usr/share/aclocal-1.11/silent.m4', + '/usr/share/aclocal-1.11/strip.m4', + '/usr/share/aclocal-1.11/substnot.m4', + '/usr/share/aclocal-1.11/tar.m4', + 'config/autotroll.m4', + 'configure.ac' + ], + { + 'AM_ENABLE_STATIC' => 1, + 'AC_LIBTOOL_LANG_RC_CONFIG' => 1, + '_LT_AC_SHELL_INIT' => 1, + 'AC_DEFUN' => 1, + '_LT_AC_LANG_CXX_CONFIG' => 1, + 'AC_PROG_LIBTOOL' => 1, + 'AM_PROG_MKDIR_P' => 1, + 'AM_PYTHON_CHECK_VERSION' => 1, + 'AM_AUTOMAKE_VERSION' => 1, + 'AM_SUBST_NOTMAKE' => 1, + 'AM_MISSING_PROG' => 1, + 'AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH' => 1, + '_LT_AC_LANG_C_CONFIG' => 1, + 'AM_PROG_INSTALL_STRIP' => 1, + '_m4_warn' => 1, + 'AC_LIBTOOL_OBJDIR' => 1, + 'gl_FUNC_ARGZ' => 1, + 'AM_SANITY_CHECK' => 1, + 'LTOBSOLETE_VERSION' => 1, + 'AC_LIBTOOL_LANG_GCJ_CONFIG' => 1, + 'AC_LIBTOOL_PROG_COMPILER_PIC' => 1, + 'LT_LIB_M' => 1, + '_LT_AC_CHECK_DLFCN' => 1, + 'AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE' => 1, + 'LTSUGAR_VERSION' => 1, + '_LT_PROG_LTMAIN' => 1, + 'LT_SYS_SYMBOL_USCORE' => 1, + '_AM_PROG_TAR' => 1, + 'AC_LIBTOOL_GCJ' => 1, + 'LT_SYS_DLOPEN_DEPLIBS' => 1, + 'LT_FUNC_DLSYM_USCORE' => 1, + 'AC_LIBTOOL_CONFIG' => 1, + '_LT_AC_LANG_F77' => 1, + '_AM_SUBST_NOTMAKE' => 1, + 'AC_LTDL_DLLIB' => 1, + '_AM_AUTOCONF_VERSION' => 1, + 'AM_DISABLE_SHARED' => 1, + '_LTDL_SETUP' => 1, + '_LT_AC_LANG_CXX' => 1, + 'AM_PROG_LIBTOOL' => 1, + 'AC_LIB_LTDL' => 1, + '_LT_AC_FILE_LTDLL_C' => 1, + 'AM_PROG_LD' => 1, + 'AU_DEFUN' => 1, + 'AC_PROG_NM' => 1, + 'AC_LIBTOOL_DLOPEN' => 1, + 'AC_PROG_LD' => 1, + 'AC_ENABLE_FAST_INSTALL' => 1, + 'AC_PROG_LD_GNU' => 1, + 'AC_LIBTOOL_FC' => 1, + 'LTDL_CONVENIENCE' => 1, + '_AM_SET_OPTION' => 1, + 'AC_LTDL_PREOPEN' => 1, + '_LT_LINKER_BOILERPLATE' => 1, + 'AC_LIBTOOL_LANG_CXX_CONFIG' => 1, + 'AC_LIBTOOL_PROG_CC_C_O' => 1, + 'gl_PREREQ_ARGZ' => 1, + 'LT_SUPPORTED_TAG' => 1, + 'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, + 'LT_PROG_RC' => 1, + 'LT_SYS_MODULE_EXT' => 1, + 'AC_DEFUN_ONCE' => 1, + 'AT_WITH_QT' => 1, + '_LT_AC_LANG_GCJ' => 1, + 'AC_LTDL_OBJDIR' => 1, + '_LT_PATH_TOOL_PREFIX' => 1, + 'AC_LIBTOOL_RC' => 1, + 'AM_SILENT_RULES' => 1, + '_LT_AC_PROG_ECHO_BACKSLASH' => 1, + 'AC_DISABLE_FAST_INSTALL' => 1, + 'AT_REQUIRE_QT_VERSION' => 1, + '_LT_AC_SYS_LIBPATH_AIX' => 1, + '_LT_AC_TRY_DLOPEN_SELF' => 1, + 'include' => 1, + 'LT_AC_PROG_SED' => 1, + 'AM_ENABLE_SHARED' => 1, + 'LTDL_INSTALLABLE' => 1, + '_LT_AC_LANG_GCJ_CONFIG' => 1, + 'AC_ENABLE_SHARED' => 1, + 'AC_LIBTOOL_SYS_HARD_LINK_LOCKS' => 1, + 'AC_ENABLE_STATIC' => 1, + '_LT_AC_TAGVAR' => 1, + 'AC_LIBTOOL_LANG_F77_CONFIG' => 1, + 'AM_CONDITIONAL' => 1, + 'LT_LIB_DLLOAD' => 1, + '_AT_TWEAK_PRO_FILE' => 1, + 'LTVERSION_VERSION' => 1, + 'LTDL_INIT' => 1, + 'AM_PROG_INSTALL_SH' => 1, + 'm4_include' => 1, + 'AC_PROG_EGREP' => 1, + '_AC_AM_CONFIG_HEADER_HOOK' => 1, + 'AC_PATH_MAGIC' => 1, + 'AM_PATH_PYTHON' => 1, + 'AC_LTDL_SYSSEARCHPATH' => 1, + 'AM_MAKE_INCLUDE' => 1, + '_LT_AC_TAGCONFIG' => 1, + 'LT_CMD_MAX_LEN' => 1, + 'm4_pattern_forbid' => 1, + '_LT_LINKER_OPTION' => 1, + 'AC_LIBTOOL_COMPILER_OPTION' => 1, + 'AC_DISABLE_SHARED' => 1, + '_LT_COMPILER_BOILERPLATE' => 1, + 'AC_LIBTOOL_WIN32_DLL' => 1, + 'AC_LIBTOOL_SETUP' => 1, + 'AC_PROG_LD_RELOAD_FLAG' => 1, + 'AC_LTDL_DLSYM_USCORE' => 1, + 'AM_MISSING_HAS_RUN' => 1, + 'LT_LANG' => 1, + 'LT_SYS_DLSEARCH_PATH' => 1, + 'LT_CONFIG_LTDL_DIR' => 1, + 'AC_LIBTOOL_DLOPEN_SELF' => 1, + 'LT_OUTPUT' => 1, + 'AC_LIBTOOL_PROG_LD_SHLIBS' => 1, + 'AC_WITH_LTDL' => 1, + 'AC_LIBTOOL_LINKER_OPTION' => 1, + 'LT_AC_PROG_RC' => 1, + 'AC_LIBTOOL_CXX' => 1, + 'LT_INIT' => 1, + 'LT_AC_PROG_GCJ' => 1, + 'LT_SYS_DLOPEN_SELF' => 1, + 'AM_DISABLE_STATIC' => 1, + 'AM_DEP_TRACK' => 1, + '_AC_PROG_LIBTOOL' => 1, + '_AM_IF_OPTION' => 1, + 'AC_PATH_TOOL_PREFIX' => 1, + 'm4_pattern_allow' => 1, + 'AC_LIBTOOL_F77' => 1, + 'AM_SET_LEADING_DOT' => 1, + 'LT_AC_PROG_EGREP' => 1, + '_AM_DEPENDENCIES' => 1, + 'AC_LIBTOOL_LANG_C_CONFIG' => 1, + 'LTOPTIONS_VERSION' => 1, + '_LT_AC_SYS_COMPILER' => 1, + 'AM_PROG_NM' => 1, + 'AC_LIBLTDL_CONVENIENCE' => 1, + 'AC_DEPLIBS_CHECK_METHOD' => 1, + 'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1, + 'AC_LIBLTDL_INSTALLABLE' => 1, + 'AC_LTDL_ENABLE_INSTALL' => 1, + 'LT_PROG_GCJ' => 1, + 'AC_LIBTOOL_SYS_DYNAMIC_LINKER' => 1, + 'AM_INIT_AUTOMAKE' => 1, + 'AC_DISABLE_STATIC' => 1, + 'LT_PATH_NM' => 1, + 'AC_LTDL_SHLIBEXT' => 1, + '_LT_AC_LOCK' => 1, + '_LT_AC_LANG_RC_CONFIG' => 1, + 'LT_SYS_MODULE_PATH' => 1, + 'AC_LIBTOOL_POSTDEP_PREDEP' => 1, + 'LT_WITH_LTDL' => 1, + 'AC_LTDL_SHLIBPATH' => 1, + 'AM_AUX_DIR_EXPAND' => 1, + '_LT_AC_LANG_F77_CONFIG' => 1, + 'AC_LIBTOOL_PROG_COMPILER_NO_RTTI' => 1, + '_AM_SET_OPTIONS' => 1, + '_LT_COMPILER_OPTION' => 1, + '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1, + 'AM_RUN_LOG' => 1, + 'AC_LIBTOOL_SYS_OLD_ARCHIVE' => 1, + 'AC_LTDL_SYS_DLOPEN_DEPLIBS' => 1, + 'AC_LIBTOOL_PICMODE' => 1, + 'LT_PATH_LD' => 1, + 'AC_CHECK_LIBM' => 1, + 'AC_LIBTOOL_SYS_LIB_STRIP' => 1, + '_AM_MANGLE_OPTION' => 1, + 'AC_LTDL_SYMBOL_USCORE' => 1, + 'AC_LIBTOOL_SYS_MAX_CMD_LEN' => 1, + 'AM_SET_DEPDIR' => 1, + '_LT_CC_BASENAME' => 1, + '_LT_LIBOBJ' => 1 + } + ], 'Autom4te::Request' ), + bless( [ + '1', + 1, + [ + '/usr/share/autoconf' + ], + [ + '/usr/share/autoconf/autoconf/autoconf.m4f', + 'aclocal.m4', + 'configure.ac' + ], + { + '_LT_AC_TAGCONFIG' => 1, + 'AM_PROG_F77_C_O' => 1, + 'AC_INIT' => 1, + 'm4_pattern_forbid' => 1, + '_AM_COND_IF' => 1, + 'AC_CANONICAL_TARGET' => 1, + 'AC_SUBST' => 1, + 'AC_CONFIG_LIBOBJ_DIR' => 1, + 'AC_FC_SRCEXT' => 1, + 'AC_CANONICAL_HOST' => 1, + 'AC_PROG_LIBTOOL' => 1, + 'AM_INIT_AUTOMAKE' => 1, + 'AC_CONFIG_SUBDIRS' => 1, + 'AM_AUTOMAKE_VERSION' => 1, + 'LT_CONFIG_LTDL_DIR' => 1, + 'AC_REQUIRE_AUX_FILE' => 1, + 'AC_CONFIG_LINKS' => 1, + 'm4_sinclude' => 1, + 'LT_SUPPORTED_TAG' => 1, + 'AM_MAINTAINER_MODE' => 1, + 'AM_GNU_GETTEXT_INTL_SUBDIR' => 1, + '_m4_warn' => 1, + 'AM_PROG_CXX_C_O' => 1, + '_AM_COND_ENDIF' => 1, + 'AM_ENABLE_MULTILIB' => 1, + 'AM_SILENT_RULES' => 1, + 'AC_CONFIG_FILES' => 1, + 'include' => 1, + 'LT_INIT' => 1, + 'AM_GNU_GETTEXT' => 1, + 'AC_LIBSOURCE' => 1, + 'AM_PROG_FC_C_O' => 1, + 'AC_CANONICAL_BUILD' => 1, + 'AC_FC_FREEFORM' => 1, + 'AH_OUTPUT' => 1, + '_AM_SUBST_NOTMAKE' => 1, + 'AC_CONFIG_AUX_DIR' => 1, + 'sinclude' => 1, + 'AM_PROG_CC_C_O' => 1, + 'm4_pattern_allow' => 1, + 'AC_CANONICAL_SYSTEM' => 1, + 'AM_CONDITIONAL' => 1, + 'AC_CONFIG_HEADERS' => 1, + 'AC_DEFINE_TRACE_LITERAL' => 1, + 'm4_include' => 1, + '_AM_COND_ELSE' => 1, + 'AC_SUBST_TRACE' => 1 + } + ], 'Autom4te::Request' ) + ); + diff --git a/autom4te.cache/traces.0 b/autom4te.cache/traces.0 new file mode 100644 index 0000000..97477af --- /dev/null +++ b/autom4te.cache/traces.0 @@ -0,0 +1,3006 @@ +m4trace:/usr/share/aclocal/argz.m4:12: -1- AC_DEFUN([gl_FUNC_ARGZ], [gl_PREREQ_ARGZ + +AC_CHECK_HEADERS([argz.h], [], [], [AC_INCLUDES_DEFAULT]) + +AC_CHECK_TYPES([error_t], + [], + [AC_DEFINE([error_t], [int], + [Define to a type to use for `error_t' if it is not otherwise available.]) + AC_DEFINE([__error_t_defined], [1], [Define so that glibc/gnulib argp.h + does not typedef error_t.])], + [#if defined(HAVE_ARGZ_H) +# include +#endif]) + +ARGZ_H= +AC_CHECK_FUNCS([argz_add argz_append argz_count argz_create_sep argz_insert \ + argz_next argz_stringify], [], [ARGZ_H=argz.h; AC_LIBOBJ([argz])]) + +dnl if have system argz functions, allow forced use of +dnl libltdl-supplied implementation (and default to do so +dnl on "known bad" systems). Could use a runtime check, but +dnl (a) detecting malloc issues is notoriously unreliable +dnl (b) only known system that declares argz functions, +dnl provides them, yet they are broken, is cygwin +dnl releases prior to 16-Mar-2007 (1.5.24 and earlier) +dnl So, it's more straightforward simply to special case +dnl this for known bad systems. +AS_IF([test -z "$ARGZ_H"], + [AC_CACHE_CHECK( + [if argz actually works], + [lt_cv_sys_argz_works], + [[case $host_os in #( + *cygwin*) + lt_cv_sys_argz_works=no + if test "$cross_compiling" != no; then + lt_cv_sys_argz_works="guessing no" + else + lt_sed_extract_leading_digits='s/^\([0-9\.]*\).*/\1/' + save_IFS=$IFS + IFS=-. + set x `uname -r | sed -e "$lt_sed_extract_leading_digits"` + IFS=$save_IFS + lt_os_major=${2-0} + lt_os_minor=${3-0} + lt_os_micro=${4-0} + if test "$lt_os_major" -gt 1 \ + || { test "$lt_os_major" -eq 1 \ + && { test "$lt_os_minor" -gt 5 \ + || { test "$lt_os_minor" -eq 5 \ + && test "$lt_os_micro" -gt 24; }; }; }; then + lt_cv_sys_argz_works=yes + fi + fi + ;; #( + *) lt_cv_sys_argz_works=yes ;; + esac]]) + AS_IF([test $lt_cv_sys_argz_works = yes], + [AC_DEFINE([HAVE_WORKING_ARGZ], 1, + [This value is set to 1 to indicate that the system argz facility works])], + [ARGZ_H=argz.h + AC_LIBOBJ([argz])])]) + +AC_SUBST([ARGZ_H]) +]) +m4trace:/usr/share/aclocal/argz.m4:79: -1- AC_DEFUN([gl_PREREQ_ARGZ], [:]) +m4trace:/usr/share/aclocal/libtool.m4:67: -1- AC_DEFUN([LT_INIT], [AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT +AC_BEFORE([$0], [LT_LANG])dnl +AC_BEFORE([$0], [LT_OUTPUT])dnl +AC_BEFORE([$0], [LTDL_INIT])dnl +m4_require([_LT_CHECK_BUILDDIR])dnl + +dnl Autoconf doesn't catch unexpanded LT_ macros by default: +m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl +m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl +dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 +dnl unless we require an AC_DEFUNed macro: +AC_REQUIRE([LTOPTIONS_VERSION])dnl +AC_REQUIRE([LTSUGAR_VERSION])dnl +AC_REQUIRE([LTVERSION_VERSION])dnl +AC_REQUIRE([LTOBSOLETE_VERSION])dnl +m4_require([_LT_PROG_LTMAIN])dnl + +dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +# This can be used to rebuild libtool when needed +LIBTOOL_DEPS="$ltmain" + +# Always use our own libtool. +LIBTOOL='$(SHELL) $(top_builddir)/libtool' +AC_SUBST(LIBTOOL)dnl + +_LT_SETUP + +# Only expand once: +m4_define([LT_INIT]) +]) +m4trace:/usr/share/aclocal/libtool.m4:102: -1- AU_DEFUN([AC_PROG_LIBTOOL], [m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:102: -1- AC_DEFUN([AC_PROG_LIBTOOL], [AC_DIAGNOSE([obsolete], [The macro `AC_PROG_LIBTOOL' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:103: -1- AU_DEFUN([AM_PROG_LIBTOOL], [m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:103: -1- AC_DEFUN([AM_PROG_LIBTOOL], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_LIBTOOL' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_INIT], [LT_INIT($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:562: -1- AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} +AC_MSG_NOTICE([creating $CONFIG_LT]) +cat >"$CONFIG_LT" <<_LTEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate a libtool stub with the current configuration. + +lt_cl_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AS_SHELL_SANITIZE +_AS_PREPARE + +exec AS_MESSAGE_FD>&1 +exec AS_MESSAGE_LOG_FD>>config.log +{ + echo + AS_BOX([Running $as_me.]) +} >&AS_MESSAGE_LOG_FD + +lt_cl_help="\ +\`$as_me' creates a local libtool stub from the current configuration, +for use in further configure time tests before the real libtool is +generated. + +Usage: $[0] [[OPTIONS]] + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + +Report bugs to ." + +lt_cl_version="\ +m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl +m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) +configured by $[0], generated by m4_PACKAGE_STRING. + +Copyright (C) 2008 Free Software Foundation, Inc. +This config.lt script is free software; the Free Software Foundation +gives unlimited permision to copy, distribute and modify it." + +while test $[#] != 0 +do + case $[1] in + --version | --v* | -V ) + echo "$lt_cl_version"; exit 0 ;; + --help | --h* | -h ) + echo "$lt_cl_help"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --quiet | --q* | --silent | --s* | -q ) + lt_cl_silent=: ;; + + -*) AC_MSG_ERROR([unrecognized option: $[1] +Try \`$[0] --help' for more information.]) ;; + + *) AC_MSG_ERROR([unrecognized argument: $[1] +Try \`$[0] --help' for more information.]) ;; + esac + shift +done + +if $lt_cl_silent; then + exec AS_MESSAGE_FD>/dev/null +fi +_LTEOF + +cat >>"$CONFIG_LT" <<_LTEOF +_LT_OUTPUT_LIBTOOL_COMMANDS_INIT +_LTEOF + +cat >>"$CONFIG_LT" <<\_LTEOF +AC_MSG_NOTICE([creating $ofile]) +_LT_OUTPUT_LIBTOOL_COMMANDS +AS_EXIT(0) +_LTEOF +chmod +x "$CONFIG_LT" + +# configure is writing to config.log, but config.lt does its own redirection, +# appending to config.log, which fails on DOS, as config.log is still kept +# open by configure. Here we exec the FD to /dev/null, effectively closing +# config.log, so it can be properly (re)opened and appended to by config.lt. +if test "$no_create" != yes; then + lt_cl_success=: + test "$silent" = yes && + lt_config_lt_args="$lt_config_lt_args --quiet" + exec AS_MESSAGE_LOG_FD>/dev/null + $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false + exec AS_MESSAGE_LOG_FD>>config.log + $lt_cl_success || AS_EXIT(1) +fi +]) +m4trace:/usr/share/aclocal/libtool.m4:757: -1- AC_DEFUN([LT_SUPPORTED_TAG], []) +m4trace:/usr/share/aclocal/libtool.m4:768: -1- AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl +m4_case([$1], + [C], [_LT_LANG(C)], + [C++], [_LT_LANG(CXX)], + [Java], [_LT_LANG(GCJ)], + [Fortran 77], [_LT_LANG(F77)], + [Fortran], [_LT_LANG(FC)], + [Windows Resource], [_LT_LANG(RC)], + [m4_ifdef([_LT_LANG_]$1[_CONFIG], + [_LT_LANG($1)], + [m4_fatal([$0: unsupported language: "$1"])])])dnl +]) +m4trace:/usr/share/aclocal/libtool.m4:830: -1- AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) +m4trace:/usr/share/aclocal/libtool.m4:830: -1- AC_DEFUN([AC_LIBTOOL_CXX], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_CXX' is obsolete. +You should run autoupdate.])dnl +LT_LANG(C++)]) +m4trace:/usr/share/aclocal/libtool.m4:831: -1- AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) +m4trace:/usr/share/aclocal/libtool.m4:831: -1- AC_DEFUN([AC_LIBTOOL_F77], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_F77' is obsolete. +You should run autoupdate.])dnl +LT_LANG(Fortran 77)]) +m4trace:/usr/share/aclocal/libtool.m4:832: -1- AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) +m4trace:/usr/share/aclocal/libtool.m4:832: -1- AC_DEFUN([AC_LIBTOOL_FC], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_FC' is obsolete. +You should run autoupdate.])dnl +LT_LANG(Fortran)]) +m4trace:/usr/share/aclocal/libtool.m4:833: -1- AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) +m4trace:/usr/share/aclocal/libtool.m4:833: -1- AC_DEFUN([AC_LIBTOOL_GCJ], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_GCJ' is obsolete. +You should run autoupdate.])dnl +LT_LANG(Java)]) +m4trace:/usr/share/aclocal/libtool.m4:1402: -1- AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) + echo "$lt_simple_compile_test_code" > conftest.$ac_ext + lt_compiler_flag="$3" + # Insert the option either (1) after the last *FLAGS variable, or + # (2) before a word containing "conftest.", or (3) at the end. + # Note that $ac_compile itself does not contain backslashes and begins + # with a dollar sign (not a hyphen), so the echo should work correctly. + # The option is referenced via a variable to avoid confusing sed. + lt_compile=`echo "$ac_compile" | $SED \ + -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ + -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ + -e 's:$: $lt_compiler_flag:'` + (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$lt_compile" 2>conftest.err) + ac_status=$? + cat conftest.err >&AS_MESSAGE_LOG_FD + echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + if (exit $ac_status) && test -s "$ac_outfile"; then + # The compiler can only warn and ignore the option if not recognized + # So say no if there are warnings other than the usual output. + $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + fi + $RM conftest* +]) + +if test x"[$]$2" = xyes; then + m4_if([$5], , :, [$5]) +else + m4_if([$6], , :, [$6]) +fi +]) +m4trace:/usr/share/aclocal/libtool.m4:1444: -1- AU_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [m4_if($#, 0, [_LT_COMPILER_OPTION], [_LT_COMPILER_OPTION($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:1444: -1- AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_COMPILER_OPTION' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [_LT_COMPILER_OPTION], [_LT_COMPILER_OPTION($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:1453: -1- AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl +m4_require([_LT_DECL_SED])dnl +AC_CACHE_CHECK([$1], [$2], + [$2=no + save_LDFLAGS="$LDFLAGS" + LDFLAGS="$LDFLAGS $3" + echo "$lt_simple_link_test_code" > conftest.$ac_ext + if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then + # The linker can only warn and ignore the option if not recognized + # So say no if there are warnings + if test -s conftest.err; then + # Append any errors to the config.log. + cat conftest.err 1>&AS_MESSAGE_LOG_FD + $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp + $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 + if diff conftest.exp conftest.er2 >/dev/null; then + $2=yes + fi + else + $2=yes + fi + fi + $RM -r conftest* + LDFLAGS="$save_LDFLAGS" +]) + +if test x"[$]$2" = xyes; then + m4_if([$4], , :, [$4]) +else + m4_if([$5], , :, [$5]) +fi +]) +m4trace:/usr/share/aclocal/libtool.m4:1488: -1- AU_DEFUN([AC_LIBTOOL_LINKER_OPTION], [m4_if($#, 0, [_LT_LINKER_OPTION], [_LT_LINKER_OPTION($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:1488: -1- AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_LINKER_OPTION' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [_LT_LINKER_OPTION], [_LT_LINKER_OPTION($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:1495: -1- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl +# find the maximum length of command line arguments +AC_MSG_CHECKING([the maximum length of command line arguments]) +AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl + i=0 + teststring="ABCD" + + case $build_os in + msdosdjgpp*) + # On DJGPP, this test can blow up pretty badly due to problems in libc + # (any single argument exceeding 2000 bytes causes a buffer overrun + # during glob expansion). Even if it were fixed, the result of this + # check would be larger than it should be. + lt_cv_sys_max_cmd_len=12288; # 12K is about right + ;; + + gnu*) + # Under GNU Hurd, this test is not required because there is + # no limit to the length of command line arguments. + # Libtool will interpret -1 as no limit whatsoever + lt_cv_sys_max_cmd_len=-1; + ;; + + cygwin* | mingw* | cegcc*) + # On Win9x/ME, this test blows up -- it succeeds, but takes + # about 5 minutes as the teststring grows exponentially. + # Worse, since 9x/ME are not pre-emptively multitasking, + # you end up with a "frozen" computer, even though with patience + # the test eventually succeeds (with a max line length of 256k). + # Instead, let's just punt: use the minimum linelength reported by + # all of the supported platforms: 8192 (on NT/2K/XP). + lt_cv_sys_max_cmd_len=8192; + ;; + + amigaos*) + # On AmigaOS with pdksh, this test takes hours, literally. + # So we just punt and use a minimum line length of 8192. + lt_cv_sys_max_cmd_len=8192; + ;; + + netbsd* | freebsd* | openbsd* | darwin* | dragonfly*) + # This has been around since 386BSD, at least. Likely further. + if test -x /sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` + elif test -x /usr/sbin/sysctl; then + lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` + else + lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs + fi + # And add a safety zone + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + ;; + + interix*) + # We know the value 262144 and hardcode it with a safety zone (like BSD) + lt_cv_sys_max_cmd_len=196608 + ;; + + osf*) + # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure + # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not + # nice to cause kernel panics so lets avoid the loop below. + # First set a reasonable default. + lt_cv_sys_max_cmd_len=16384 + # + if test -x /sbin/sysconfig; then + case `/sbin/sysconfig -q proc exec_disable_arg_limit` in + *1*) lt_cv_sys_max_cmd_len=-1 ;; + esac + fi + ;; + sco3.2v5*) + lt_cv_sys_max_cmd_len=102400 + ;; + sysv5* | sco5v6* | sysv4.2uw2*) + kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` + if test -n "$kargmax"; then + lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` + else + lt_cv_sys_max_cmd_len=32768 + fi + ;; + *) + lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` + if test -n "$lt_cv_sys_max_cmd_len"; then + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` + else + # Make teststring a little bigger before we do anything with it. + # a 1K string should be a reasonable start. + for i in 1 2 3 4 5 6 7 8 ; do + teststring=$teststring$teststring + done + SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} + # If test is not a shell built-in, we'll probably end up computing a + # maximum length that is only half of the actual maximum length, but + # we can't tell. + while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \ + = "XX$teststring$teststring"; } >/dev/null 2>&1 && + test $i != 17 # 1/2 MB should be enough + do + i=`expr $i + 1` + teststring=$teststring$teststring + done + # Only check the string length outside the loop. + lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` + teststring= + # Add a significant safety factor because C++ compilers can tack on + # massive amounts of additional arguments before passing them to the + # linker. It appears as though 1/2 is a usable value. + lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` + fi + ;; + esac +]) +if test -n $lt_cv_sys_max_cmd_len ; then + AC_MSG_RESULT($lt_cv_sys_max_cmd_len) +else + AC_MSG_RESULT(none) +fi +max_cmd_len=$lt_cv_sys_max_cmd_len +_LT_DECL([], [max_cmd_len], [0], + [What is the maximum length of a command?]) +]) +m4trace:/usr/share/aclocal/libtool.m4:1623: -1- AU_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [m4_if($#, 0, [LT_CMD_MAX_LEN], [LT_CMD_MAX_LEN($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:1623: -1- AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_SYS_MAX_CMD_LEN' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_CMD_MAX_LEN], [LT_CMD_MAX_LEN($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:1724: -1- AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl +if test "x$enable_dlopen" != xyes; then + enable_dlopen=unknown + enable_dlopen_self=unknown + enable_dlopen_self_static=unknown +else + lt_cv_dlopen=no + lt_cv_dlopen_libs= + + case $host_os in + beos*) + lt_cv_dlopen="load_add_on" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ;; + + mingw* | pw32* | cegcc*) + lt_cv_dlopen="LoadLibrary" + lt_cv_dlopen_libs= + ;; + + cygwin*) + lt_cv_dlopen="dlopen" + lt_cv_dlopen_libs= + ;; + + darwin*) + # if libdl is installed we need to link against it + AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[ + lt_cv_dlopen="dyld" + lt_cv_dlopen_libs= + lt_cv_dlopen_self=yes + ]) + ;; + + *) + AC_CHECK_FUNC([shl_load], + [lt_cv_dlopen="shl_load"], + [AC_CHECK_LIB([dld], [shl_load], + [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"], + [AC_CHECK_FUNC([dlopen], + [lt_cv_dlopen="dlopen"], + [AC_CHECK_LIB([dl], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"], + [AC_CHECK_LIB([svld], [dlopen], + [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"], + [AC_CHECK_LIB([dld], [dld_link], + [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"]) + ]) + ]) + ]) + ]) + ]) + ;; + esac + + if test "x$lt_cv_dlopen" != xno; then + enable_dlopen=yes + else + enable_dlopen=no + fi + + case $lt_cv_dlopen in + dlopen) + save_CPPFLAGS="$CPPFLAGS" + test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" + + save_LDFLAGS="$LDFLAGS" + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" + + save_LIBS="$LIBS" + LIBS="$lt_cv_dlopen_libs $LIBS" + + AC_CACHE_CHECK([whether a program can dlopen itself], + lt_cv_dlopen_self, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, + lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) + ]) + + if test "x$lt_cv_dlopen_self" = xyes; then + wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" + AC_CACHE_CHECK([whether a statically linked program can dlopen itself], + lt_cv_dlopen_self_static, [dnl + _LT_TRY_DLOPEN_SELF( + lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, + lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) + ]) + fi + + CPPFLAGS="$save_CPPFLAGS" + LDFLAGS="$save_LDFLAGS" + LIBS="$save_LIBS" + ;; + esac + + case $lt_cv_dlopen_self in + yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; + *) enable_dlopen_self=unknown ;; + esac + + case $lt_cv_dlopen_self_static in + yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; + *) enable_dlopen_self_static=unknown ;; + esac +fi +_LT_DECL([dlopen_support], [enable_dlopen], [0], + [Whether dlopen is supported]) +_LT_DECL([dlopen_self], [enable_dlopen_self], [0], + [Whether dlopen of programs is supported]) +_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], + [Whether dlopen of statically linked programs is supported]) +]) +m4trace:/usr/share/aclocal/libtool.m4:1841: -1- AU_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [m4_if($#, 0, [LT_SYS_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:1841: -1- AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_DLOPEN_SELF' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:2741: -1- AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl +AC_MSG_CHECKING([for $1]) +AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, +[case $MAGIC_CMD in +[[\\/*] | ?:[\\/]*]) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; +*) + lt_save_MAGIC_CMD="$MAGIC_CMD" + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR +dnl $ac_dummy forces splitting on constant user-supplied paths. +dnl POSIX.2 word splitting is done only on the output of word expansions, +dnl not every word. This closes a longstanding sh security hole. + ac_dummy="m4_if([$2], , $PATH, [$2])" + for ac_dir in $ac_dummy; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$1; then + lt_cv_path_MAGIC_CMD="$ac_dir/$1" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + $EGREP "$file_magic_regex" > /dev/null; then + : + else + cat <<_LT_EOF 1>&2 + +*** Warning: the command libtool uses to detect shared libraries, +*** $file_magic_cmd, produces output that libtool cannot recognize. +*** The result is that libtool may fail to recognize shared libraries +*** as such. This will affect the creation of libtool libraries that +*** depend on shared libraries, but programs linked with such libtool +*** libraries will work regardless of this problem. Nevertheless, you +*** may want to report the problem to your system manager and/or to +*** bug-libtool@gnu.org + +_LT_EOF + fi ;; + esac + fi + break + fi + done + IFS="$lt_save_ifs" + MAGIC_CMD="$lt_save_MAGIC_CMD" + ;; +esac]) +MAGIC_CMD="$lt_cv_path_MAGIC_CMD" +if test -n "$MAGIC_CMD"; then + AC_MSG_RESULT($MAGIC_CMD) +else + AC_MSG_RESULT(no) +fi +_LT_DECL([], [MAGIC_CMD], [0], + [Used to examine libraries when file_magic_cmd begins with "file"])dnl +]) +m4trace:/usr/share/aclocal/libtool.m4:2803: -1- AU_DEFUN([AC_PATH_TOOL_PREFIX], [m4_if($#, 0, [_LT_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:2803: -1- AC_DEFUN([AC_PATH_TOOL_PREFIX], [AC_DIAGNOSE([obsolete], [The macro `AC_PATH_TOOL_PREFIX' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [_LT_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:2826: -1- AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_REQUIRE([AC_CANONICAL_BUILD])dnl +m4_require([_LT_DECL_SED])dnl +m4_require([_LT_DECL_EGREP])dnl + +AC_ARG_WITH([gnu-ld], + [AS_HELP_STRING([--with-gnu-ld], + [assume the C compiler uses GNU ld @<:@default=no@:>@])], + [test "$withval" = no || with_gnu_ld=yes], + [with_gnu_ld=no])dnl + +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by $CC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]]* | ?:[[\\/]]*) + re_direlt='/[[^/]][[^/]]*/\.\./' + # Canonicalize the pathname of ld + ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` + while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do + ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(lt_cv_path_LD, +[if test -z "$LD"; then + lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR + for ac_dir in $PATH; do + IFS="$lt_save_ifs" + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + lt_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some variants of GNU ld only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + case `"$lt_cv_path_LD" -v 2>&1 &1 | sed '1q'` in + */dev/null* | *'Invalid file or object type'*) + lt_cv_path_NM="$tmp_nm -B" + break + ;; + *) + case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in + */dev/null*) + lt_cv_path_NM="$tmp_nm -p" + break + ;; + *) + lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but + continue # so that we can try to find one that supports BSD flags + ;; + esac + ;; + esac + fi + done + IFS="$lt_save_ifs" + done + : ${lt_cv_path_NM=no} +fi]) +if test "$lt_cv_path_NM" != "no"; then + NM="$lt_cv_path_NM" +else + # Didn't find any BSD compatible name lister, look for dumpbin. + AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :) + AC_SUBST([DUMPBIN]) + if test "$DUMPBIN" != ":"; then + NM="$DUMPBIN" + fi +fi +test -z "$NM" && NM=nm +AC_SUBST([NM]) +_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl + +AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], + [lt_cv_nm_interface="BSD nm" + echo "int some_variable = 0;" > conftest.$ac_ext + (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD) + (eval "$ac_compile" 2>conftest.err) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) + (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) + cat conftest.err >&AS_MESSAGE_LOG_FD + (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD) + cat conftest.out >&AS_MESSAGE_LOG_FD + if $GREP 'External.*some_variable' conftest.out > /dev/null; then + lt_cv_nm_interface="MS dumpbin" + fi + rm -f conftest*]) +]) +m4trace:/usr/share/aclocal/libtool.m4:3257: -1- AU_DEFUN([AM_PROG_NM], [m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:3257: -1- AC_DEFUN([AM_PROG_NM], [AC_DIAGNOSE([obsolete], [The macro `AM_PROG_NM' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:3258: -1- AU_DEFUN([AC_PROG_NM], [m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:3258: -1- AC_DEFUN([AC_PROG_NM], [AC_DIAGNOSE([obsolete], [The macro `AC_PROG_NM' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_PATH_NM], [LT_PATH_NM($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:3267: -1- AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl +LIBM= +case $host in +*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*) + # These system don't have libm, or don't need it + ;; +*-ncr-sysv4.3*) + AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw") + AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") + ;; +*) + AC_CHECK_LIB(m, cos, LIBM="-lm") + ;; +esac +AC_SUBST([LIBM]) +]) +m4trace:/usr/share/aclocal/libtool.m4:3286: -1- AU_DEFUN([AC_CHECK_LIBM], [m4_if($#, 0, [LT_LIB_M], [LT_LIB_M($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:3286: -1- AC_DEFUN([AC_CHECK_LIBM], [AC_DIAGNOSE([obsolete], [The macro `AC_CHECK_LIBM' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_LIB_M], [LT_LIB_M($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:6987: -1- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], + [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], + [AC_CHECK_TOOL(GCJ, gcj,) + test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2" + AC_SUBST(GCJFLAGS)])])[]dnl +]) +m4trace:/usr/share/aclocal/libtool.m4:6996: -1- AU_DEFUN([LT_AC_PROG_GCJ], [m4_if($#, 0, [LT_PROG_GCJ], [LT_PROG_GCJ($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:6996: -1- AC_DEFUN([LT_AC_PROG_GCJ], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_GCJ' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_PROG_GCJ], [LT_PROG_GCJ($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:7003: -1- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) +]) +m4trace:/usr/share/aclocal/libtool.m4:7008: -1- AU_DEFUN([LT_AC_PROG_RC], [m4_if($#, 0, [LT_PROG_RC], [LT_PROG_RC($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:7008: -1- AC_DEFUN([LT_AC_PROG_RC], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_RC' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_PROG_RC], [LT_PROG_RC($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:7119: -1- AU_DEFUN([LT_AC_PROG_SED], [m4_if($#, 0, [AC_PROG_SED], [AC_PROG_SED($@)])]) +m4trace:/usr/share/aclocal/libtool.m4:7119: -1- AC_DEFUN([LT_AC_PROG_SED], [AC_DIAGNOSE([obsolete], [The macro `LT_AC_PROG_SED' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [AC_PROG_SED], [AC_PROG_SED($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:16: -1- AC_DEFUN([LT_CONFIG_LTDL_DIR], [AC_BEFORE([$0], [LTDL_INIT]) +_$0($*) +]) +m4trace:/usr/share/aclocal/ltdl.m4:68: -1- AC_DEFUN([LTDL_CONVENIENCE], [AC_BEFORE([$0], [LTDL_INIT])dnl +dnl Although the argument is deprecated and no longer documented, +dnl LTDL_CONVENIENCE used to take a DIRECTORY orgument, if we have one +dnl here make sure it is the same as any other declaration of libltdl's +dnl location! This also ensures lt_ltdl_dir is set when configure.ac is +dnl not yet using an explicit LT_CONFIG_LTDL_DIR. +m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl +_$0() +]) +m4trace:/usr/share/aclocal/ltdl.m4:81: -1- AU_DEFUN([AC_LIBLTDL_CONVENIENCE], [_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) +_LTDL_CONVENIENCE]) +m4trace:/usr/share/aclocal/ltdl.m4:81: -1- AC_DEFUN([AC_LIBLTDL_CONVENIENCE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBLTDL_CONVENIENCE' is obsolete. +You should run autoupdate.])dnl +_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) +_LTDL_CONVENIENCE]) +m4trace:/usr/share/aclocal/ltdl.m4:124: -1- AC_DEFUN([LTDL_INSTALLABLE], [AC_BEFORE([$0], [LTDL_INIT])dnl +dnl Although the argument is deprecated and no longer documented, +dnl LTDL_INSTALLABLE used to take a DIRECTORY orgument, if we have one +dnl here make sure it is the same as any other declaration of libltdl's +dnl location! This also ensures lt_ltdl_dir is set when configure.ac is +dnl not yet using an explicit LT_CONFIG_LTDL_DIR. +m4_ifval([$1], [_LT_CONFIG_LTDL_DIR([$1])])dnl +_$0() +]) +m4trace:/usr/share/aclocal/ltdl.m4:137: -1- AU_DEFUN([AC_LIBLTDL_INSTALLABLE], [_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) +_LTDL_INSTALLABLE]) +m4trace:/usr/share/aclocal/ltdl.m4:137: -1- AC_DEFUN([AC_LIBLTDL_INSTALLABLE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBLTDL_INSTALLABLE' is obsolete. +You should run autoupdate.])dnl +_LT_CONFIG_LTDL_DIR([m4_default([$1], [libltdl])]) +_LTDL_INSTALLABLE]) +m4trace:/usr/share/aclocal/ltdl.m4:213: -1- AC_DEFUN([_LT_LIBOBJ], [ + m4_pattern_allow([^_LT_LIBOBJS$]) + _LT_LIBOBJS="$_LT_LIBOBJS $1.$ac_objext" +]) +m4trace:/usr/share/aclocal/ltdl.m4:226: -1- AC_DEFUN([LTDL_INIT], [dnl Parse OPTIONS +_LT_SET_OPTIONS([$0], [$1]) + +dnl We need to keep our own list of libobjs separate from our parent project, +dnl and the easiest way to do that is redefine the AC_LIBOBJs macro while +dnl we look for our own LIBOBJs. +m4_pushdef([AC_LIBOBJ], m4_defn([_LT_LIBOBJ])) +m4_pushdef([AC_LIBSOURCES]) + +dnl If not otherwise defined, default to the 1.5.x compatible subproject mode: +m4_if(_LTDL_MODE, [], + [m4_define([_LTDL_MODE], m4_default([$2], [subproject])) + m4_if([-1], [m4_bregexp(_LTDL_MODE, [\(subproject\|\(non\)?recursive\)])], + [m4_fatal([unknown libltdl mode: ]_LTDL_MODE)])]) + +AC_ARG_WITH([included_ltdl], + [AS_HELP_STRING([--with-included-ltdl], + [use the GNU ltdl sources included here])]) + +if test "x$with_included_ltdl" != xyes; then + # We are not being forced to use the included libltdl sources, so + # decide whether there is a useful installed version we can use. + AC_CHECK_HEADER([ltdl.h], + [AC_CHECK_DECL([lt_dlinterface_register], + [AC_CHECK_LIB([ltdl], [lt_dladvise_preload], + [with_included_ltdl=no], + [with_included_ltdl=yes])], + [with_included_ltdl=yes], + [AC_INCLUDES_DEFAULT + #include ])], + [with_included_ltdl=yes], + [AC_INCLUDES_DEFAULT] + ) +fi + +dnl If neither LT_CONFIG_LTDL_DIR, LTDL_CONVENIENCE nor LTDL_INSTALLABLE +dnl was called yet, then for old times' sake, we assume libltdl is in an +dnl eponymous directory: +AC_PROVIDE_IFELSE([LT_CONFIG_LTDL_DIR], [], [_LT_CONFIG_LTDL_DIR([libltdl])]) + +AC_ARG_WITH([ltdl_include], + [AS_HELP_STRING([--with-ltdl-include=DIR], + [use the ltdl headers installed in DIR])]) + +if test -n "$with_ltdl_include"; then + if test -f "$with_ltdl_include/ltdl.h"; then : + else + AC_MSG_ERROR([invalid ltdl include directory: `$with_ltdl_include']) + fi +else + with_ltdl_include=no +fi + +AC_ARG_WITH([ltdl_lib], + [AS_HELP_STRING([--with-ltdl-lib=DIR], + [use the libltdl.la installed in DIR])]) + +if test -n "$with_ltdl_lib"; then + if test -f "$with_ltdl_lib/libltdl.la"; then : + else + AC_MSG_ERROR([invalid ltdl library directory: `$with_ltdl_lib']) + fi +else + with_ltdl_lib=no +fi + +case ,$with_included_ltdl,$with_ltdl_include,$with_ltdl_lib, in + ,yes,no,no,) + m4_case(m4_default(_LTDL_TYPE, [convenience]), + [convenience], [_LTDL_CONVENIENCE], + [installable], [_LTDL_INSTALLABLE], + [m4_fatal([unknown libltdl build type: ]_LTDL_TYPE)]) + ;; + ,no,no,no,) + # If the included ltdl is not to be used, then use the + # preinstalled libltdl we found. + AC_DEFINE([HAVE_LTDL], [1], + [Define this if a modern libltdl is already installed]) + LIBLTDL=-lltdl + LTDLDEPS= + LTDLINCL= + ;; + ,no*,no,*) + AC_MSG_ERROR([`--with-ltdl-include' and `--with-ltdl-lib' options must be used together]) + ;; + *) with_included_ltdl=no + LIBLTDL="-L$with_ltdl_lib -lltdl" + LTDLDEPS= + LTDLINCL="-I$with_ltdl_include" + ;; +esac +INCLTDL="$LTDLINCL" + +# Report our decision... +AC_MSG_CHECKING([where to find libltdl headers]) +AC_MSG_RESULT([$LTDLINCL]) +AC_MSG_CHECKING([where to find libltdl library]) +AC_MSG_RESULT([$LIBLTDL]) + +_LTDL_SETUP + +dnl restore autoconf definition. +m4_popdef([AC_LIBOBJ]) +m4_popdef([AC_LIBSOURCES]) + +AC_CONFIG_COMMANDS_PRE([ + _ltdl_libobjs= + _ltdl_ltlibobjs= + if test -n "$_LT_LIBOBJS"; then + # Remove the extension. + _lt_sed_drop_objext='s/\.o$//;s/\.obj$//' + for i in `for i in $_LT_LIBOBJS; do echo "$i"; done | sed "$_lt_sed_drop_objext" | sort -u`; do + _ltdl_libobjs="$_ltdl_libobjs $lt_libobj_prefix$i.$ac_objext" + _ltdl_ltlibobjs="$_ltdl_ltlibobjs $lt_libobj_prefix$i.lo" + done + fi + AC_SUBST([ltdl_LIBOBJS], [$_ltdl_libobjs]) + AC_SUBST([ltdl_LTLIBOBJS], [$_ltdl_ltlibobjs]) +]) + +# Only expand once: +m4_define([LTDL_INIT]) +]) +m4trace:/usr/share/aclocal/ltdl.m4:352: -1- AU_DEFUN([AC_LIB_LTDL], [LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:352: -1- AC_DEFUN([AC_LIB_LTDL], [AC_DIAGNOSE([obsolete], [The macro `AC_LIB_LTDL' is obsolete. +You should run autoupdate.])dnl +LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:353: -1- AU_DEFUN([AC_WITH_LTDL], [LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:353: -1- AC_DEFUN([AC_WITH_LTDL], [AC_DIAGNOSE([obsolete], [The macro `AC_WITH_LTDL' is obsolete. +You should run autoupdate.])dnl +LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:354: -1- AU_DEFUN([LT_WITH_LTDL], [LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:354: -1- AC_DEFUN([LT_WITH_LTDL], [AC_DIAGNOSE([obsolete], [The macro `LT_WITH_LTDL' is obsolete. +You should run autoupdate.])dnl +LTDL_INIT($@)]) +m4trace:/usr/share/aclocal/ltdl.m4:367: -1- AC_DEFUN([_LTDL_SETUP], [AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([LT_SYS_MODULE_EXT])dnl +AC_REQUIRE([LT_SYS_MODULE_PATH])dnl +AC_REQUIRE([LT_SYS_DLSEARCH_PATH])dnl +AC_REQUIRE([LT_LIB_DLLOAD])dnl +AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl +AC_REQUIRE([LT_FUNC_DLSYM_USCORE])dnl +AC_REQUIRE([LT_SYS_DLOPEN_DEPLIBS])dnl +AC_REQUIRE([gl_FUNC_ARGZ])dnl + +m4_require([_LT_CHECK_OBJDIR])dnl +m4_require([_LT_HEADER_DLFCN])dnl +m4_require([_LT_CHECK_DLPREOPEN])dnl +m4_require([_LT_DECL_SED])dnl + +dnl Don't require this, or it will be expanded earlier than the code +dnl that sets the variables it relies on: +_LT_ENABLE_INSTALL + +dnl _LTDL_MODE specific code must be called at least once: +_LTDL_MODE_DISPATCH + +# In order that ltdl.c can compile, find out the first AC_CONFIG_HEADERS +# the user used. This is so that ltdl.h can pick up the parent projects +# config.h file, The first file in AC_CONFIG_HEADERS must contain the +# definitions required by ltdl.c. +# FIXME: Remove use of undocumented AC_LIST_HEADERS (2.59 compatibility). +AC_CONFIG_COMMANDS_PRE([dnl +m4_pattern_allow([^LT_CONFIG_H$])dnl +m4_ifset([AH_HEADER], + [LT_CONFIG_H=AH_HEADER], + [m4_ifset([AC_LIST_HEADERS], + [LT_CONFIG_H=`echo "AC_LIST_HEADERS" | $SED 's,^[[ ]]*,,;s,[[ :]].*$,,'`], + [])])]) +AC_SUBST([LT_CONFIG_H]) + +AC_CHECK_HEADERS([unistd.h dl.h sys/dl.h dld.h mach-o/dyld.h dirent.h], + [], [], [AC_INCLUDES_DEFAULT]) + +AC_CHECK_FUNCS([closedir opendir readdir], [], [AC_LIBOBJ([lt__dirent])]) +AC_CHECK_FUNCS([strlcat strlcpy], [], [AC_LIBOBJ([lt__strl])]) + +AC_DEFINE_UNQUOTED([LT_LIBEXT],["$libext"],[The archive extension]) + +name=ltdl +LTDLOPEN=`eval "\\$ECHO \"$libname_spec\""` +AC_SUBST([LTDLOPEN]) +]) +m4trace:/usr/share/aclocal/ltdl.m4:437: -1- AC_DEFUN([LT_SYS_DLOPEN_DEPLIBS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl +AC_CACHE_CHECK([whether deplibs are loaded by dlopen], + [lt_cv_sys_dlopen_deplibs], + [# PORTME does your system automatically load deplibs for dlopen? + # or its logical equivalent (e.g. shl_load for HP-UX < 11) + # For now, we just catch OSes we know something about -- in the + # future, we'll try test this programmatically. + lt_cv_sys_dlopen_deplibs=unknown + case $host_os in + aix3*|aix4.1.*|aix4.2.*) + # Unknown whether this is true for these versions of AIX, but + # we want this `case' here to explicitly catch those versions. + lt_cv_sys_dlopen_deplibs=unknown + ;; + aix[[4-9]]*) + lt_cv_sys_dlopen_deplibs=yes + ;; + amigaos*) + case $host_cpu in + powerpc) + lt_cv_sys_dlopen_deplibs=no + ;; + esac + ;; + darwin*) + # Assuming the user has installed a libdl from somewhere, this is true + # If you are looking for one http://www.opendarwin.org/projects/dlcompat + lt_cv_sys_dlopen_deplibs=yes + ;; + freebsd* | dragonfly*) + lt_cv_sys_dlopen_deplibs=yes + ;; + gnu* | linux* | k*bsd*-gnu | kopensolaris*-gnu) + # GNU and its variants, using gnu ld.so (Glibc) + lt_cv_sys_dlopen_deplibs=yes + ;; + hpux10*|hpux11*) + lt_cv_sys_dlopen_deplibs=yes + ;; + interix*) + lt_cv_sys_dlopen_deplibs=yes + ;; + irix[[12345]]*|irix6.[[01]]*) + # Catch all versions of IRIX before 6.2, and indicate that we don't + # know how it worked for any of those versions. + lt_cv_sys_dlopen_deplibs=unknown + ;; + irix*) + # The case above catches anything before 6.2, and it's known that + # at 6.2 and later dlopen does load deplibs. + lt_cv_sys_dlopen_deplibs=yes + ;; + netbsd* | netbsdelf*-gnu) + lt_cv_sys_dlopen_deplibs=yes + ;; + openbsd*) + lt_cv_sys_dlopen_deplibs=yes + ;; + osf[[1234]]*) + # dlopen did load deplibs (at least at 4.x), but until the 5.x series, + # it did *not* use an RPATH in a shared library to find objects the + # library depends on, so we explicitly say `no'. + lt_cv_sys_dlopen_deplibs=no + ;; + osf5.0|osf5.0a|osf5.1) + # dlopen *does* load deplibs and with the right loader patch applied + # it even uses RPATH in a shared library to search for shared objects + # that the library depends on, but there's no easy way to know if that + # patch is installed. Since this is the case, all we can really + # say is unknown -- it depends on the patch being installed. If + # it is, this changes to `yes'. Without it, it would be `no'. + lt_cv_sys_dlopen_deplibs=unknown + ;; + osf*) + # the two cases above should catch all versions of osf <= 5.1. Read + # the comments above for what we know about them. + # At > 5.1, deplibs are loaded *and* any RPATH in a shared library + # is used to find them so we can finally say `yes'. + lt_cv_sys_dlopen_deplibs=yes + ;; + qnx*) + lt_cv_sys_dlopen_deplibs=yes + ;; + solaris*) + lt_cv_sys_dlopen_deplibs=yes + ;; + sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) + libltdl_cv_sys_dlopen_deplibs=yes + ;; + esac + ]) +if test "$lt_cv_sys_dlopen_deplibs" != yes; then + AC_DEFINE([LTDL_DLOPEN_DEPLIBS], [1], + [Define if the OS needs help to load dependent libraries for dlopen().]) +fi +]) +m4trace:/usr/share/aclocal/ltdl.m4:536: -1- AU_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], [m4_if($#, 0, [LT_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:536: -1- AC_DEFUN([AC_LTDL_SYS_DLOPEN_DEPLIBS], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYS_DLOPEN_DEPLIBS' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_DLOPEN_DEPLIBS], [LT_SYS_DLOPEN_DEPLIBS($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:543: -1- AC_DEFUN([LT_SYS_MODULE_EXT], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl +AC_CACHE_CHECK([which extension is used for runtime loadable modules], + [libltdl_cv_shlibext], +[ +module=yes +eval libltdl_cv_shlibext=$shrext_cmds + ]) +if test -n "$libltdl_cv_shlibext"; then + m4_pattern_allow([LT_MODULE_EXT])dnl + AC_DEFINE_UNQUOTED([LT_MODULE_EXT], ["$libltdl_cv_shlibext"], + [Define to the extension used for runtime loadable modules, say, ".so".]) +fi +]) +m4trace:/usr/share/aclocal/ltdl.m4:559: -1- AU_DEFUN([AC_LTDL_SHLIBEXT], [m4_if($#, 0, [LT_SYS_MODULE_EXT], [LT_SYS_MODULE_EXT($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:559: -1- AC_DEFUN([AC_LTDL_SHLIBEXT], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SHLIBEXT' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_MODULE_EXT], [LT_SYS_MODULE_EXT($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:566: -1- AC_DEFUN([LT_SYS_MODULE_PATH], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl +AC_CACHE_CHECK([which variable specifies run-time module search path], + [lt_cv_module_path_var], [lt_cv_module_path_var="$shlibpath_var"]) +if test -n "$lt_cv_module_path_var"; then + m4_pattern_allow([LT_MODULE_PATH_VAR])dnl + AC_DEFINE_UNQUOTED([LT_MODULE_PATH_VAR], ["$lt_cv_module_path_var"], + [Define to the name of the environment variable that determines the run-time module search path.]) +fi +]) +m4trace:/usr/share/aclocal/ltdl.m4:578: -1- AU_DEFUN([AC_LTDL_SHLIBPATH], [m4_if($#, 0, [LT_SYS_MODULE_PATH], [LT_SYS_MODULE_PATH($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:578: -1- AC_DEFUN([AC_LTDL_SHLIBPATH], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SHLIBPATH' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_MODULE_PATH], [LT_SYS_MODULE_PATH($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:585: -1- AC_DEFUN([LT_SYS_DLSEARCH_PATH], [m4_require([_LT_SYS_DYNAMIC_LINKER])dnl +AC_CACHE_CHECK([for the default library search path], + [lt_cv_sys_dlsearch_path], + [lt_cv_sys_dlsearch_path="$sys_lib_dlsearch_path_spec"]) +if test -n "$lt_cv_sys_dlsearch_path"; then + sys_dlsearch_path= + for dir in $lt_cv_sys_dlsearch_path; do + if test -z "$sys_dlsearch_path"; then + sys_dlsearch_path="$dir" + else + sys_dlsearch_path="$sys_dlsearch_path$PATH_SEPARATOR$dir" + fi + done + m4_pattern_allow([LT_DLSEARCH_PATH])dnl + AC_DEFINE_UNQUOTED([LT_DLSEARCH_PATH], ["$sys_dlsearch_path"], + [Define to the system default library search path.]) +fi +]) +m4trace:/usr/share/aclocal/ltdl.m4:606: -1- AU_DEFUN([AC_LTDL_SYSSEARCHPATH], [m4_if($#, 0, [LT_SYS_DLSEARCH_PATH], [LT_SYS_DLSEARCH_PATH($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:606: -1- AC_DEFUN([AC_LTDL_SYSSEARCHPATH], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYSSEARCHPATH' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_DLSEARCH_PATH], [LT_SYS_DLSEARCH_PATH($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:632: -1- AC_DEFUN([LT_LIB_DLLOAD], [m4_pattern_allow([^LT_DLLOADERS$]) +LT_DLLOADERS= +AC_SUBST([LT_DLLOADERS]) + +AC_LANG_PUSH([C]) + +LIBADD_DLOPEN= +AC_SEARCH_LIBS([dlopen], [dl], + [AC_DEFINE([HAVE_LIBDL], [1], + [Define if you have the libdl library or equivalent.]) + if test "$ac_cv_search_dlopen" != "none required" ; then + LIBADD_DLOPEN="-ldl" + fi + libltdl_cv_lib_dl_dlopen="yes" + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"], + [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#if HAVE_DLFCN_H +# include +#endif + ]], [[dlopen(0, 0);]])], + [AC_DEFINE([HAVE_LIBDL], [1], + [Define if you have the libdl library or equivalent.]) + libltdl_cv_func_dlopen="yes" + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"], + [AC_CHECK_LIB([svld], [dlopen], + [AC_DEFINE([HAVE_LIBDL], [1], + [Define if you have the libdl library or equivalent.]) + LIBADD_DLOPEN="-lsvld" libltdl_cv_func_dlopen="yes" + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dlopen.la"])])]) +if test x"$libltdl_cv_func_dlopen" = xyes || test x"$libltdl_cv_lib_dl_dlopen" = xyes +then + lt_save_LIBS="$LIBS" + LIBS="$LIBS $LIBADD_DLOPEN" + AC_CHECK_FUNCS([dlerror]) + LIBS="$lt_save_LIBS" +fi +AC_SUBST([LIBADD_DLOPEN]) + +LIBADD_SHL_LOAD= +AC_CHECK_FUNC([shl_load], + [AC_DEFINE([HAVE_SHL_LOAD], [1], + [Define if you have the shl_load function.]) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la"], + [AC_CHECK_LIB([dld], [shl_load], + [AC_DEFINE([HAVE_SHL_LOAD], [1], + [Define if you have the shl_load function.]) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}shl_load.la" + LIBADD_SHL_LOAD="-ldld"])]) +AC_SUBST([LIBADD_SHL_LOAD]) + +case $host_os in +darwin[[1567]].*) +# We only want this for pre-Mac OS X 10.4. + AC_CHECK_FUNC([_dyld_func_lookup], + [AC_DEFINE([HAVE_DYLD], [1], + [Define if you have the _dyld_func_lookup function.]) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dyld.la"]) + ;; +beos*) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}load_add_on.la" + ;; +cygwin* | mingw* | os2* | pw32*) + AC_CHECK_DECLS([cygwin_conv_path], [], [], [[#include ]]) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}loadlibrary.la" + ;; +esac + +AC_CHECK_LIB([dld], [dld_link], + [AC_DEFINE([HAVE_DLD], [1], + [Define if you have the GNU dld library.]) + LT_DLLOADERS="$LT_DLLOADERS ${lt_dlopen_dir+$lt_dlopen_dir/}dld_link.la"]) +AC_SUBST([LIBADD_DLD_LINK]) + +m4_pattern_allow([^LT_DLPREOPEN$]) +LT_DLPREOPEN= +if test -n "$LT_DLLOADERS" +then + for lt_loader in $LT_DLLOADERS; do + LT_DLPREOPEN="$LT_DLPREOPEN-dlpreopen $lt_loader " + done + AC_DEFINE([HAVE_LIBDLLOADER], [1], + [Define if libdlloader will be built on this platform]) +fi +AC_SUBST([LT_DLPREOPEN]) + +dnl This isn't used anymore, but set it for backwards compatibility +LIBADD_DL="$LIBADD_DLOPEN $LIBADD_SHL_LOAD" +AC_SUBST([LIBADD_DL]) + +AC_LANG_POP +]) +m4trace:/usr/share/aclocal/ltdl.m4:725: -1- AU_DEFUN([AC_LTDL_DLLIB], [m4_if($#, 0, [LT_LIB_DLLOAD], [LT_LIB_DLLOAD($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:725: -1- AC_DEFUN([AC_LTDL_DLLIB], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_DLLIB' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_LIB_DLLOAD], [LT_LIB_DLLOAD($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:733: -1- AC_DEFUN([LT_SYS_SYMBOL_USCORE], [m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl +AC_CACHE_CHECK([for _ prefix in compiled symbols], + [lt_cv_sys_symbol_underscore], + [lt_cv_sys_symbol_underscore=no + cat > conftest.$ac_ext <<_LT_EOF +void nm_test_func(){} +int main(){nm_test_func;return 0;} +_LT_EOF + if AC_TRY_EVAL(ac_compile); then + # Now try to grab the symbols. + ac_nlist=conftest.nm + if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $ac_nlist) && test -s "$ac_nlist"; then + # See whether the symbols have a leading underscore. + if grep '^. _nm_test_func' "$ac_nlist" >/dev/null; then + lt_cv_sys_symbol_underscore=yes + else + if grep '^. nm_test_func ' "$ac_nlist" >/dev/null; then + : + else + echo "configure: cannot find nm_test_func in $ac_nlist" >&AS_MESSAGE_LOG_FD + fi + fi + else + echo "configure: cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD + fi + else + echo "configure: failed program was:" >&AS_MESSAGE_LOG_FD + cat conftest.c >&AS_MESSAGE_LOG_FD + fi + rm -rf conftest* + ]) + sys_symbol_underscore=$lt_cv_sys_symbol_underscore + AC_SUBST([sys_symbol_underscore]) +]) +m4trace:/usr/share/aclocal/ltdl.m4:770: -1- AU_DEFUN([AC_LTDL_SYMBOL_USCORE], [m4_if($#, 0, [LT_SYS_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:770: -1- AC_DEFUN([AC_LTDL_SYMBOL_USCORE], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_SYMBOL_USCORE' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_SYS_SYMBOL_USCORE], [LT_SYS_SYMBOL_USCORE($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:777: -1- AC_DEFUN([LT_FUNC_DLSYM_USCORE], [AC_REQUIRE([LT_SYS_SYMBOL_USCORE])dnl +if test x"$lt_cv_sys_symbol_underscore" = xyes; then + if test x"$libltdl_cv_func_dlopen" = xyes || + test x"$libltdl_cv_lib_dl_dlopen" = xyes ; then + AC_CACHE_CHECK([whether we have to add an underscore for dlsym], + [libltdl_cv_need_uscore], + [libltdl_cv_need_uscore=unknown + save_LIBS="$LIBS" + LIBS="$LIBS $LIBADD_DLOPEN" + _LT_TRY_DLOPEN_SELF( + [libltdl_cv_need_uscore=no], [libltdl_cv_need_uscore=yes], + [], [libltdl_cv_need_uscore=cross]) + LIBS="$save_LIBS" + ]) + fi +fi + +if test x"$libltdl_cv_need_uscore" = xyes; then + AC_DEFINE([NEED_USCORE], [1], + [Define if dlsym() requires a leading underscore in symbol names.]) +fi +]) +m4trace:/usr/share/aclocal/ltdl.m4:802: -1- AU_DEFUN([AC_LTDL_DLSYM_USCORE], [m4_if($#, 0, [LT_FUNC_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE($@)])]) +m4trace:/usr/share/aclocal/ltdl.m4:802: -1- AC_DEFUN([AC_LTDL_DLSYM_USCORE], [AC_DIAGNOSE([obsolete], [The macro `AC_LTDL_DLSYM_USCORE' is obsolete. +You should run autoupdate.])dnl +m4_if($#, 0, [LT_FUNC_DLSYM_USCORE], [LT_FUNC_DLSYM_USCORE($@)])]) +m4trace:/usr/share/aclocal/ltoptions.m4:13: -1- AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) +m4trace:/usr/share/aclocal/ltoptions.m4:110: -1- AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:110: -1- AC_DEFUN([AC_LIBTOOL_DLOPEN], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_DLOPEN' is obsolete. +You should run autoupdate.])dnl +_LT_SET_OPTION([LT_INIT], [dlopen]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:145: -1- AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:145: -1- AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_WIN32_DLL' is obsolete. +You should run autoupdate.])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +_LT_SET_OPTION([LT_INIT], [win32-dll]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:194: -1- AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:198: -1- AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:202: -1- AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) +m4trace:/usr/share/aclocal/ltoptions.m4:202: -1- AC_DEFUN([AM_ENABLE_SHARED], [AC_DIAGNOSE([obsolete], [The macro `AM_ENABLE_SHARED' is obsolete. +You should run autoupdate.])dnl +AC_ENABLE_SHARED($@)]) +m4trace:/usr/share/aclocal/ltoptions.m4:203: -1- AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) +m4trace:/usr/share/aclocal/ltoptions.m4:203: -1- AC_DEFUN([AM_DISABLE_SHARED], [AC_DIAGNOSE([obsolete], [The macro `AM_DISABLE_SHARED' is obsolete. +You should run autoupdate.])dnl +AC_DISABLE_SHARED($@)]) +m4trace:/usr/share/aclocal/ltoptions.m4:248: -1- AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:252: -1- AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:256: -1- AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) +m4trace:/usr/share/aclocal/ltoptions.m4:256: -1- AC_DEFUN([AM_ENABLE_STATIC], [AC_DIAGNOSE([obsolete], [The macro `AM_ENABLE_STATIC' is obsolete. +You should run autoupdate.])dnl +AC_ENABLE_STATIC($@)]) +m4trace:/usr/share/aclocal/ltoptions.m4:257: -1- AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) +m4trace:/usr/share/aclocal/ltoptions.m4:257: -1- AC_DEFUN([AM_DISABLE_STATIC], [AC_DIAGNOSE([obsolete], [The macro `AM_DISABLE_STATIC' is obsolete. +You should run autoupdate.])dnl +AC_DISABLE_STATIC($@)]) +m4trace:/usr/share/aclocal/ltoptions.m4:302: -1- AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:302: -1- AC_DEFUN([AC_ENABLE_FAST_INSTALL], [AC_DIAGNOSE([obsolete], [The macro `AC_ENABLE_FAST_INSTALL' is obsolete. +You should run autoupdate.])dnl +_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `fast-install' option into LT_INIT's first parameter.]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:309: -1- AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:309: -1- AC_DEFUN([AC_DISABLE_FAST_INSTALL], [AC_DIAGNOSE([obsolete], [The macro `AC_DISABLE_FAST_INSTALL' is obsolete. +You should run autoupdate.])dnl +_LT_SET_OPTION([LT_INIT], [disable-fast-install]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you put +the `disable-fast-install' option into LT_INIT's first parameter.]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:342: -1- AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) +m4trace:/usr/share/aclocal/ltoptions.m4:342: -1- AC_DEFUN([AC_LIBTOOL_PICMODE], [AC_DIAGNOSE([obsolete], [The macro `AC_LIBTOOL_PICMODE' is obsolete. +You should run autoupdate.])dnl +_LT_SET_OPTION([LT_INIT], [pic-only]) +AC_DIAGNOSE([obsolete], +[$0: Remove this warning and the call to _LT_SET_OPTION when you +put the `pic-only' option into LT_INIT's first parameter.]) +]) +m4trace:/usr/share/aclocal/ltsugar.m4:13: -1- AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) +m4trace:/usr/share/aclocal/ltversion.m4:18: -1- AC_DEFUN([LTVERSION_VERSION], [macro_version='2.2.6b' +macro_revision='1.3017' +_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) +_LT_DECL(, macro_revision, 0) +]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:36: -1- AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:40: -1- AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:41: -1- AC_DEFUN([_LT_AC_SHELL_INIT]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:42: -1- AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:44: -1- AC_DEFUN([_LT_AC_TAGVAR]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:45: -1- AC_DEFUN([AC_LTDL_ENABLE_INSTALL]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:46: -1- AC_DEFUN([AC_LTDL_PREOPEN]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:47: -1- AC_DEFUN([_LT_AC_SYS_COMPILER]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:48: -1- AC_DEFUN([_LT_AC_LOCK]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:49: -1- AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:50: -1- AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:51: -1- AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:52: -1- AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:53: -1- AC_DEFUN([AC_LIBTOOL_OBJDIR]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:54: -1- AC_DEFUN([AC_LTDL_OBJDIR]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:55: -1- AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:56: -1- AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:57: -1- AC_DEFUN([AC_PATH_MAGIC]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:58: -1- AC_DEFUN([AC_PROG_LD_GNU]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:59: -1- AC_DEFUN([AC_PROG_LD_RELOAD_FLAG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:60: -1- AC_DEFUN([AC_DEPLIBS_CHECK_METHOD]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:61: -1- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:62: -1- AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:63: -1- AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:64: -1- AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:65: -1- AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:66: -1- AC_DEFUN([LT_AC_PROG_EGREP]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:71: -1- AC_DEFUN([_AC_PROG_LIBTOOL]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:72: -1- AC_DEFUN([AC_LIBTOOL_SETUP]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:73: -1- AC_DEFUN([_LT_AC_CHECK_DLFCN]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:74: -1- AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:75: -1- AC_DEFUN([_LT_AC_TAGCONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:77: -1- AC_DEFUN([_LT_AC_LANG_CXX]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:78: -1- AC_DEFUN([_LT_AC_LANG_F77]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:79: -1- AC_DEFUN([_LT_AC_LANG_GCJ]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:80: -1- AC_DEFUN([AC_LIBTOOL_RC]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:81: -1- AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:82: -1- AC_DEFUN([_LT_AC_LANG_C_CONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:83: -1- AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:84: -1- AC_DEFUN([_LT_AC_LANG_CXX_CONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:85: -1- AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:86: -1- AC_DEFUN([_LT_AC_LANG_F77_CONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:87: -1- AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:88: -1- AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:89: -1- AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:90: -1- AC_DEFUN([_LT_AC_LANG_RC_CONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:91: -1- AC_DEFUN([AC_LIBTOOL_CONFIG]) +m4trace:/usr/share/aclocal/lt~obsolete.m4:92: -1- AC_DEFUN([_LT_AC_FILE_LTDLL_C]) +m4trace:/usr/share/aclocal-1.11/amversion.m4:14: -1- AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' +dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to +dnl require some minimum version. Point them to the right macro. +m4_if([$1], [1.11.1], [], + [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl +]) +m4trace:/usr/share/aclocal-1.11/amversion.m4:33: -1- AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.1])dnl +m4_ifndef([AC_AUTOCONF_VERSION], + [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl +_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) +m4trace:/usr/share/aclocal-1.11/auxdir.m4:47: -1- AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. +AC_PREREQ([2.50])dnl +# expand $ac_aux_dir to an absolute path +am_aux_dir=`cd $ac_aux_dir && pwd` +]) +m4trace:/usr/share/aclocal-1.11/cond.m4:15: -1- AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl + ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], + [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl +AC_SUBST([$1_TRUE])dnl +AC_SUBST([$1_FALSE])dnl +_AM_SUBST_NOTMAKE([$1_TRUE])dnl +_AM_SUBST_NOTMAKE([$1_FALSE])dnl +m4_define([_AM_COND_VALUE_$1], [$2])dnl +if $2; then + $1_TRUE= + $1_FALSE='#' +else + $1_TRUE='#' + $1_FALSE= +fi +AC_CONFIG_COMMANDS_PRE( +[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then + AC_MSG_ERROR([[conditional "$1" was never defined. +Usually this means the macro was only invoked conditionally.]]) +fi])]) +m4trace:/usr/share/aclocal-1.11/depend.m4:28: -1- AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl +AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl +AC_REQUIRE([AM_MAKE_INCLUDE])dnl +AC_REQUIRE([AM_DEP_TRACK])dnl + +ifelse([$1], CC, [depcc="$CC" am_compiler_list=], + [$1], CXX, [depcc="$CXX" am_compiler_list=], + [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], + [$1], UPC, [depcc="$UPC" am_compiler_list=], + [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], + [depcc="$$1" am_compiler_list=]) + +AC_CACHE_CHECK([dependency style of $depcc], + [am_cv_$1_dependencies_compiler_type], +[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then + # We make a subdir and do the tests there. Otherwise we can end up + # making bogus files that we don't know about and never remove. For + # instance it was reported that on HP-UX the gcc test will end up + # making a dummy file named `D' -- because `-MD' means `put the output + # in D'. + mkdir conftest.dir + # Copy depcomp to subdir because otherwise we won't find it if we're + # using a relative directory. + cp "$am_depcomp" conftest.dir + cd conftest.dir + # We will build objects and dependencies in a subdirectory because + # it helps to detect inapplicable dependency modes. For instance + # both Tru64's cc and ICC support -MD to output dependencies as a + # side effect of compilation, but ICC will put the dependencies in + # the current directory while Tru64 will put them in the object + # directory. + mkdir sub + + am_cv_$1_dependencies_compiler_type=none + if test "$am_compiler_list" = ""; then + am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` + fi + am__universal=false + m4_case([$1], [CC], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac], + [CXX], + [case " $depcc " in #( + *\ -arch\ *\ -arch\ *) am__universal=true ;; + esac]) + + for depmode in $am_compiler_list; do + # Setup a source with many dependencies, because some compilers + # like to wrap large dependency lists on column 80 (with \), and + # we should not choose a depcomp mode which is confused by this. + # + # We need to recreate these files for each test, as the compiler may + # overwrite some of them when testing with obscure command lines. + # This happens at least with the AIX C compiler. + : > sub/conftest.c + for i in 1 2 3 4 5 6; do + echo '#include "conftst'$i'.h"' >> sub/conftest.c + # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with + # Solaris 8's {/usr,}/bin/sh. + touch sub/conftst$i.h + done + echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf + + # We check with `-c' and `-o' for the sake of the "dashmstdout" + # mode. It turns out that the SunPro C++ compiler does not properly + # handle `-M -o', and we need to detect this. Also, some Intel + # versions had trouble with output in subdirs + am__obj=sub/conftest.${OBJEXT-o} + am__minus_obj="-o $am__obj" + case $depmode in + gcc) + # This depmode causes a compiler race in universal mode. + test "$am__universal" = false || continue + ;; + nosideeffect) + # after this tag, mechanisms are not by side-effect, so they'll + # only be used when explicitly requested + if test "x$enable_dependency_tracking" = xyes; then + continue + else + break + fi + ;; + msvisualcpp | msvcmsys) + # This compiler won't grok `-c -o', but also, the minuso test has + # not run yet. These depmodes are late enough in the game, and + # so weak that their functioning should not be impacted. + am__obj=conftest.${OBJEXT-o} + am__minus_obj= + ;; + none) break ;; + esac + if depmode=$depmode \ + source=sub/conftest.c object=$am__obj \ + depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ + $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ + >/dev/null 2>conftest.err && + grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && + grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && + grep $am__obj sub/conftest.Po > /dev/null 2>&1 && + ${MAKE-make} -s -f confmf > /dev/null 2>&1; then + # icc doesn't choke on unknown options, it will just issue warnings + # or remarks (even with -Werror). So we grep stderr for any message + # that says an option was ignored or not supported. + # When given -MP, icc 7.0 and 7.1 complain thusly: + # icc: Command line warning: ignoring option '-M'; no argument required + # The diagnosis changed in icc 8.0: + # icc: Command line remark: option '-MP' not supported + if (grep 'ignoring option' conftest.err || + grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else + am_cv_$1_dependencies_compiler_type=$depmode + break + fi + fi + done + + cd .. + rm -rf conftest.dir +else + am_cv_$1_dependencies_compiler_type=none +fi +]) +AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) +AM_CONDITIONAL([am__fastdep$1], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) +]) +m4trace:/usr/share/aclocal-1.11/depend.m4:163: -1- AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl +AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl +]) +m4trace:/usr/share/aclocal-1.11/depend.m4:171: -1- AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, +[ --disable-dependency-tracking speeds up one-time build + --enable-dependency-tracking do not reject slow dependency extractors]) +if test "x$enable_dependency_tracking" != xno; then + am_depcomp="$ac_aux_dir/depcomp" + AMDEPBACKSLASH='\' +fi +AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +AC_SUBST([AMDEPBACKSLASH])dnl +_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl +]) +m4trace:/usr/share/aclocal-1.11/depout.m4:14: -1- AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ + # Autoconf 2.62 quotes --file arguments for eval, but not when files + # are listed without --file. Let's play safe and only enable the eval + # if we detect the quoting. + case $CONFIG_FILES in + *\'*) eval set x "$CONFIG_FILES" ;; + *) set x $CONFIG_FILES ;; + esac + shift + for mf + do + # Strip MF so we end up with the name of the file. + mf=`echo "$mf" | sed -e 's/:.*$//'` + # Check whether this is an Automake generated Makefile or not. + # We used to match only the files named `Makefile.in', but + # some people rename them; so instead we look at the file content. + # Grep'ing the first line is not enough: some people post-process + # each Makefile.in and add a new line on top of each file to say so. + # Grep'ing the whole file is not good either: AIX grep has a line + # limit of 2048, but all sed's we know have understand at least 4000. + if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then + dirpart=`AS_DIRNAME("$mf")` + else + continue + fi + # Extract the definition of DEPDIR, am__include, and am__quote + # from the Makefile without running `make'. + DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` + test -z "$DEPDIR" && continue + am__include=`sed -n 's/^am__include = //p' < "$mf"` + test -z "am__include" && continue + am__quote=`sed -n 's/^am__quote = //p' < "$mf"` + # When using ansi2knr, U may be empty or an underscore; expand it + U=`sed -n 's/^U = //p' < "$mf"` + # Find all dependency output files, they are included files with + # $(DEPDIR) in their names. We invoke sed twice because it is the + # simplest approach to changing $(DEPDIR) to its actual value in the + # expansion. + for file in `sed -n " + s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ + sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do + # Make sure the directory exists. + test -f "$dirpart/$file" && continue + fdir=`AS_DIRNAME(["$file"])` + AS_MKDIR_P([$dirpart/$fdir]) + # echo "creating $dirpart/$file" + echo '# dummy' > "$dirpart/$file" + done + done +} +]) +m4trace:/usr/share/aclocal-1.11/depout.m4:75: -1- AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], + [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], + [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) +]) +m4trace:/usr/share/aclocal-1.11/init.m4:26: -1- AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl +dnl Autoconf wants to disallow AM_ names. We explicitly allow +dnl the ones we care about. +m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl +AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl +AC_REQUIRE([AC_PROG_INSTALL])dnl +if test "`cd $srcdir && pwd`" != "`pwd`"; then + # Use -I$(srcdir) only when $(srcdir) != ., so that make's output + # is not polluted with repeated "-I." + AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl + # test to see if srcdir already configured + if test -f $srcdir/config.status; then + AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) + fi +fi + +# test whether we have cygpath +if test -z "$CYGPATH_W"; then + if (cygpath --version) >/dev/null 2>/dev/null; then + CYGPATH_W='cygpath -w' + else + CYGPATH_W=echo + fi +fi +AC_SUBST([CYGPATH_W]) + +# Define the identity of the package. +dnl Distinguish between old-style and new-style calls. +m4_ifval([$2], +[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl + AC_SUBST([PACKAGE], [$1])dnl + AC_SUBST([VERSION], [$2])], +[_AM_SET_OPTIONS([$1])dnl +dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. +m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, + [m4_fatal([AC_INIT should be called with package and version arguments])])dnl + AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl + AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl + +_AM_IF_OPTION([no-define],, +[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl + +# Some tools Automake needs. +AC_REQUIRE([AM_SANITY_CHECK])dnl +AC_REQUIRE([AC_ARG_PROGRAM])dnl +AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) +AM_MISSING_PROG(AUTOCONF, autoconf) +AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) +AM_MISSING_PROG(AUTOHEADER, autoheader) +AM_MISSING_PROG(MAKEINFO, makeinfo) +AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl +AC_REQUIRE([AM_PROG_MKDIR_P])dnl +# We need awk for the "check" target. The system "awk" is bad on +# some platforms. +AC_REQUIRE([AC_PROG_AWK])dnl +AC_REQUIRE([AC_PROG_MAKE_SET])dnl +AC_REQUIRE([AM_SET_LEADING_DOT])dnl +_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], + [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +_AM_IF_OPTION([no-dependencies],, +[AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl +dnl The `parallel-tests' driver may need to know about EXEEXT, so add the +dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro +dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. +AC_CONFIG_COMMANDS_PRE(dnl +[m4_provide_if([_AM_COMPILER_EXEEXT], + [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl +]) +m4trace:/usr/share/aclocal-1.11/init.m4:126: -1- AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. +_am_arg=$1 +_am_stamp_count=1 +for _am_header in $config_headers :; do + case $_am_header in + $_am_arg | $_am_arg:* ) + break ;; + * ) + _am_stamp_count=`expr $_am_stamp_count + 1` ;; + esac +done +echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) +m4trace:/usr/share/aclocal-1.11/install-sh.m4:11: -1- AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +if test x"${install_sh}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; + *) + install_sh="\${SHELL} $am_aux_dir/install-sh" + esac +fi +AC_SUBST(install_sh)]) +m4trace:/usr/share/aclocal-1.11/lead-dot.m4:12: -1- AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null +mkdir .tst 2>/dev/null +if test -d .tst; then + am__leading_dot=. +else + am__leading_dot=_ +fi +rmdir .tst 2>/dev/null +AC_SUBST([am__leading_dot])]) +m4trace:/usr/share/aclocal-1.11/make.m4:14: -1- AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} +cat > confinc << 'END' +am__doit: + @echo this is the am__doit target +.PHONY: am__doit +END +# If we don't find an include directive, just comment out the code. +AC_MSG_CHECKING([for style of include used by $am_make]) +am__include="#" +am__quote= +_am_result=none +# First try GNU make style include. +echo "include confinc" > confmf +# Ignore all kinds of additional output from `make'. +case `$am_make -s -f confmf 2> /dev/null` in #( +*the\ am__doit\ target*) + am__include=include + am__quote= + _am_result=GNU + ;; +esac +# Now try BSD make style include. +if test "$am__include" = "#"; then + echo '.include "confinc"' > confmf + case `$am_make -s -f confmf 2> /dev/null` in #( + *the\ am__doit\ target*) + am__include=.include + am__quote="\"" + _am_result=BSD + ;; + esac +fi +AC_SUBST([am__include]) +AC_SUBST([am__quote]) +AC_MSG_RESULT([$_am_result]) +rm -f confinc confmf +]) +m4trace:/usr/share/aclocal-1.11/missing.m4:14: -1- AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) +$1=${$1-"${am_missing_run}$2"} +AC_SUBST($1)]) +m4trace:/usr/share/aclocal-1.11/missing.m4:24: -1- AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl +AC_REQUIRE_AUX_FILE([missing])dnl +if test x"${MISSING+set}" != xset; then + case $am_aux_dir in + *\ * | *\ *) + MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; + *) + MISSING="\${SHELL} $am_aux_dir/missing" ;; + esac +fi +# Use eval to expand $SHELL +if eval "$MISSING --run true"; then + am_missing_run="$MISSING --run " +else + am_missing_run= + AC_MSG_WARN([`missing' script is too old or missing]) +fi +]) +m4trace:/usr/share/aclocal-1.11/mkdirp.m4:11: -1- AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl +AC_REQUIRE([AC_PROG_MKDIR_P])dnl +dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, +dnl while keeping a definition of mkdir_p for backward compatibility. +dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. +dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of +dnl Makefile.ins that do not define MKDIR_P, so we do our own +dnl adjustment using top_builddir (which is defined more often than +dnl MKDIR_P). +AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl +case $mkdir_p in + [[\\/$]]* | ?:[[\\/]]*) ;; + */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; +esac +]) +m4trace:/usr/share/aclocal-1.11/options.m4:13: -1- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) +m4trace:/usr/share/aclocal-1.11/options.m4:19: -1- AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) +m4trace:/usr/share/aclocal-1.11/options.m4:25: -1- AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) +m4trace:/usr/share/aclocal-1.11/options.m4:31: -1- AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) +m4trace:/usr/share/aclocal-1.11/python.m4:35: -1- AC_DEFUN([AM_PATH_PYTHON], [ + dnl Find a Python interpreter. Python versions prior to 2.0 are not + dnl supported. (2.0 was released on October 16, 2000). + m4_define_default([_AM_PYTHON_INTERPRETER_LIST], + [python python2 python3 python3.0 python2.5 python2.4 python2.3 python2.2 dnl +python2.1 python2.0]) + + m4_if([$1],[],[ + dnl No version check is needed. + # Find any Python interpreter. + if test -z "$PYTHON"; then + AC_PATH_PROGS([PYTHON], _AM_PYTHON_INTERPRETER_LIST, :) + fi + am_display_PYTHON=python + ], [ + dnl A version check is needed. + if test -n "$PYTHON"; then + # If the user set $PYTHON, use it and don't search something else. + AC_MSG_CHECKING([whether $PYTHON version >= $1]) + AM_PYTHON_CHECK_VERSION([$PYTHON], [$1], + [AC_MSG_RESULT(yes)], + [AC_MSG_ERROR(too old)]) + am_display_PYTHON=$PYTHON + else + # Otherwise, try each interpreter until we find one that satisfies + # VERSION. + AC_CACHE_CHECK([for a Python interpreter with version >= $1], + [am_cv_pathless_PYTHON],[ + for am_cv_pathless_PYTHON in _AM_PYTHON_INTERPRETER_LIST none; do + test "$am_cv_pathless_PYTHON" = none && break + AM_PYTHON_CHECK_VERSION([$am_cv_pathless_PYTHON], [$1], [break]) + done]) + # Set $PYTHON to the absolute path of $am_cv_pathless_PYTHON. + if test "$am_cv_pathless_PYTHON" = none; then + PYTHON=: + else + AC_PATH_PROG([PYTHON], [$am_cv_pathless_PYTHON]) + fi + am_display_PYTHON=$am_cv_pathless_PYTHON + fi + ]) + + if test "$PYTHON" = :; then + dnl Run any user-specified action, or abort. + m4_default([$3], [AC_MSG_ERROR([no suitable Python interpreter found])]) + else + + dnl Query Python for its version number. Getting [:3] seems to be + dnl the best way to do this; it's what "site.py" does in the standard + dnl library. + + AC_CACHE_CHECK([for $am_display_PYTHON version], [am_cv_python_version], + [am_cv_python_version=`$PYTHON -c "import sys; sys.stdout.write(sys.version[[:3]])"`]) + AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) + + dnl Use the values of $prefix and $exec_prefix for the corresponding + dnl values of PYTHON_PREFIX and PYTHON_EXEC_PREFIX. These are made + dnl distinct variables so they can be overridden if need be. However, + dnl general consensus is that you shouldn't need this ability. + + AC_SUBST([PYTHON_PREFIX], ['${prefix}']) + AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) + + dnl At times (like when building shared libraries) you may want + dnl to know which OS platform Python thinks this is. + + AC_CACHE_CHECK([for $am_display_PYTHON platform], [am_cv_python_platform], + [am_cv_python_platform=`$PYTHON -c "import sys; sys.stdout.write(sys.platform)"`]) + AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) + + + dnl Set up 4 directories: + + dnl pythondir -- where to install python scripts. This is the + dnl site-packages directory, not the python standard library + dnl directory like in previous automake betas. This behavior + dnl is more consistent with lispdir.m4 for example. + dnl Query distutils for this directory. distutils does not exist in + dnl Python 1.5, so we fall back to the hardcoded directory if it + dnl doesn't work. + AC_CACHE_CHECK([for $am_display_PYTHON script directory], + [am_cv_python_pythondir], + [if test "x$prefix" = xNONE + then + am_py_prefix=$ac_default_prefix + else + am_py_prefix=$prefix + fi + am_cv_python_pythondir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(0,0,prefix='$am_py_prefix'))" 2>/dev/null || + echo "$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pythondir in + $am_py_prefix*) + am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` + am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` + ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pythondir], [$am_cv_python_pythondir]) + + dnl pkgpythondir -- $PACKAGE directory under pythondir. Was + dnl PYTHON_SITE_PACKAGE in previous betas, but this naming is + dnl more consistent with the rest of automake. + + AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) + + dnl pyexecdir -- directory for installing python extension modules + dnl (shared libraries) + dnl Query distutils for this directory. distutils does not exist in + dnl Python 1.5, so we fall back to the hardcoded directory if it + dnl doesn't work. + AC_CACHE_CHECK([for $am_display_PYTHON extension module directory], + [am_cv_python_pyexecdir], + [if test "x$exec_prefix" = xNONE + then + am_py_exec_prefix=$am_py_prefix + else + am_py_exec_prefix=$exec_prefix + fi + am_cv_python_pyexecdir=`$PYTHON -c "import sys; from distutils import sysconfig; sys.stdout.write(sysconfig.get_python_lib(1,0,prefix='$am_py_exec_prefix'))" 2>/dev/null || + echo "$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages"` + case $am_cv_python_pyexecdir in + $am_py_exec_prefix*) + am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` + am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` + ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; + esac + ]) + AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) + + dnl pkgpyexecdir -- $(pyexecdir)/$(PACKAGE) + + AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) + + dnl Run any user-specified action. + $2 + fi + +]) +m4trace:/usr/share/aclocal-1.11/python.m4:199: -1- AC_DEFUN([AM_PYTHON_CHECK_VERSION], [prog="import sys +# split strings by '.' and convert to numeric. Append some zeros +# because we need at least 4 digits for the hex conversion. +# map returns an iterator in Python 3.0 and a list in 2.x +minver = list(map(int, '$2'.split('.'))) + [[0, 0, 0]] +minverhex = 0 +# xrange is not present in Python 3.0 and range returns an iterator +for i in list(range(0, 4)): minverhex = (minverhex << 8) + minver[[i]] +sys.exit(sys.hexversion < minverhex)" + AS_IF([AM_RUN_LOG([$1 -c "$prog"])], [$3], [$4])]) +m4trace:/usr/share/aclocal-1.11/runlog.m4:12: -1- AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD + ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD + (exit $ac_status); }]) +m4trace:/usr/share/aclocal-1.11/sanity.m4:14: -1- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) +# Just in case +sleep 1 +echo timestamp > conftest.file +# Reject unsafe characters in $srcdir or the absolute working directory +# name. Accept space and tab only in the latter. +am_lf=' +' +case `pwd` in + *[[\\\"\#\$\&\'\`$am_lf]]*) + AC_MSG_ERROR([unsafe absolute working directory name]);; +esac +case $srcdir in + *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) + AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; +esac + +# Do `set' in a subshell so we don't clobber the current shell's +# arguments. Must try -L first in case configure is actually a +# symlink; some systems play weird games with the mod time of symlinks +# (eg FreeBSD returns the mod time of the symlink's containing +# directory). +if ( + set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` + if test "$[*]" = "X"; then + # -L didn't work. + set X `ls -t "$srcdir/configure" conftest.file` + fi + rm -f conftest.file + if test "$[*]" != "X $srcdir/configure conftest.file" \ + && test "$[*]" != "X conftest.file $srcdir/configure"; then + + # If neither matched, then we have a broken ls. This can happen + # if, for instance, CONFIG_SHELL is bash and it inherits a + # broken ls alias from the environment. This has actually + # happened. Such a system could not be considered "sane". + AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken +alias in your environment]) + fi + + test "$[2]" = conftest.file + ) +then + # Ok. + : +else + AC_MSG_ERROR([newly created file is older than distributed files! +Check your system clock]) +fi +AC_MSG_RESULT(yes)]) +m4trace:/usr/share/aclocal-1.11/silent.m4:14: -1- AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], +[ --enable-silent-rules less verbose build output (undo: `make V=1') + --disable-silent-rules verbose build output (undo: `make V=0')]) +case $enable_silent_rules in +yes) AM_DEFAULT_VERBOSITY=0;; +no) AM_DEFAULT_VERBOSITY=1;; +*) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; +esac +AC_SUBST([AM_DEFAULT_VERBOSITY])dnl +AM_BACKSLASH='\' +AC_SUBST([AM_BACKSLASH])dnl +_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl +]) +m4trace:/usr/share/aclocal-1.11/strip.m4:17: -1- AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl +# Installed binaries are usually stripped using `strip' when the user +# run `make install-strip'. However `strip' might not be the right +# tool to use in cross-compilation environments, therefore Automake +# will honor the `STRIP' environment variable to overrule this program. +dnl Don't test for $cross_compiling = yes, because it might be `maybe'. +if test "$cross_compiling" != no; then + AC_CHECK_TOOL([STRIP], [strip], :) +fi +INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" +AC_SUBST([INSTALL_STRIP_PROGRAM])]) +m4trace:/usr/share/aclocal-1.11/substnot.m4:14: -1- AC_DEFUN([_AM_SUBST_NOTMAKE]) +m4trace:/usr/share/aclocal-1.11/substnot.m4:19: -1- AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) +m4trace:/usr/share/aclocal-1.11/tar.m4:24: -1- AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. +AM_MISSING_PROG([AMTAR], [tar]) +m4_if([$1], [v7], + [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], + [m4_case([$1], [ustar],, [pax],, + [m4_fatal([Unknown tar format])]) +AC_MSG_CHECKING([how to create a $1 tar archive]) +# Loop over all known methods to create a tar archive until one works. +_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' +_am_tools=${am_cv_prog_tar_$1-$_am_tools} +# Do not fold the above two line into one, because Tru64 sh and +# Solaris sh will not grok spaces in the rhs of `-'. +for _am_tool in $_am_tools +do + case $_am_tool in + gnutar) + for _am_tar in tar gnutar gtar; + do + AM_RUN_LOG([$_am_tar --version]) && break + done + am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' + am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' + am__untar="$_am_tar -xf -" + ;; + plaintar) + # Must skip GNU tar: if it does not support --format= it doesn't create + # ustar tarball either. + (tar --version) >/dev/null 2>&1 && continue + am__tar='tar chf - "$$tardir"' + am__tar_='tar chf - "$tardir"' + am__untar='tar xf -' + ;; + pax) + am__tar='pax -L -x $1 -w "$$tardir"' + am__tar_='pax -L -x $1 -w "$tardir"' + am__untar='pax -r' + ;; + cpio) + am__tar='find "$$tardir" -print | cpio -o -H $1 -L' + am__tar_='find "$tardir" -print | cpio -o -H $1 -L' + am__untar='cpio -i -H $1 -d' + ;; + none) + am__tar=false + am__tar_=false + am__untar=false + ;; + esac + + # If the value was cached, stop now. We just wanted to have am__tar + # and am__untar set. + test -n "${am_cv_prog_tar_$1}" && break + + # tar/untar a dummy directory, and stop if the command works + rm -rf conftest.dir + mkdir conftest.dir + echo GrepMe > conftest.dir/file + AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) + rm -rf conftest.dir + if test -s conftest.tar; then + AM_RUN_LOG([$am__untar /dev/null 2>&1 && break + fi +done +rm -rf conftest.dir + +AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) +AC_MSG_RESULT([$am_cv_prog_tar_$1])]) +AC_SUBST([am__tar]) +AC_SUBST([am__untar]) +]) +m4trace:config/autotroll.m4:70: -1- m4_pattern_forbid([^AT_]) +m4trace:config/autotroll.m4:71: -1- m4_pattern_forbid([^_AT_]) +m4trace:config/autotroll.m4:97: -1- AC_DEFUN([AT_WITH_QT], [ AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_CANONICAL_BUILD]) + AC_REQUIRE([AC_PROG_CXX]) + + test x"$TROLL" != x && echo 'ViM rox emacs.' + +dnl Memo: AC_ARG_WITH(package, help-string, [if-given], [if-not-given]) + AC_ARG_WITH([qt], + [AS_HELP_STRING([--with-qt], + [Path to Qt @<:@Look in PATH and /usr/local/Trolltech@:>@])], + [QT_PATH=$withval], [QT_PATH=]) + + # Find Qt. + if test -d /usr/local/Trolltech; then + # Try to find the latest version. + tmp_qt_paths=`echo /usr/local/Trolltech/*/bin | tr ' ' '\n' | sort -nr \ + | xargs | sed 's/ */:/g'` + fi + + # Find qmake. + AC_PATH_PROGS([QMAKE], [qmake-qt4${EXEEXT}], [missing], [$QT_DIR:$QT_PATH:$PATH:$tmp_qt_paths]) + if test x"$QMAKE" = xmissing; then + AC_PATH_PROGS([QMAKE], [qmake${EXEEXT}], [missing], [$QT_DIR:$QT_PATH:$PATH:$tmp_qt_paths]) + if test x"$QMAKE" = xmissing; then + AC_MSG_ERROR([Cannot find qmake in your PATH. Try using --with-qt.]) + fi + fi + + # Find moc (Meta Object Compiler). + AC_PATH_PROGS([MOC], [moc-qt4${EXEEXT}], [missing], [$QT_PATH:$PATH:$tmp_qt_paths]) + if test x"$MOC" = xmissing; then + AC_PATH_PROGS([MOC], [moc${EXEEXT}], [missing], [$QT_PATH:$PATH:$tmp_qt_paths]) + if test x"$MOC" = xmissing; then + AC_MSG_ERROR([Cannot find moc (Meta Object Compiler) in your PATH. Try using --with-qt.]) + fi + fi + + # Find uic (User Interface Compiler). + AC_PATH_PROGS([UIC], [uic-qt4${EXEEXT}], [missing], [$QT_PATH:$PATH:$tmp_qt_paths]) + if test x"$UIC" = xmissing; then + AC_PATH_PROGS([UIC], [uic${EXEEXT}], [missing], [$QT_PATH:$PATH:$tmp_qt_paths]) + if test x"$UIC" = xmissing; then + AC_MSG_ERROR([Cannot find uic (User Interface Compiler) in your PATH. Try using --with-qt.]) + fi + fi + + # Find rcc (Qt Resource Compiler). + AC_PATH_PROGS([RCC], [rcc-qt4${EXEEXT}], [false], [$QT_PATH:$PATH:$tmp_qt_paths]) + if test x"$RCC" = xfalse; then + AC_PATH_PROGS([RCC], [rcc${EXEEXT}], [false], [$QT_PATH:$PATH:$tmp_qt_paths]) + if test x"$RCC" = xfalse; then + AC_MSG_WARN([Cannot find rcc (Qt Resource Compiler) in your PATH. Try using --with-qt.]) + fi + fi + + # If we don't know the path to Qt, guess it from the path to qmake. + if test x"$QT_PATH" = x; then + QT_PATH=`dirname "$QMAKE"` + fi + if test x"$QT_PATH" = x; then + AC_MSG_ERROR([Cannot find the path to your Qt install. Use --with-qt.]) + fi + AC_SUBST([QT_PATH]) + + # Get ready to build a test-app with Qt. + + # Look for a writable temporary directory. + AC_ARG_VAR([TMPDIR], [A temporary directory with write access @<:@/tmp@:>@]) + if test x"$TMPDIR" = x || test ! -d "$TMPDIR" || test ! -w "$TMPDIR"; then + echo "$as_me:$LINENO: no TMPDIR or bad TMPDIR ($TMPDIR)" \ + >&AS_MESSAGE_LOG_FD + for i in /tmp /var/tmp; do + if test -d "$i" && test -w "$i"; then + TMPDIR=$i + export TMPDIR + echo "$as_me:$LINENO: setting TMPDIR=$TMPDIR" >&AS_MESSAGE_LOG_FD + break + fi + done + fi + + # Kludge!! QMake has a very strange behavior. For instance, if you + # install Qt under your $HOME and run QMake somewhere else under your + # $HOME, it will try to be clever and produce Makefiles with relative + # include paths. In order to avoid this, we will test QMake from a + # temporary directory (usually /tmp). Note that this problem was only + # observed with Qt 4. + my_configure_pwd=`pwd` + my_tmpdir="$TMPDIR/conftest$$.dir" + test -d "$my_tmpdir" || mkdir "$my_tmpdir" + if test -w "$my_tmpdir" && cd "$my_tmpdir" + then + : + else + AC_MSG_ERROR([Cannot cd to or write in $my_tmpdir]) + fi + cat >conftest.h <<_ASEOF +#include + +class Foo: public QObject +{ + Q_OBJECT; +public: + Foo(); + ~Foo() {} +public slots: + void setValue(int value); +signals: + void valueChanged(int newValue); +private: + int value_; +}; +_ASEOF + + cat >conftest.cpp <<_ASEOF +#include "conftest.h" +Foo::Foo() + : value_ (42) +{ + connect(this, SIGNAL(valueChanged(int)), this, SLOT(setValue(int))); +} + +void Foo::setValue(int value) +{ + value_ = value; +} + +int main() +{ + Foo f; +} +_ASEOF + if $QMAKE -project; then :; else + AC_MSG_ERROR([Calling $QMAKE -project failed.]) + fi + + # Find the .pro file generated by qmake. + pro_file='conftest.dir.pro' + test -f $pro_file || pro_file=`echo *.pro` + if test -f "$pro_file"; then :; else + AC_MSG_ERROR([Can't find the .pro file generated by Qmake.]) + fi + +dnl Tweak the value of QT in the .pro if have been the 1st arg. +m4_ifval([$1], [_AT_TWEAK_PRO_FILE([QT], [$1])]) + +dnl Tweak the value of CONFIG in the .pro if have been given a 2nd arg. +m4_ifval([$2], [_AT_TWEAK_PRO_FILE([CONFIG], [$2])]) + +m4_ifval([$3], +[ # Add the extra-settings the user wants to set in the .pro + echo "$3" >>"$pro_file" +]) + + echo "$as_me:$LINENO: Invoking $QMAKE on $pro_file" >&AS_MESSAGE_LOG_FD + sed 's/^/| /' "$pro_file" >&AS_MESSAGE_LOG_FD + + if $QMAKE; then :; else + AC_MSG_ERROR([Calling $QMAKE failed.]) + fi + # Try to compile a simple Qt app. + AC_CACHE_CHECK([whether we can build a simple Qt app], [at_cv_qt_build], + [at_cv_qt_build=ko + : ${MAKE=make} + + if $MAKE >&AS_MESSAGE_LOG_FD 2>&1; then + at_cv_qt_build='ok, looks like Qt 4' + else + echo "$as_me:$LINENO: Build failed, trying to #include \ +instead" >&AS_MESSAGE_LOG_FD + sed 's///' conftest.h > tmp.h && mv tmp.h conftest.h + if $MAKE >&AS_MESSAGE_LOG_FD 2>&1; then + at_cv_qt_build='ok, looks like Qt 3' + else + # Sometimes (such as on Debian) build will fail because Qt hasn't been + # installed in debug mode and qmake tries (by default) to build apps in + # debug mode => Try again in release mode. + echo "$as_me:$LINENO: Build failed, trying to enforce release mode" \ + >&AS_MESSAGE_LOG_FD + + _AT_TWEAK_PRO_FILE([CONFIG], [+release]) + + sed 's///' conftest.h > tmp.h && mv tmp.h conftest.h + if $MAKE >&AS_MESSAGE_LOG_FD 2>&1; then + at_cv_qt_build='ok, looks like Qt 4, release mode forced' + else + echo "$as_me:$LINENO: Build failed, trying to #include \ +instead" >&AS_MESSAGE_LOG_FD + sed 's///' conftest.h > tmp.h && mv tmp.h conftest.h + if $MAKE >&AS_MESSAGE_LOG_FD 2>&1; then + at_cv_qt_build='ok, looks like Qt 3, release mode forced' + else + at_cv_qt_build=ko + echo "$as_me:$LINENO: failed program was:" >&AS_MESSAGE_LOG_FD + sed 's/^/| /' conftest.h >&AS_MESSAGE_LOG_FD + echo "$as_me:$LINENO: failed program was:" >&AS_MESSAGE_LOG_FD + sed 's/^/| /' conftest.cpp >&AS_MESSAGE_LOG_FD + fi # if make with Qt3-style #include and release mode forced. + fi # if make with Qt4-style #include and release mode forced. + fi # if make with Qt3-style #include. + fi # if make with Qt4-style #include. + ])dnl end: AC_CACHE_CHECK(at_cv_qt_build) + + if test x"$at_cv_qt_build" = xko; then + AC_MSG_ERROR([Cannot build a test Qt program]) + fi + QT_VERSION_MAJOR=`echo "$at_cv_qt_build" | sed 's/^[^0-9]*//'` + AC_SUBST([QT_VERSION_MAJOR]) + + # This sed filter is applied after an expression of the form: /^FOO.*=/!d; + # It starts by removing the beginning of the line, removing references to + # SUBLIBS, removing unnecessary whitespaces at the beginning, and prefixes + # all variable uses by QT_. + qt_sed_filter='s///; + s/$(SUBLIBS)//g; + s/^ *//; + s/\$(\(@<:@A-Z_@:>@@<:@A-Z_@:>@*\))/$(QT_\1)/g' + + # Find the Makefile (qmake happens to generate a fake Makefile which invokes + # a Makefile.Debug or Makefile.Release). We we have both, we'll pick the + # Makefile.Release. The reason is that the main difference is that release + # uses -Os and debug -g. We can override -Os by passing another -O but we + # usually don't override -g. + if test -f Makefile.Release; then + at_mfile='Makefile.Release' + else + at_mfile='Makefile' + fi + if test -f $at_mfile; then :; else + cd "$my_configure_pwd" + AC_MSG_ERROR([Cannot find the Makefile generated by qmake.]) + fi + + # Find the DEFINES of Qt (should have been named CPPFLAGS). + AC_CACHE_CHECK([for the DEFINES to use with Qt], [at_cv_env_QT_DEFINES], + [at_cv_env_QT_DEFINES=`sed "/^DEFINES@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile`]) + AC_SUBST([QT_DEFINES], [$at_cv_env_QT_DEFINES]) + + # Find the CFLAGS of Qt (We can use Qt in C?!) + AC_CACHE_CHECK([for the CFLAGS to use with Qt], [at_cv_env_QT_CFLAGS], + [at_cv_env_QT_CFLAGS=`sed "/^CFLAGS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile`]) + AC_SUBST([QT_CFLAGS], [$at_cv_env_QT_CFLAGS]) + + # Find the CXXFLAGS of Qt. + AC_CACHE_CHECK([for the CXXFLAGS to use with Qt], [at_cv_env_QT_CXXFLAGS], + [at_cv_env_QT_CXXFLAGS=`sed "/^CXXFLAGS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile`]) + AC_SUBST([QT_CXXFLAGS], [$at_cv_env_QT_CXXFLAGS]) + + # Find the INCPATH of Qt. + AC_CACHE_CHECK([for the INCPATH to use with Qt], [at_cv_env_QT_INCPATH], + [at_cv_env_QT_INCPATH=`sed "/^INCPATH@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile`]) + AC_SUBST([QT_INCPATH], [$at_cv_env_QT_INCPATH]) + + AC_SUBST([QT_CPPFLAGS], ["$at_cv_env_QT_DEFINES $at_cv_env_QT_INCPATH"]) + + # Find the LFLAGS of Qt (Should have been named LDFLAGS) + AC_CACHE_CHECK([for the LDFLAGS to use with Qt], [at_cv_env_QT_LDFLAGS], + [at_cv_env_QT_LDFLAGS=`sed "/^LDFLAGS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile`]) + AC_SUBST([QT_LFLAGS], [$at_cv_env_QT_LDFLAGS]) + AC_SUBST([QT_LDFLAGS], [$at_cv_env_QT_LDFLAGS]) + + AC_MSG_CHECKING([whether host operating system is Darwin]) + at_darwin="no" + case $host_os in + darwin*) + at_darwin="yes" + ;; + esac + AC_MSG_RESULT([$at_darwin]) + + # Find the LIBS of Qt. + AC_CACHE_CHECK([for the LIBS to use with Qt], [at_cv_env_QT_LIBS], + [at_cv_env_QT_LIBS=`sed "/^LIBS@<:@ @:>@*=/!d;$qt_sed_filter" $at_mfile` + if test x$at_darwin = xyes; then + # Fix QT_LIBS: as of today Libtool (GNU Libtool 1.5.23a) doesn't handle + # -F properly. The "bug" has been fixed on 22 October 2006 + # by Peter O'Gorman but we provide backward compatibility here. + at_cv_env_QT_LIBS=`echo "$at_cv_env_QT_LIBS" \ + | sed 's/^-F/-Wl,-F/;s/ -F/ -Wl,-F/g'` + fi + ]) + AC_SUBST([QT_LIBS], [$at_cv_env_QT_LIBS]) + + cd "$my_configure_pwd" || echo 'WTF!' + rm -rf "$my_tmpdir" +]) +m4trace:config/autotroll.m4:389: -1- AC_DEFUN([AT_REQUIRE_QT_VERSION], [ AC_PREREQ([2.60]) + if test x"$QMAKE" = x; then + AC_MSG_ERROR([\$QMAKE is empty. \ +Did you invoke AT@&t@_WITH_QT before AT@&t@_REQUIRE_QT_VERSION?]) + fi + AC_CACHE_CHECK([for Qt's version], [at_cv_QT_VERSION], + [echo "$as_me:$LINENO: Running $QMAKE --version:" >&AS_MESSAGE_LOG_FD + $QMAKE --version >&AS_MESSAGE_LOG_FD 2>&1 + qmake_version_sed=['/^.*\([0-9]\.[0-9]\.[0-9]\).*$/!d;s//\1/'] + at_cv_QT_VERSION=`$QMAKE --version 2>&1 | sed "$qmake_version_sed"`]) + if test x"$at_cv_QT_VERSION" = x; then + AC_MSG_ERROR([Cannot detect Qt's version.]) + fi + AC_SUBST([QT_VERSION], [$at_cv_QT_VERSION]) + AS_VERSION_COMPARE([$QT_VERSION], [$1], + [AC_MSG_ERROR([This package requires Qt $1 or above.])]) +]) +m4trace:config/autotroll.m4:416: -1- AC_DEFUN([_AT_TWEAK_PRO_FILE], [ # Tweak the value of $1 in the .pro file for $2. + + qt_conf='' + for at_mod in $2; do + at_mod=`echo "$at_mod" | sed 's/^-//; tough + s/^+//; beef + :ough + s/^/$1 -= /;n + :eef + s/^/$1 += /'` + qt_conf="$qt_conf +$at_mod" + done + echo "$qt_conf" | sed 1d >>"$pro_file" +]) +m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?A[CHUM]_]) +m4trace:configure.ac:1: -1- m4_pattern_forbid([_AC_]) +m4trace:configure.ac:1: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) +m4trace:configure.ac:1: -1- m4_pattern_allow([^AS_FLAGS$]) +m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?m4_]) +m4trace:configure.ac:1: -1- m4_pattern_forbid([^dnl$]) +m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?AS_]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^SHELL$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PATH_SEPARATOR$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_URL$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^exec_prefix$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^prefix$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^program_transform_name$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^bindir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^sbindir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^libexecdir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^datarootdir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^datadir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^sysconfdir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^sharedstatedir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^localstatedir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^includedir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^oldincludedir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^docdir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^infodir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^htmldir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^dvidir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^pdfdir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^psdir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^libdir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^localedir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^mandir$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_URL$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^DEFS$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_C$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_N$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_T$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^build_alias$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^host_alias$]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^target_alias$]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^MGL_RELEASE$]) +m4trace:configure.ac:21: -1- m4_pattern_allow([^MGL_CURRENT$]) +m4trace:configure.ac:22: -1- m4_pattern_allow([^MGL_REVISION$]) +m4trace:configure.ac:23: -1- m4_pattern_allow([^MGL_AGE$]) +m4trace:configure.ac:25: -1- AM_INIT_AUTOMAKE +m4trace:configure.ac:25: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) +m4trace:configure.ac:25: -1- AM_SET_CURRENT_AUTOMAKE_VERSION +m4trace:configure.ac:25: -1- AM_AUTOMAKE_VERSION([1.11.1]) +m4trace:configure.ac:25: -1- _AM_AUTOCONF_VERSION([2.67]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^INSTALL_DATA$]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^am__isrc$]) +m4trace:configure.ac:25: -1- _AM_SUBST_NOTMAKE([am__isrc]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^CYGPATH_W$]) +m4trace:configure.ac:25: -1- _AM_SET_OPTIONS([]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.ac:25: -1- _AM_IF_OPTION([no-define], [], [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) + AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])]) +m4trace:configure.ac:25: -2- _AM_MANGLE_OPTION([no-define]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.ac:25: -1- AM_SANITY_CHECK +m4trace:configure.ac:25: -1- AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) +m4trace:configure.ac:25: -1- AM_MISSING_HAS_RUN +m4trace:configure.ac:25: -1- AM_AUX_DIR_EXPAND +m4trace:configure.ac:25: -1- m4_pattern_allow([^ACLOCAL$]) +m4trace:configure.ac:25: -1- AM_MISSING_PROG([AUTOCONF], [autoconf]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^AUTOCONF$]) +m4trace:configure.ac:25: -1- AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^AUTOMAKE$]) +m4trace:configure.ac:25: -1- AM_MISSING_PROG([AUTOHEADER], [autoheader]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^AUTOHEADER$]) +m4trace:configure.ac:25: -1- AM_MISSING_PROG([MAKEINFO], [makeinfo]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^MAKEINFO$]) +m4trace:configure.ac:25: -1- AM_PROG_INSTALL_SH +m4trace:configure.ac:25: -1- m4_pattern_allow([^install_sh$]) +m4trace:configure.ac:25: -1- AM_PROG_INSTALL_STRIP +m4trace:configure.ac:25: -1- m4_pattern_allow([^STRIP$]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) +m4trace:configure.ac:25: -1- AM_PROG_MKDIR_P +m4trace:configure.ac:25: -1- m4_pattern_allow([^MKDIR_P$]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^mkdir_p$]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^AWK$]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^SET_MAKE$]) +m4trace:configure.ac:25: -1- AM_SET_LEADING_DOT +m4trace:configure.ac:25: -1- m4_pattern_allow([^am__leading_dot$]) +m4trace:configure.ac:25: -1- _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], + [_AM_PROG_TAR([v7])])]) +m4trace:configure.ac:25: -2- _AM_MANGLE_OPTION([tar-ustar]) +m4trace:configure.ac:25: -1- _AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])]) +m4trace:configure.ac:25: -2- _AM_MANGLE_OPTION([tar-pax]) +m4trace:configure.ac:25: -1- _AM_PROG_TAR([v7]) +m4trace:configure.ac:25: -1- AM_MISSING_PROG([AMTAR], [tar]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^AMTAR$]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^am__tar$]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^am__untar$]) +m4trace:configure.ac:25: -1- _AM_IF_OPTION([no-dependencies], [], [AC_PROVIDE_IFELSE([AC_PROG_CC], + [_AM_DEPENDENCIES(CC)], + [define([AC_PROG_CC], + defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_CXX], + [_AM_DEPENDENCIES(CXX)], + [define([AC_PROG_CXX], + defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl +AC_PROVIDE_IFELSE([AC_PROG_OBJC], + [_AM_DEPENDENCIES(OBJC)], + [define([AC_PROG_OBJC], + defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl +]) +m4trace:configure.ac:25: -2- _AM_MANGLE_OPTION([no-dependencies]) +m4trace:configure.ac:25: -1- _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])]) +m4trace:configure.ac:25: -2- _AM_MANGLE_OPTION([silent-rules]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^CFLAGS$]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^ac_ct_CC$]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^EXEEXT$]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^OBJEXT$]) +m4trace:configure.ac:27: -1- _AM_DEPENDENCIES([CC]) +m4trace:configure.ac:27: -1- AM_SET_DEPDIR +m4trace:configure.ac:27: -1- m4_pattern_allow([^DEPDIR$]) +m4trace:configure.ac:27: -1- AM_OUTPUT_DEPENDENCY_COMMANDS +m4trace:configure.ac:27: -1- AM_MAKE_INCLUDE +m4trace:configure.ac:27: -1- m4_pattern_allow([^am__include$]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^am__quote$]) +m4trace:configure.ac:27: -1- AM_DEP_TRACK +m4trace:configure.ac:27: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^AMDEP_TRUE$]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^AMDEP_FALSE$]) +m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) +m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) +m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^CCDEPMODE$]) +m4trace:configure.ac:27: -1- AM_CONDITIONAL([am__fastdepCC], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) +m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) +m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) +m4trace:configure.ac:28: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:28: -1- m4_pattern_allow([^CXXFLAGS$]) +m4trace:configure.ac:28: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:28: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:28: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:28: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:28: -1- m4_pattern_allow([^ac_ct_CXX$]) +m4trace:configure.ac:28: -1- _AM_DEPENDENCIES([CXX]) +m4trace:configure.ac:28: -1- m4_pattern_allow([^CXXDEPMODE$]) +m4trace:configure.ac:28: -1- AM_CONDITIONAL([am__fastdepCXX], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3]) +m4trace:configure.ac:28: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$]) +m4trace:configure.ac:28: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$]) +m4trace:configure.ac:28: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE]) +m4trace:configure.ac:28: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE]) +m4trace:configure.ac:31: -1- AC_LIBTOOL_WIN32_DLL +m4trace:configure.ac:31: -1- _m4_warn([obsolete], [The macro `AC_LIBTOOL_WIN32_DLL' is obsolete. +You should run autoupdate.], [/usr/share/aclocal/ltoptions.m4:145: AC_LIBTOOL_WIN32_DLL is expanded from... +configure.ac:31: the top level]) +m4trace:configure.ac:31: -1- m4_pattern_allow([^build$]) +m4trace:configure.ac:31: -1- m4_pattern_allow([^build_cpu$]) +m4trace:configure.ac:31: -1- m4_pattern_allow([^build_vendor$]) +m4trace:configure.ac:31: -1- m4_pattern_allow([^build_os$]) +m4trace:configure.ac:31: -1- m4_pattern_allow([^host$]) +m4trace:configure.ac:31: -1- m4_pattern_allow([^host_cpu$]) +m4trace:configure.ac:31: -1- m4_pattern_allow([^host_vendor$]) +m4trace:configure.ac:31: -1- m4_pattern_allow([^host_os$]) +m4trace:configure.ac:31: -1- m4_pattern_allow([^AS$]) +m4trace:configure.ac:31: -1- m4_pattern_allow([^DLLTOOL$]) +m4trace:configure.ac:31: -1- m4_pattern_allow([^OBJDUMP$]) +m4trace:configure.ac:31: -1- _m4_warn([obsolete], [AC_LIBTOOL_WIN32_DLL: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.], [/usr/share/aclocal/ltoptions.m4:145: AC_LIBTOOL_WIN32_DLL is expanded from... +configure.ac:31: the top level]) +m4trace:configure.ac:32: -1- AC_LIBTOOL_DLOPEN +m4trace:configure.ac:32: -1- _m4_warn([obsolete], [The macro `AC_LIBTOOL_DLOPEN' is obsolete. +You should run autoupdate.], [/usr/share/aclocal/ltoptions.m4:110: AC_LIBTOOL_DLOPEN is expanded from... +configure.ac:32: the top level]) +m4trace:configure.ac:32: -1- _m4_warn([obsolete], [AC_LIBTOOL_DLOPEN: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.], [/usr/share/aclocal/ltoptions.m4:110: AC_LIBTOOL_DLOPEN is expanded from... +configure.ac:32: the top level]) +m4trace:configure.ac:33: -1- AC_PROG_LIBTOOL +m4trace:configure.ac:33: -1- _m4_warn([obsolete], [The macro `AC_PROG_LIBTOOL' is obsolete. +You should run autoupdate.], [/usr/share/aclocal/libtool.m4:102: AC_PROG_LIBTOOL is expanded from... +configure.ac:33: the top level]) +m4trace:configure.ac:33: -1- LT_INIT +m4trace:configure.ac:33: -1- m4_pattern_forbid([^_?LT_[A-Z_]+$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$]) +m4trace:configure.ac:33: -1- LTOPTIONS_VERSION +m4trace:configure.ac:33: -1- LTSUGAR_VERSION +m4trace:configure.ac:33: -1- LTVERSION_VERSION +m4trace:configure.ac:33: -1- LTOBSOLETE_VERSION +m4trace:configure.ac:33: -1- _LT_PROG_LTMAIN +m4trace:configure.ac:33: -1- m4_pattern_allow([^LIBTOOL$]) +m4trace:configure.ac:33: -1- LT_PATH_LD +m4trace:configure.ac:33: -1- m4_pattern_allow([^SED$]) +m4trace:configure.ac:33: -1- AC_PROG_EGREP +m4trace:configure.ac:33: -1- m4_pattern_allow([^GREP$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^EGREP$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^FGREP$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^GREP$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^LD$]) +m4trace:configure.ac:33: -1- LT_PATH_NM +m4trace:configure.ac:33: -1- m4_pattern_allow([^DUMPBIN$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^ac_ct_DUMPBIN$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^DUMPBIN$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^NM$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^LN_S$]) +m4trace:configure.ac:33: -1- LT_CMD_MAX_LEN +m4trace:configure.ac:33: -1- m4_pattern_allow([^OBJDUMP$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^OBJDUMP$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^AR$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^STRIP$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^RANLIB$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([LT_OBJDIR]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^LT_OBJDIR$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^lt_ECHO$]) +m4trace:configure.ac:33: -1- _LT_CC_BASENAME([$compiler]) +m4trace:configure.ac:33: -1- _LT_PATH_TOOL_PREFIX([${ac_tool_prefix}file], [/usr/bin$PATH_SEPARATOR$PATH]) +m4trace:configure.ac:33: -1- _LT_PATH_TOOL_PREFIX([file], [/usr/bin$PATH_SEPARATOR$PATH]) +m4trace:configure.ac:33: -1- LT_SUPPORTED_TAG([CC]) +m4trace:configure.ac:33: -1- _LT_COMPILER_BOILERPLATE +m4trace:configure.ac:33: -1- _LT_LINKER_BOILERPLATE +m4trace:configure.ac:33: -1- _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], [lt_cv_prog_compiler_rtti_exceptions], [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, )="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, ) -fno-rtti -fno-exceptions"]) +m4trace:configure.ac:33: -1- _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, ) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, )], [$_LT_TAGVAR(lt_prog_compiler_pic, )@&t@m4_if([],[],[ -DPIC],[m4_if([],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, ) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, )=" $_LT_TAGVAR(lt_prog_compiler_pic, )" ;; + esac], [_LT_TAGVAR(lt_prog_compiler_pic, )= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, )=no]) +m4trace:configure.ac:33: -1- _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], [lt_cv_prog_compiler_static_works], [$lt_tmp_static_flag], [], [_LT_TAGVAR(lt_prog_compiler_static, )=]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^DSYMUTIL$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^NMEDIT$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^LIPO$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^OTOOL$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^OTOOL64$]) +m4trace:configure.ac:33: -1- LT_SYS_DLOPEN_SELF +m4trace:configure.ac:33: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^STDC_HEADERS$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^HAVE_DLFCN_H$]) +m4trace:configure.ac:33: -1- LT_LANG([CXX]) +m4trace:configure.ac:33: -1- LT_SUPPORTED_TAG([CXX]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^CXXFLAGS$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^ac_ct_CXX$]) +m4trace:configure.ac:33: -1- _AM_DEPENDENCIES([CXX]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^CXXDEPMODE$]) +m4trace:configure.ac:33: -1- AM_CONDITIONAL([am__fastdepCXX], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$]) +m4trace:configure.ac:33: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE]) +m4trace:configure.ac:33: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^CXXCPP$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^CXXCPP$]) +m4trace:configure.ac:33: -1- _LT_COMPILER_BOILERPLATE +m4trace:configure.ac:33: -1- _LT_LINKER_BOILERPLATE +m4trace:configure.ac:33: -1- _LT_CC_BASENAME([$compiler]) +m4trace:configure.ac:33: -1- LT_PATH_LD +m4trace:configure.ac:33: -1- m4_pattern_allow([^LD$]) +m4trace:configure.ac:33: -1- _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, CXX) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, CXX)], [$_LT_TAGVAR(lt_prog_compiler_pic, CXX)@&t@m4_if([CXX],[],[ -DPIC],[m4_if([CXX],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, CXX) in + "" | " "*) ;; + *) _LT_TAGVAR(lt_prog_compiler_pic, CXX)=" $_LT_TAGVAR(lt_prog_compiler_pic, CXX)" ;; + esac], [_LT_TAGVAR(lt_prog_compiler_pic, CXX)= + _LT_TAGVAR(lt_prog_compiler_can_build_shared, CXX)=no]) +m4trace:configure.ac:33: -1- _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], [lt_cv_prog_compiler_static_works_CXX], [$lt_tmp_static_flag], [], [_LT_TAGVAR(lt_prog_compiler_static, CXX)=]) +m4trace:configure.ac:44: -1- m4_pattern_allow([^MGL_USE_DOUBLE$]) +m4trace:configure.ac:46: -1- m4_pattern_allow([^MGL_USE_DOUBLE$]) +m4trace:configure.ac:72: -1- m4_pattern_allow([^PTHREAD_FLAGS$]) +m4trace:configure.ac:75: -1- m4_pattern_allow([^PTHREAD_LIBS$]) +m4trace:configure.ac:77: -1- AM_CONDITIONAL([USE_PTHREAD], [test x$pthread = xtrue]) +m4trace:configure.ac:77: -1- m4_pattern_allow([^USE_PTHREAD_TRUE$]) +m4trace:configure.ac:77: -1- m4_pattern_allow([^USE_PTHREAD_FALSE$]) +m4trace:configure.ac:77: -1- _AM_SUBST_NOTMAKE([USE_PTHREAD_TRUE]) +m4trace:configure.ac:77: -1- _AM_SUBST_NOTMAKE([USE_PTHREAD_FALSE]) +m4trace:configure.ac:89: -1- m4_pattern_allow([^GSL_FLAGS$]) +m4trace:configure.ac:90: -1- m4_pattern_allow([^GSL_LIBS$]) +m4trace:configure.ac:100: -1- m4_pattern_allow([^GSL_FLAGS$]) +m4trace:configure.ac:102: -1- AM_CONDITIONAL([USE_GSL], [test x$test_gsl = xtrue]) +m4trace:configure.ac:102: -1- m4_pattern_allow([^USE_GSL_TRUE$]) +m4trace:configure.ac:102: -1- m4_pattern_allow([^USE_GSL_FALSE$]) +m4trace:configure.ac:102: -1- _AM_SUBST_NOTMAKE([USE_GSL_TRUE]) +m4trace:configure.ac:102: -1- _AM_SUBST_NOTMAKE([USE_GSL_FALSE]) +m4trace:configure.ac:115: -1- m4_pattern_allow([^GL_LIBS$]) +m4trace:configure.ac:118: -1- m4_pattern_allow([^GLUT_LIBS$]) +m4trace:configure.ac:125: -1- m4_pattern_allow([^GL_LIBS$]) +m4trace:configure.ac:128: -1- m4_pattern_allow([^GLUT_FLAGS$]) +m4trace:configure.ac:130: -1- m4_pattern_allow([^GLUT_LIBS$]) +m4trace:configure.ac:137: -1- m4_pattern_allow([^GL_LIBS$]) +m4trace:configure.ac:140: -1- m4_pattern_allow([^GLUT_FLAGS$]) +m4trace:configure.ac:142: -1- m4_pattern_allow([^GLUT_LIBS$]) +m4trace:configure.ac:147: -1- AM_CONDITIONAL([USE_GLUT], [(test x$all = xtrue || test x$glut = xtrue)]) +m4trace:configure.ac:147: -1- m4_pattern_allow([^USE_GLUT_TRUE$]) +m4trace:configure.ac:147: -1- m4_pattern_allow([^USE_GLUT_FALSE$]) +m4trace:configure.ac:147: -1- _AM_SUBST_NOTMAKE([USE_GLUT_TRUE]) +m4trace:configure.ac:147: -1- _AM_SUBST_NOTMAKE([USE_GLUT_FALSE]) +m4trace:configure.ac:177: -1- m4_pattern_allow([^HDF5_FLAGS$]) +m4trace:configure.ac:179: -1- m4_pattern_allow([^HDF5_LIBS$]) +m4trace:configure.ac:181: -1- AM_CONDITIONAL([USE_HDF5], [(test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue)]) +m4trace:configure.ac:181: -1- m4_pattern_allow([^USE_HDF5_TRUE$]) +m4trace:configure.ac:181: -1- m4_pattern_allow([^USE_HDF5_FALSE$]) +m4trace:configure.ac:181: -1- _AM_SUBST_NOTMAKE([USE_HDF5_TRUE]) +m4trace:configure.ac:181: -1- _AM_SUBST_NOTMAKE([USE_HDF5_FALSE]) +m4trace:configure.ac:193: -1- m4_pattern_allow([^HDF4_FLAGS$]) +m4trace:configure.ac:194: -1- m4_pattern_allow([^HDF4_LIBS$]) +m4trace:configure.ac:196: -1- AM_CONDITIONAL([USE_HDF4], [(test x$all = xtrue || test x$hdf4 = xtrue)]) +m4trace:configure.ac:196: -1- m4_pattern_allow([^USE_HDF4_TRUE$]) +m4trace:configure.ac:196: -1- m4_pattern_allow([^USE_HDF4_FALSE$]) +m4trace:configure.ac:196: -1- _AM_SUBST_NOTMAKE([USE_HDF4_TRUE]) +m4trace:configure.ac:196: -1- _AM_SUBST_NOTMAKE([USE_HDF4_FALSE]) +m4trace:configure.ac:205: -1- m4_pattern_allow([^GIF_FLAGS$]) +m4trace:configure.ac:208: -1- m4_pattern_allow([^GIF_LIBS$]) +m4trace:configure.ac:210: -1- AM_CONDITIONAL([USE_GIF], [(test x$all = xtrue || test x$gif = xtrue)]) +m4trace:configure.ac:210: -1- m4_pattern_allow([^USE_GIF_TRUE$]) +m4trace:configure.ac:210: -1- m4_pattern_allow([^USE_GIF_FALSE$]) +m4trace:configure.ac:210: -1- _AM_SUBST_NOTMAKE([USE_GIF_TRUE]) +m4trace:configure.ac:210: -1- _AM_SUBST_NOTMAKE([USE_GIF_FALSE]) +m4trace:configure.ac:214: -1- m4_pattern_allow([^PNG_LIBS$]) +m4trace:configure.ac:224: -1- m4_pattern_allow([^JPEG_FLAGS$]) +m4trace:configure.ac:227: -1- m4_pattern_allow([^JPEG_LIBS$]) +m4trace:configure.ac:229: -1- AM_CONDITIONAL([USE_JPEG], [(test x$all = xtrue || test x$jpeg = xtrue)]) +m4trace:configure.ac:229: -1- m4_pattern_allow([^USE_JPEG_TRUE$]) +m4trace:configure.ac:229: -1- m4_pattern_allow([^USE_JPEG_FALSE$]) +m4trace:configure.ac:229: -1- _AM_SUBST_NOTMAKE([USE_JPEG_TRUE]) +m4trace:configure.ac:229: -1- _AM_SUBST_NOTMAKE([USE_JPEG_FALSE]) +m4trace:configure.ac:240: -1- m4_pattern_allow([^FLTK_FLAGS$]) +m4trace:configure.ac:241: -1- m4_pattern_allow([^FLTK_LIBS$]) +m4trace:configure.ac:250: -1- AM_CONDITIONAL([USE_FLTK], [test x$test_fltk = xtrue]) +m4trace:configure.ac:250: -1- m4_pattern_allow([^USE_FLTK_TRUE$]) +m4trace:configure.ac:250: -1- m4_pattern_allow([^USE_FLTK_FALSE$]) +m4trace:configure.ac:250: -1- _AM_SUBST_NOTMAKE([USE_FLTK_TRUE]) +m4trace:configure.ac:250: -1- _AM_SUBST_NOTMAKE([USE_FLTK_FALSE]) +m4trace:configure.ac:262: -1- m4_pattern_allow([^WX_FLAGS$]) +m4trace:configure.ac:263: -1- m4_pattern_allow([^WX_LIBS$]) +m4trace:configure.ac:272: -1- AM_CONDITIONAL([USE_WX], [test x$test_wx = xtrue]) +m4trace:configure.ac:272: -1- m4_pattern_allow([^USE_WX_TRUE$]) +m4trace:configure.ac:272: -1- m4_pattern_allow([^USE_WX_FALSE$]) +m4trace:configure.ac:272: -1- _AM_SUBST_NOTMAKE([USE_WX_TRUE]) +m4trace:configure.ac:272: -1- _AM_SUBST_NOTMAKE([USE_WX_FALSE]) +m4trace:configure.ac:282: -1- AT_WITH_QT +m4trace:configure.ac:282: -1- m4_pattern_allow([^QMAKE$]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^QMAKE$]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^MOC$]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^MOC$]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^UIC$]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^UIC$]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^RCC$]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^RCC$]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_PATH$]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^TMPDIR$]) +m4trace:configure.ac:282: -1- _AT_TWEAK_PRO_FILE([CONFIG], [+release]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_VERSION_MAJOR$]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_DEFINES$]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_CFLAGS$]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_CXXFLAGS$]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_INCPATH$]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_CPPFLAGS$]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_LFLAGS$]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_LDFLAGS$]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_LIBS$]) +m4trace:configure.ac:283: -1- AT_REQUIRE_QT_VERSION([4.3]) +m4trace:configure.ac:283: -1- m4_pattern_allow([^QT_VERSION$]) +m4trace:configure.ac:286: -1- AM_CONDITIONAL([USE_QT], [test x$test_qt = xtrue]) +m4trace:configure.ac:286: -1- m4_pattern_allow([^USE_QT_TRUE$]) +m4trace:configure.ac:286: -1- m4_pattern_allow([^USE_QT_FALSE$]) +m4trace:configure.ac:286: -1- _AM_SUBST_NOTMAKE([USE_QT_TRUE]) +m4trace:configure.ac:286: -1- _AM_SUBST_NOTMAKE([USE_QT_FALSE]) +m4trace:configure.ac:296: -1- m4_pattern_allow([^PYTHON_HEADERS$]) +m4trace:configure.ac:297: -1- m4_pattern_allow([^HAVE_SWIG$]) +m4trace:configure.ac:300: -1- AM_PATH_PYTHON([]) +m4trace:configure.ac:300: -1- m4_pattern_allow([^PYTHON$]) +m4trace:configure.ac:300: -1- m4_pattern_allow([^PYTHON_VERSION$]) +m4trace:configure.ac:300: -1- m4_pattern_allow([^PYTHON_PREFIX$]) +m4trace:configure.ac:300: -1- m4_pattern_allow([^PYTHON_EXEC_PREFIX$]) +m4trace:configure.ac:300: -1- m4_pattern_allow([^PYTHON_PLATFORM$]) +m4trace:configure.ac:300: -1- m4_pattern_allow([^pythondir$]) +m4trace:configure.ac:300: -1- m4_pattern_allow([^pkgpythondir$]) +m4trace:configure.ac:300: -1- m4_pattern_allow([^pyexecdir$]) +m4trace:configure.ac:300: -1- m4_pattern_allow([^pkgpyexecdir$]) +m4trace:configure.ac:306: -1- AM_CONDITIONAL([USE_PYTHON], [test x$test_python = xtrue ]) +m4trace:configure.ac:306: -1- m4_pattern_allow([^USE_PYTHON_TRUE$]) +m4trace:configure.ac:306: -1- m4_pattern_allow([^USE_PYTHON_FALSE$]) +m4trace:configure.ac:306: -1- _AM_SUBST_NOTMAKE([USE_PYTHON_TRUE]) +m4trace:configure.ac:306: -1- _AM_SUBST_NOTMAKE([USE_PYTHON_FALSE]) +m4trace:configure.ac:316: -1- m4_pattern_allow([^OCTAVE$]) +m4trace:configure.ac:322: -1- m4_pattern_allow([^OCTAVE_ARCH$]) +m4trace:configure.ac:323: -1- m4_pattern_allow([^OCTAVE_INCFLAGS$]) +m4trace:configure.ac:326: -1- AM_CONDITIONAL([USE_OCTAVE], [test x$test_octave = xtrue ]) +m4trace:configure.ac:326: -1- m4_pattern_allow([^USE_OCTAVE_TRUE$]) +m4trace:configure.ac:326: -1- m4_pattern_allow([^USE_OCTAVE_FALSE$]) +m4trace:configure.ac:326: -1- _AM_SUBST_NOTMAKE([USE_OCTAVE_TRUE]) +m4trace:configure.ac:326: -1- _AM_SUBST_NOTMAKE([USE_OCTAVE_FALSE]) +m4trace:configure.ac:335: -1- AM_CONDITIONAL([USE_TESTIO], [test x$testio = xtrue ]) +m4trace:configure.ac:335: -1- m4_pattern_allow([^USE_TESTIO_TRUE$]) +m4trace:configure.ac:335: -1- m4_pattern_allow([^USE_TESTIO_FALSE$]) +m4trace:configure.ac:335: -1- _AM_SUBST_NOTMAKE([USE_TESTIO_TRUE]) +m4trace:configure.ac:335: -1- _AM_SUBST_NOTMAKE([USE_TESTIO_FALSE]) +m4trace:configure.ac:347: -1- AM_CONDITIONAL([USE_DOCS], [(test x$docs = xtrue || test x$all = xtrue) ]) +m4trace:configure.ac:347: -1- m4_pattern_allow([^USE_DOCS_TRUE$]) +m4trace:configure.ac:347: -1- m4_pattern_allow([^USE_DOCS_FALSE$]) +m4trace:configure.ac:347: -1- _AM_SUBST_NOTMAKE([USE_DOCS_TRUE]) +m4trace:configure.ac:347: -1- _AM_SUBST_NOTMAKE([USE_DOCS_FALSE]) +m4trace:configure.ac:350: -1- m4_pattern_allow([^AM_CXXFLAGS$]) +m4trace:configure.ac:361: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:361: -1- m4_pattern_allow([^LTLIBOBJS$]) +m4trace:configure.ac:361: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) +m4trace:configure.ac:361: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) +m4trace:configure.ac:361: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) +m4trace:configure.ac:361: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) +m4trace:configure.ac:361: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) +m4trace:configure.ac:361: -1- _AC_AM_CONFIG_HEADER_HOOK(["$ac_file"]) +m4trace:configure.ac:361: -1- _AM_OUTPUT_DEPENDENCY_COMMANDS +m4trace:configure.ac:361: -1- _LT_PROG_LTMAIN diff --git a/autom4te.cache/traces.1 b/autom4te.cache/traces.1 new file mode 100644 index 0000000..56cbdf8 --- /dev/null +++ b/autom4te.cache/traces.1 @@ -0,0 +1,926 @@ +m4trace:aclocal.m4:9123: -1- m4_include([config/autotroll.m4]) +m4trace:config/autotroll.m4:70: -1- m4_pattern_forbid([^AT_]) +m4trace:config/autotroll.m4:71: -1- m4_pattern_forbid([^_AT_]) +m4trace:configure.ac:1: -1- AC_INIT([mathgl], [1.10], [mathgl.abalakin@gmail.com]) +m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?A[CHUM]_]) +m4trace:configure.ac:1: -1- m4_pattern_forbid([_AC_]) +m4trace:configure.ac:1: -1- m4_pattern_forbid([^LIBOBJS$], [do not use LIBOBJS directly, use AC_LIBOBJ (see section `AC_LIBOBJ vs LIBOBJS']) +m4trace:configure.ac:1: -1- m4_pattern_allow([^AS_FLAGS$]) +m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?m4_]) +m4trace:configure.ac:1: -1- m4_pattern_forbid([^dnl$]) +m4trace:configure.ac:1: -1- m4_pattern_forbid([^_?AS_]) +m4trace:configure.ac:1: -1- AC_SUBST([SHELL]) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([SHELL]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^SHELL$]) +m4trace:configure.ac:1: -1- AC_SUBST([PATH_SEPARATOR]) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PATH_SEPARATOR]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PATH_SEPARATOR$]) +m4trace:configure.ac:1: -1- AC_SUBST([PACKAGE_NAME], [m4_ifdef([AC_PACKAGE_NAME], ['AC_PACKAGE_NAME'])]) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PACKAGE_NAME]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.ac:1: -1- AC_SUBST([PACKAGE_TARNAME], [m4_ifdef([AC_PACKAGE_TARNAME], ['AC_PACKAGE_TARNAME'])]) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PACKAGE_TARNAME]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.ac:1: -1- AC_SUBST([PACKAGE_VERSION], [m4_ifdef([AC_PACKAGE_VERSION], ['AC_PACKAGE_VERSION'])]) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PACKAGE_VERSION]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.ac:1: -1- AC_SUBST([PACKAGE_STRING], [m4_ifdef([AC_PACKAGE_STRING], ['AC_PACKAGE_STRING'])]) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PACKAGE_STRING]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.ac:1: -1- AC_SUBST([PACKAGE_BUGREPORT], [m4_ifdef([AC_PACKAGE_BUGREPORT], ['AC_PACKAGE_BUGREPORT'])]) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PACKAGE_BUGREPORT]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.ac:1: -1- AC_SUBST([PACKAGE_URL], [m4_ifdef([AC_PACKAGE_URL], ['AC_PACKAGE_URL'])]) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([PACKAGE_URL]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_URL$]) +m4trace:configure.ac:1: -1- AC_SUBST([exec_prefix], [NONE]) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([exec_prefix]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^exec_prefix$]) +m4trace:configure.ac:1: -1- AC_SUBST([prefix], [NONE]) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([prefix]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^prefix$]) +m4trace:configure.ac:1: -1- AC_SUBST([program_transform_name], [s,x,x,]) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([program_transform_name]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^program_transform_name$]) +m4trace:configure.ac:1: -1- AC_SUBST([bindir], ['${exec_prefix}/bin']) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([bindir]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^bindir$]) +m4trace:configure.ac:1: -1- AC_SUBST([sbindir], ['${exec_prefix}/sbin']) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([sbindir]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^sbindir$]) +m4trace:configure.ac:1: -1- AC_SUBST([libexecdir], ['${exec_prefix}/libexec']) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([libexecdir]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^libexecdir$]) +m4trace:configure.ac:1: -1- AC_SUBST([datarootdir], ['${prefix}/share']) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([datarootdir]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^datarootdir$]) +m4trace:configure.ac:1: -1- AC_SUBST([datadir], ['${datarootdir}']) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([datadir]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^datadir$]) +m4trace:configure.ac:1: -1- AC_SUBST([sysconfdir], ['${prefix}/etc']) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([sysconfdir]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^sysconfdir$]) +m4trace:configure.ac:1: -1- AC_SUBST([sharedstatedir], ['${prefix}/com']) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([sharedstatedir]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^sharedstatedir$]) +m4trace:configure.ac:1: -1- AC_SUBST([localstatedir], ['${prefix}/var']) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([localstatedir]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^localstatedir$]) +m4trace:configure.ac:1: -1- AC_SUBST([includedir], ['${prefix}/include']) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([includedir]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^includedir$]) +m4trace:configure.ac:1: -1- AC_SUBST([oldincludedir], ['/usr/include']) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([oldincludedir]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^oldincludedir$]) +m4trace:configure.ac:1: -1- AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME], + ['${datarootdir}/doc/${PACKAGE_TARNAME}'], + ['${datarootdir}/doc/${PACKAGE}'])]) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([docdir]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^docdir$]) +m4trace:configure.ac:1: -1- AC_SUBST([infodir], ['${datarootdir}/info']) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([infodir]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^infodir$]) +m4trace:configure.ac:1: -1- AC_SUBST([htmldir], ['${docdir}']) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([htmldir]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^htmldir$]) +m4trace:configure.ac:1: -1- AC_SUBST([dvidir], ['${docdir}']) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([dvidir]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^dvidir$]) +m4trace:configure.ac:1: -1- AC_SUBST([pdfdir], ['${docdir}']) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([pdfdir]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^pdfdir$]) +m4trace:configure.ac:1: -1- AC_SUBST([psdir], ['${docdir}']) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([psdir]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^psdir$]) +m4trace:configure.ac:1: -1- AC_SUBST([libdir], ['${exec_prefix}/lib']) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([libdir]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^libdir$]) +m4trace:configure.ac:1: -1- AC_SUBST([localedir], ['${datarootdir}/locale']) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([localedir]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^localedir$]) +m4trace:configure.ac:1: -1- AC_SUBST([mandir], ['${datarootdir}/man']) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([mandir]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^mandir$]) +m4trace:configure.ac:1: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_NAME]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_NAME$]) +m4trace:configure.ac:1: -1- AH_OUTPUT([PACKAGE_NAME], [/* Define to the full name of this package. */ +@%:@undef PACKAGE_NAME]) +m4trace:configure.ac:1: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_TARNAME]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_TARNAME$]) +m4trace:configure.ac:1: -1- AH_OUTPUT([PACKAGE_TARNAME], [/* Define to the one symbol short name of this package. */ +@%:@undef PACKAGE_TARNAME]) +m4trace:configure.ac:1: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_VERSION]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_VERSION$]) +m4trace:configure.ac:1: -1- AH_OUTPUT([PACKAGE_VERSION], [/* Define to the version of this package. */ +@%:@undef PACKAGE_VERSION]) +m4trace:configure.ac:1: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_STRING]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_STRING$]) +m4trace:configure.ac:1: -1- AH_OUTPUT([PACKAGE_STRING], [/* Define to the full name and version of this package. */ +@%:@undef PACKAGE_STRING]) +m4trace:configure.ac:1: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_BUGREPORT]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_BUGREPORT$]) +m4trace:configure.ac:1: -1- AH_OUTPUT([PACKAGE_BUGREPORT], [/* Define to the address where bug reports for this package should be sent. */ +@%:@undef PACKAGE_BUGREPORT]) +m4trace:configure.ac:1: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE_URL]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^PACKAGE_URL$]) +m4trace:configure.ac:1: -1- AH_OUTPUT([PACKAGE_URL], [/* Define to the home page for this package. */ +@%:@undef PACKAGE_URL]) +m4trace:configure.ac:1: -1- AC_SUBST([DEFS]) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([DEFS]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^DEFS$]) +m4trace:configure.ac:1: -1- AC_SUBST([ECHO_C]) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([ECHO_C]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_C$]) +m4trace:configure.ac:1: -1- AC_SUBST([ECHO_N]) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([ECHO_N]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_N$]) +m4trace:configure.ac:1: -1- AC_SUBST([ECHO_T]) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([ECHO_T]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^ECHO_T$]) +m4trace:configure.ac:1: -1- AC_SUBST([LIBS]) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([LIBS]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:1: -1- AC_SUBST([build_alias]) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([build_alias]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^build_alias$]) +m4trace:configure.ac:1: -1- AC_SUBST([host_alias]) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([host_alias]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^host_alias$]) +m4trace:configure.ac:1: -1- AC_SUBST([target_alias]) +m4trace:configure.ac:1: -1- AC_SUBST_TRACE([target_alias]) +m4trace:configure.ac:1: -1- m4_pattern_allow([^target_alias$]) +m4trace:configure.ac:4: -1- AC_SUBST([MGL_RELEASE]) +m4trace:configure.ac:4: -1- AC_SUBST_TRACE([MGL_RELEASE]) +m4trace:configure.ac:4: -1- m4_pattern_allow([^MGL_RELEASE$]) +m4trace:configure.ac:7: -1- AC_CONFIG_AUX_DIR([config]) +m4trace:configure.ac:9: -1- AC_CONFIG_HEADERS([include/mgl/config.h]) +m4trace:configure.ac:21: -1- AC_SUBST([MGL_CURRENT]) +m4trace:configure.ac:21: -1- AC_SUBST_TRACE([MGL_CURRENT]) +m4trace:configure.ac:21: -1- m4_pattern_allow([^MGL_CURRENT$]) +m4trace:configure.ac:22: -1- AC_SUBST([MGL_REVISION]) +m4trace:configure.ac:22: -1- AC_SUBST_TRACE([MGL_REVISION]) +m4trace:configure.ac:22: -1- m4_pattern_allow([^MGL_REVISION$]) +m4trace:configure.ac:23: -1- AC_SUBST([MGL_AGE]) +m4trace:configure.ac:23: -1- AC_SUBST_TRACE([MGL_AGE]) +m4trace:configure.ac:23: -1- m4_pattern_allow([^MGL_AGE$]) +m4trace:configure.ac:25: -1- AM_INIT_AUTOMAKE +m4trace:configure.ac:25: -1- m4_pattern_allow([^AM_[A-Z]+FLAGS$]) +m4trace:configure.ac:25: -1- AM_AUTOMAKE_VERSION([1.11.1]) +m4trace:configure.ac:25: -1- AC_REQUIRE_AUX_FILE([install-sh]) +m4trace:configure.ac:25: -1- AC_SUBST([INSTALL_PROGRAM]) +m4trace:configure.ac:25: -1- AC_SUBST_TRACE([INSTALL_PROGRAM]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^INSTALL_PROGRAM$]) +m4trace:configure.ac:25: -1- AC_SUBST([INSTALL_SCRIPT]) +m4trace:configure.ac:25: -1- AC_SUBST_TRACE([INSTALL_SCRIPT]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^INSTALL_SCRIPT$]) +m4trace:configure.ac:25: -1- AC_SUBST([INSTALL_DATA]) +m4trace:configure.ac:25: -1- AC_SUBST_TRACE([INSTALL_DATA]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^INSTALL_DATA$]) +m4trace:configure.ac:25: -1- AC_SUBST([am__isrc], [' -I$(srcdir)']) +m4trace:configure.ac:25: -1- AC_SUBST_TRACE([am__isrc]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^am__isrc$]) +m4trace:configure.ac:25: -1- _AM_SUBST_NOTMAKE([am__isrc]) +m4trace:configure.ac:25: -1- AC_SUBST([CYGPATH_W]) +m4trace:configure.ac:25: -1- AC_SUBST_TRACE([CYGPATH_W]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^CYGPATH_W$]) +m4trace:configure.ac:25: -1- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME']) +m4trace:configure.ac:25: -1- AC_SUBST_TRACE([PACKAGE]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.ac:25: -1- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION']) +m4trace:configure.ac:25: -1- AC_SUBST_TRACE([VERSION]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.ac:25: -1- AC_DEFINE_TRACE_LITERAL([PACKAGE]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^PACKAGE$]) +m4trace:configure.ac:25: -1- AH_OUTPUT([PACKAGE], [/* Name of package */ +@%:@undef PACKAGE]) +m4trace:configure.ac:25: -1- AC_DEFINE_TRACE_LITERAL([VERSION]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^VERSION$]) +m4trace:configure.ac:25: -1- AH_OUTPUT([VERSION], [/* Version number of package */ +@%:@undef VERSION]) +m4trace:configure.ac:25: -1- AC_REQUIRE_AUX_FILE([missing]) +m4trace:configure.ac:25: -1- AC_SUBST([ACLOCAL]) +m4trace:configure.ac:25: -1- AC_SUBST_TRACE([ACLOCAL]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^ACLOCAL$]) +m4trace:configure.ac:25: -1- AC_SUBST([AUTOCONF]) +m4trace:configure.ac:25: -1- AC_SUBST_TRACE([AUTOCONF]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^AUTOCONF$]) +m4trace:configure.ac:25: -1- AC_SUBST([AUTOMAKE]) +m4trace:configure.ac:25: -1- AC_SUBST_TRACE([AUTOMAKE]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^AUTOMAKE$]) +m4trace:configure.ac:25: -1- AC_SUBST([AUTOHEADER]) +m4trace:configure.ac:25: -1- AC_SUBST_TRACE([AUTOHEADER]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^AUTOHEADER$]) +m4trace:configure.ac:25: -1- AC_SUBST([MAKEINFO]) +m4trace:configure.ac:25: -1- AC_SUBST_TRACE([MAKEINFO]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^MAKEINFO$]) +m4trace:configure.ac:25: -1- AC_SUBST([install_sh]) +m4trace:configure.ac:25: -1- AC_SUBST_TRACE([install_sh]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^install_sh$]) +m4trace:configure.ac:25: -1- AC_SUBST([STRIP]) +m4trace:configure.ac:25: -1- AC_SUBST_TRACE([STRIP]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^STRIP$]) +m4trace:configure.ac:25: -1- AC_SUBST([INSTALL_STRIP_PROGRAM]) +m4trace:configure.ac:25: -1- AC_SUBST_TRACE([INSTALL_STRIP_PROGRAM]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^INSTALL_STRIP_PROGRAM$]) +m4trace:configure.ac:25: -1- AC_REQUIRE_AUX_FILE([install-sh]) +m4trace:configure.ac:25: -1- AC_SUBST([MKDIR_P]) +m4trace:configure.ac:25: -1- AC_SUBST_TRACE([MKDIR_P]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^MKDIR_P$]) +m4trace:configure.ac:25: -1- AC_SUBST([mkdir_p], ["$MKDIR_P"]) +m4trace:configure.ac:25: -1- AC_SUBST_TRACE([mkdir_p]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^mkdir_p$]) +m4trace:configure.ac:25: -1- AC_SUBST([AWK]) +m4trace:configure.ac:25: -1- AC_SUBST_TRACE([AWK]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^AWK$]) +m4trace:configure.ac:25: -1- AC_SUBST([SET_MAKE]) +m4trace:configure.ac:25: -1- AC_SUBST_TRACE([SET_MAKE]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^SET_MAKE$]) +m4trace:configure.ac:25: -1- AC_SUBST([am__leading_dot]) +m4trace:configure.ac:25: -1- AC_SUBST_TRACE([am__leading_dot]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^am__leading_dot$]) +m4trace:configure.ac:25: -1- AC_SUBST([AMTAR]) +m4trace:configure.ac:25: -1- AC_SUBST_TRACE([AMTAR]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^AMTAR$]) +m4trace:configure.ac:25: -1- AC_SUBST([am__tar]) +m4trace:configure.ac:25: -1- AC_SUBST_TRACE([am__tar]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^am__tar$]) +m4trace:configure.ac:25: -1- AC_SUBST([am__untar]) +m4trace:configure.ac:25: -1- AC_SUBST_TRACE([am__untar]) +m4trace:configure.ac:25: -1- m4_pattern_allow([^am__untar$]) +m4trace:configure.ac:27: -1- AC_SUBST([CC]) +m4trace:configure.ac:27: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:27: -1- AC_SUBST([CFLAGS]) +m4trace:configure.ac:27: -1- AC_SUBST_TRACE([CFLAGS]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^CFLAGS$]) +m4trace:configure.ac:27: -1- AC_SUBST([LDFLAGS]) +m4trace:configure.ac:27: -1- AC_SUBST_TRACE([LDFLAGS]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:27: -1- AC_SUBST([LIBS]) +m4trace:configure.ac:27: -1- AC_SUBST_TRACE([LIBS]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:27: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.ac:27: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:27: -1- AC_SUBST([CC]) +m4trace:configure.ac:27: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:27: -1- AC_SUBST([CC]) +m4trace:configure.ac:27: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:27: -1- AC_SUBST([CC]) +m4trace:configure.ac:27: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:27: -1- AC_SUBST([CC]) +m4trace:configure.ac:27: -1- AC_SUBST_TRACE([CC]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^CC$]) +m4trace:configure.ac:27: -1- AC_SUBST([ac_ct_CC]) +m4trace:configure.ac:27: -1- AC_SUBST_TRACE([ac_ct_CC]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^ac_ct_CC$]) +m4trace:configure.ac:27: -1- AC_SUBST([EXEEXT], [$ac_cv_exeext]) +m4trace:configure.ac:27: -1- AC_SUBST_TRACE([EXEEXT]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^EXEEXT$]) +m4trace:configure.ac:27: -1- AC_SUBST([OBJEXT], [$ac_cv_objext]) +m4trace:configure.ac:27: -1- AC_SUBST_TRACE([OBJEXT]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^OBJEXT$]) +m4trace:configure.ac:27: -1- AC_SUBST([DEPDIR], ["${am__leading_dot}deps"]) +m4trace:configure.ac:27: -1- AC_SUBST_TRACE([DEPDIR]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^DEPDIR$]) +m4trace:configure.ac:27: -1- AC_SUBST([am__include]) +m4trace:configure.ac:27: -1- AC_SUBST_TRACE([am__include]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^am__include$]) +m4trace:configure.ac:27: -1- AC_SUBST([am__quote]) +m4trace:configure.ac:27: -1- AC_SUBST_TRACE([am__quote]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^am__quote$]) +m4trace:configure.ac:27: -1- AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) +m4trace:configure.ac:27: -1- AC_SUBST([AMDEP_TRUE]) +m4trace:configure.ac:27: -1- AC_SUBST_TRACE([AMDEP_TRUE]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^AMDEP_TRUE$]) +m4trace:configure.ac:27: -1- AC_SUBST([AMDEP_FALSE]) +m4trace:configure.ac:27: -1- AC_SUBST_TRACE([AMDEP_FALSE]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^AMDEP_FALSE$]) +m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([AMDEP_TRUE]) +m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([AMDEP_FALSE]) +m4trace:configure.ac:27: -1- AC_SUBST([AMDEPBACKSLASH]) +m4trace:configure.ac:27: -1- AC_SUBST_TRACE([AMDEPBACKSLASH]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^AMDEPBACKSLASH$]) +m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([AMDEPBACKSLASH]) +m4trace:configure.ac:27: -1- AC_SUBST([CCDEPMODE], [depmode=$am_cv_CC_dependencies_compiler_type]) +m4trace:configure.ac:27: -1- AC_SUBST_TRACE([CCDEPMODE]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^CCDEPMODE$]) +m4trace:configure.ac:27: -1- AM_CONDITIONAL([am__fastdepCC], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CC_dependencies_compiler_type" = gcc3]) +m4trace:configure.ac:27: -1- AC_SUBST([am__fastdepCC_TRUE]) +m4trace:configure.ac:27: -1- AC_SUBST_TRACE([am__fastdepCC_TRUE]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^am__fastdepCC_TRUE$]) +m4trace:configure.ac:27: -1- AC_SUBST([am__fastdepCC_FALSE]) +m4trace:configure.ac:27: -1- AC_SUBST_TRACE([am__fastdepCC_FALSE]) +m4trace:configure.ac:27: -1- m4_pattern_allow([^am__fastdepCC_FALSE$]) +m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_TRUE]) +m4trace:configure.ac:27: -1- _AM_SUBST_NOTMAKE([am__fastdepCC_FALSE]) +m4trace:configure.ac:28: -1- AC_SUBST([CXX]) +m4trace:configure.ac:28: -1- AC_SUBST_TRACE([CXX]) +m4trace:configure.ac:28: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:28: -1- AC_SUBST([CXXFLAGS]) +m4trace:configure.ac:28: -1- AC_SUBST_TRACE([CXXFLAGS]) +m4trace:configure.ac:28: -1- m4_pattern_allow([^CXXFLAGS$]) +m4trace:configure.ac:28: -1- AC_SUBST([LDFLAGS]) +m4trace:configure.ac:28: -1- AC_SUBST_TRACE([LDFLAGS]) +m4trace:configure.ac:28: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:28: -1- AC_SUBST([LIBS]) +m4trace:configure.ac:28: -1- AC_SUBST_TRACE([LIBS]) +m4trace:configure.ac:28: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:28: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.ac:28: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.ac:28: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:28: -1- AC_SUBST([CXX]) +m4trace:configure.ac:28: -1- AC_SUBST_TRACE([CXX]) +m4trace:configure.ac:28: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:28: -1- AC_SUBST([ac_ct_CXX]) +m4trace:configure.ac:28: -1- AC_SUBST_TRACE([ac_ct_CXX]) +m4trace:configure.ac:28: -1- m4_pattern_allow([^ac_ct_CXX$]) +m4trace:configure.ac:28: -1- AC_SUBST([CXXDEPMODE], [depmode=$am_cv_CXX_dependencies_compiler_type]) +m4trace:configure.ac:28: -1- AC_SUBST_TRACE([CXXDEPMODE]) +m4trace:configure.ac:28: -1- m4_pattern_allow([^CXXDEPMODE$]) +m4trace:configure.ac:28: -1- AM_CONDITIONAL([am__fastdepCXX], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3]) +m4trace:configure.ac:28: -1- AC_SUBST([am__fastdepCXX_TRUE]) +m4trace:configure.ac:28: -1- AC_SUBST_TRACE([am__fastdepCXX_TRUE]) +m4trace:configure.ac:28: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$]) +m4trace:configure.ac:28: -1- AC_SUBST([am__fastdepCXX_FALSE]) +m4trace:configure.ac:28: -1- AC_SUBST_TRACE([am__fastdepCXX_FALSE]) +m4trace:configure.ac:28: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$]) +m4trace:configure.ac:28: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE]) +m4trace:configure.ac:28: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE]) +m4trace:configure.ac:31: -1- _m4_warn([obsolete], [The macro `AC_LIBTOOL_WIN32_DLL' is obsolete. +You should run autoupdate.], [aclocal.m4:7525: AC_LIBTOOL_WIN32_DLL is expanded from... +configure.ac:31: the top level]) +m4trace:configure.ac:31: -1- AC_CANONICAL_HOST +m4trace:configure.ac:31: -1- AC_CANONICAL_BUILD +m4trace:configure.ac:31: -1- AC_REQUIRE_AUX_FILE([config.sub]) +m4trace:configure.ac:31: -1- AC_REQUIRE_AUX_FILE([config.guess]) +m4trace:configure.ac:31: -1- AC_SUBST([build], [$ac_cv_build]) +m4trace:configure.ac:31: -1- AC_SUBST_TRACE([build]) +m4trace:configure.ac:31: -1- m4_pattern_allow([^build$]) +m4trace:configure.ac:31: -1- AC_SUBST([build_cpu], [$[1]]) +m4trace:configure.ac:31: -1- AC_SUBST_TRACE([build_cpu]) +m4trace:configure.ac:31: -1- m4_pattern_allow([^build_cpu$]) +m4trace:configure.ac:31: -1- AC_SUBST([build_vendor], [$[2]]) +m4trace:configure.ac:31: -1- AC_SUBST_TRACE([build_vendor]) +m4trace:configure.ac:31: -1- m4_pattern_allow([^build_vendor$]) +m4trace:configure.ac:31: -1- AC_SUBST([build_os]) +m4trace:configure.ac:31: -1- AC_SUBST_TRACE([build_os]) +m4trace:configure.ac:31: -1- m4_pattern_allow([^build_os$]) +m4trace:configure.ac:31: -1- AC_SUBST([host], [$ac_cv_host]) +m4trace:configure.ac:31: -1- AC_SUBST_TRACE([host]) +m4trace:configure.ac:31: -1- m4_pattern_allow([^host$]) +m4trace:configure.ac:31: -1- AC_SUBST([host_cpu], [$[1]]) +m4trace:configure.ac:31: -1- AC_SUBST_TRACE([host_cpu]) +m4trace:configure.ac:31: -1- m4_pattern_allow([^host_cpu$]) +m4trace:configure.ac:31: -1- AC_SUBST([host_vendor], [$[2]]) +m4trace:configure.ac:31: -1- AC_SUBST_TRACE([host_vendor]) +m4trace:configure.ac:31: -1- m4_pattern_allow([^host_vendor$]) +m4trace:configure.ac:31: -1- AC_SUBST([host_os]) +m4trace:configure.ac:31: -1- AC_SUBST_TRACE([host_os]) +m4trace:configure.ac:31: -1- m4_pattern_allow([^host_os$]) +m4trace:configure.ac:31: -1- AC_SUBST([AS]) +m4trace:configure.ac:31: -1- AC_SUBST_TRACE([AS]) +m4trace:configure.ac:31: -1- m4_pattern_allow([^AS$]) +m4trace:configure.ac:31: -1- AC_SUBST([DLLTOOL]) +m4trace:configure.ac:31: -1- AC_SUBST_TRACE([DLLTOOL]) +m4trace:configure.ac:31: -1- m4_pattern_allow([^DLLTOOL$]) +m4trace:configure.ac:31: -1- AC_SUBST([OBJDUMP]) +m4trace:configure.ac:31: -1- AC_SUBST_TRACE([OBJDUMP]) +m4trace:configure.ac:31: -1- m4_pattern_allow([^OBJDUMP$]) +m4trace:configure.ac:31: -1- _m4_warn([obsolete], [AC_LIBTOOL_WIN32_DLL: Remove this warning and the call to _LT_SET_OPTION when you +put the `win32-dll' option into LT_INIT's first parameter.], [aclocal.m4:7525: AC_LIBTOOL_WIN32_DLL is expanded from... +configure.ac:31: the top level]) +m4trace:configure.ac:32: -1- _m4_warn([obsolete], [The macro `AC_LIBTOOL_DLOPEN' is obsolete. +You should run autoupdate.], [aclocal.m4:7490: AC_LIBTOOL_DLOPEN is expanded from... +configure.ac:32: the top level]) +m4trace:configure.ac:32: -1- _m4_warn([obsolete], [AC_LIBTOOL_DLOPEN: Remove this warning and the call to _LT_SET_OPTION when you +put the `dlopen' option into LT_INIT's first parameter.], [aclocal.m4:7490: AC_LIBTOOL_DLOPEN is expanded from... +configure.ac:32: the top level]) +m4trace:configure.ac:33: -1- AC_PROG_LIBTOOL +m4trace:configure.ac:33: -1- _m4_warn([obsolete], [The macro `AC_PROG_LIBTOOL' is obsolete. +You should run autoupdate.], [aclocal.m4:123: AC_PROG_LIBTOOL is expanded from... +configure.ac:33: the top level]) +m4trace:configure.ac:33: -1- LT_INIT +m4trace:configure.ac:33: -1- m4_pattern_forbid([^_?LT_[A-Z_]+$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$]) +m4trace:configure.ac:33: -1- AC_REQUIRE_AUX_FILE([ltmain.sh]) +m4trace:configure.ac:33: -1- AC_SUBST([LIBTOOL]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([LIBTOOL]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^LIBTOOL$]) +m4trace:configure.ac:33: -1- AC_SUBST([SED]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([SED]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^SED$]) +m4trace:configure.ac:33: -1- AC_SUBST([GREP]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([GREP]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^GREP$]) +m4trace:configure.ac:33: -1- AC_SUBST([EGREP]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([EGREP]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^EGREP$]) +m4trace:configure.ac:33: -1- AC_SUBST([FGREP]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([FGREP]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^FGREP$]) +m4trace:configure.ac:33: -1- AC_SUBST([GREP]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([GREP]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^GREP$]) +m4trace:configure.ac:33: -1- AC_SUBST([LD]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([LD]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^LD$]) +m4trace:configure.ac:33: -1- AC_SUBST([DUMPBIN]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([DUMPBIN]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^DUMPBIN$]) +m4trace:configure.ac:33: -1- AC_SUBST([ac_ct_DUMPBIN]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([ac_ct_DUMPBIN]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^ac_ct_DUMPBIN$]) +m4trace:configure.ac:33: -1- AC_SUBST([DUMPBIN]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([DUMPBIN]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^DUMPBIN$]) +m4trace:configure.ac:33: -1- AC_SUBST([NM]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([NM]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^NM$]) +m4trace:configure.ac:33: -1- AC_SUBST([LN_S], [$as_ln_s]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([LN_S]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^LN_S$]) +m4trace:configure.ac:33: -1- AC_SUBST([OBJDUMP]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([OBJDUMP]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^OBJDUMP$]) +m4trace:configure.ac:33: -1- AC_SUBST([OBJDUMP]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([OBJDUMP]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^OBJDUMP$]) +m4trace:configure.ac:33: -1- AC_SUBST([AR]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([AR]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^AR$]) +m4trace:configure.ac:33: -1- AC_SUBST([STRIP]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([STRIP]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^STRIP$]) +m4trace:configure.ac:33: -1- AC_SUBST([RANLIB]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([RANLIB]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^RANLIB$]) +m4trace:configure.ac:33: -1- m4_pattern_allow([LT_OBJDIR]) +m4trace:configure.ac:33: -1- AC_DEFINE_TRACE_LITERAL([LT_OBJDIR]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^LT_OBJDIR$]) +m4trace:configure.ac:33: -1- AH_OUTPUT([LT_OBJDIR], [/* Define to the sub-directory in which libtool stores uninstalled libraries. + */ +@%:@undef LT_OBJDIR]) +m4trace:configure.ac:33: -1- AC_SUBST([lt_ECHO]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([lt_ECHO]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^lt_ECHO$]) +m4trace:configure.ac:33: -1- LT_SUPPORTED_TAG([CC]) +m4trace:configure.ac:33: -1- AC_SUBST([DSYMUTIL]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([DSYMUTIL]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^DSYMUTIL$]) +m4trace:configure.ac:33: -1- AC_SUBST([NMEDIT]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([NMEDIT]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^NMEDIT$]) +m4trace:configure.ac:33: -1- AC_SUBST([LIPO]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([LIPO]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^LIPO$]) +m4trace:configure.ac:33: -1- AC_SUBST([OTOOL]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([OTOOL]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^OTOOL$]) +m4trace:configure.ac:33: -1- AC_SUBST([OTOOL64]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([OTOOL64]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^OTOOL64$]) +m4trace:configure.ac:33: -1- AH_OUTPUT([HAVE_DLFCN_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_DLFCN_H]) +m4trace:configure.ac:33: -1- AC_SUBST([CPP]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([CPP]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.ac:33: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:33: -1- AC_SUBST([CPP]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([CPP]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^CPP$]) +m4trace:configure.ac:33: -1- AC_DEFINE_TRACE_LITERAL([STDC_HEADERS]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^STDC_HEADERS$]) +m4trace:configure.ac:33: -1- AH_OUTPUT([STDC_HEADERS], [/* Define to 1 if you have the ANSI C header files. */ +@%:@undef STDC_HEADERS]) +m4trace:configure.ac:33: -1- AH_OUTPUT([HAVE_SYS_TYPES_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_SYS_TYPES_H]) +m4trace:configure.ac:33: -1- AH_OUTPUT([HAVE_SYS_STAT_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_SYS_STAT_H]) +m4trace:configure.ac:33: -1- AH_OUTPUT([HAVE_STDLIB_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STDLIB_H]) +m4trace:configure.ac:33: -1- AH_OUTPUT([HAVE_STRING_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STRING_H]) +m4trace:configure.ac:33: -1- AH_OUTPUT([HAVE_MEMORY_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_MEMORY_H]) +m4trace:configure.ac:33: -1- AH_OUTPUT([HAVE_STRINGS_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STRINGS_H]) +m4trace:configure.ac:33: -1- AH_OUTPUT([HAVE_INTTYPES_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_INTTYPES_H]) +m4trace:configure.ac:33: -1- AH_OUTPUT([HAVE_STDINT_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_STDINT_H]) +m4trace:configure.ac:33: -1- AH_OUTPUT([HAVE_UNISTD_H], [/* Define to 1 if you have the header file. */ +@%:@undef HAVE_UNISTD_H]) +m4trace:configure.ac:33: -1- AC_DEFINE_TRACE_LITERAL([HAVE_DLFCN_H]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^HAVE_DLFCN_H$]) +m4trace:configure.ac:33: -1- LT_SUPPORTED_TAG([CXX]) +m4trace:configure.ac:33: -1- AC_SUBST([CXX]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([CXX]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:33: -1- AC_SUBST([CXXFLAGS]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([CXXFLAGS]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^CXXFLAGS$]) +m4trace:configure.ac:33: -1- AC_SUBST([LDFLAGS]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([LDFLAGS]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^LDFLAGS$]) +m4trace:configure.ac:33: -1- AC_SUBST([LIBS]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([LIBS]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^LIBS$]) +m4trace:configure.ac:33: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:33: -1- AC_SUBST([CXX]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([CXX]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^CXX$]) +m4trace:configure.ac:33: -1- AC_SUBST([ac_ct_CXX]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([ac_ct_CXX]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^ac_ct_CXX$]) +m4trace:configure.ac:33: -1- AC_SUBST([CXXDEPMODE], [depmode=$am_cv_CXX_dependencies_compiler_type]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([CXXDEPMODE]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^CXXDEPMODE$]) +m4trace:configure.ac:33: -1- AM_CONDITIONAL([am__fastdepCXX], [ + test "x$enable_dependency_tracking" != xno \ + && test "$am_cv_CXX_dependencies_compiler_type" = gcc3]) +m4trace:configure.ac:33: -1- AC_SUBST([am__fastdepCXX_TRUE]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([am__fastdepCXX_TRUE]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^am__fastdepCXX_TRUE$]) +m4trace:configure.ac:33: -1- AC_SUBST([am__fastdepCXX_FALSE]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([am__fastdepCXX_FALSE]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^am__fastdepCXX_FALSE$]) +m4trace:configure.ac:33: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_TRUE]) +m4trace:configure.ac:33: -1- _AM_SUBST_NOTMAKE([am__fastdepCXX_FALSE]) +m4trace:configure.ac:33: -1- AC_SUBST([CXXCPP]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([CXXCPP]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^CXXCPP$]) +m4trace:configure.ac:33: -1- AC_SUBST([CPPFLAGS]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([CPPFLAGS]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^CPPFLAGS$]) +m4trace:configure.ac:33: -1- AC_SUBST([CXXCPP]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([CXXCPP]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^CXXCPP$]) +m4trace:configure.ac:33: -1- AC_SUBST([LD]) +m4trace:configure.ac:33: -1- AC_SUBST_TRACE([LD]) +m4trace:configure.ac:33: -1- m4_pattern_allow([^LD$]) +m4trace:configure.ac:44: -1- AC_DEFINE_TRACE_LITERAL([MGL_USE_DOUBLE]) +m4trace:configure.ac:44: -1- m4_pattern_allow([^MGL_USE_DOUBLE$]) +m4trace:configure.ac:44: -1- AH_OUTPUT([MGL_USE_DOUBLE], [/* This define enables double precision in MathGL */ +@%:@undef MGL_USE_DOUBLE]) +m4trace:configure.ac:46: -1- AC_DEFINE_TRACE_LITERAL([MGL_USE_DOUBLE]) +m4trace:configure.ac:46: -1- m4_pattern_allow([^MGL_USE_DOUBLE$]) +m4trace:configure.ac:46: -1- AH_OUTPUT([MGL_USE_DOUBLE], [/* This define enables double precision in MathGL */ +@%:@undef MGL_USE_DOUBLE]) +m4trace:configure.ac:72: -1- AC_SUBST([PTHREAD_FLAGS]) +m4trace:configure.ac:72: -1- AC_SUBST_TRACE([PTHREAD_FLAGS]) +m4trace:configure.ac:72: -1- m4_pattern_allow([^PTHREAD_FLAGS$]) +m4trace:configure.ac:75: -1- AC_SUBST([PTHREAD_LIBS]) +m4trace:configure.ac:75: -1- AC_SUBST_TRACE([PTHREAD_LIBS]) +m4trace:configure.ac:75: -1- m4_pattern_allow([^PTHREAD_LIBS$]) +m4trace:configure.ac:77: -1- AM_CONDITIONAL([USE_PTHREAD], [test x$pthread = xtrue]) +m4trace:configure.ac:77: -1- AC_SUBST([USE_PTHREAD_TRUE]) +m4trace:configure.ac:77: -1- AC_SUBST_TRACE([USE_PTHREAD_TRUE]) +m4trace:configure.ac:77: -1- m4_pattern_allow([^USE_PTHREAD_TRUE$]) +m4trace:configure.ac:77: -1- AC_SUBST([USE_PTHREAD_FALSE]) +m4trace:configure.ac:77: -1- AC_SUBST_TRACE([USE_PTHREAD_FALSE]) +m4trace:configure.ac:77: -1- m4_pattern_allow([^USE_PTHREAD_FALSE$]) +m4trace:configure.ac:77: -1- _AM_SUBST_NOTMAKE([USE_PTHREAD_TRUE]) +m4trace:configure.ac:77: -1- _AM_SUBST_NOTMAKE([USE_PTHREAD_FALSE]) +m4trace:configure.ac:89: -1- AC_SUBST([GSL_FLAGS]) +m4trace:configure.ac:89: -1- AC_SUBST_TRACE([GSL_FLAGS]) +m4trace:configure.ac:89: -1- m4_pattern_allow([^GSL_FLAGS$]) +m4trace:configure.ac:90: -1- AC_SUBST([GSL_LIBS]) +m4trace:configure.ac:90: -1- AC_SUBST_TRACE([GSL_LIBS]) +m4trace:configure.ac:90: -1- m4_pattern_allow([^GSL_LIBS$]) +m4trace:configure.ac:100: -1- AC_SUBST([GSL_FLAGS]) +m4trace:configure.ac:100: -1- AC_SUBST_TRACE([GSL_FLAGS]) +m4trace:configure.ac:100: -1- m4_pattern_allow([^GSL_FLAGS$]) +m4trace:configure.ac:102: -1- AM_CONDITIONAL([USE_GSL], [test x$test_gsl = xtrue]) +m4trace:configure.ac:102: -1- AC_SUBST([USE_GSL_TRUE]) +m4trace:configure.ac:102: -1- AC_SUBST_TRACE([USE_GSL_TRUE]) +m4trace:configure.ac:102: -1- m4_pattern_allow([^USE_GSL_TRUE$]) +m4trace:configure.ac:102: -1- AC_SUBST([USE_GSL_FALSE]) +m4trace:configure.ac:102: -1- AC_SUBST_TRACE([USE_GSL_FALSE]) +m4trace:configure.ac:102: -1- m4_pattern_allow([^USE_GSL_FALSE$]) +m4trace:configure.ac:102: -1- _AM_SUBST_NOTMAKE([USE_GSL_TRUE]) +m4trace:configure.ac:102: -1- _AM_SUBST_NOTMAKE([USE_GSL_FALSE]) +m4trace:configure.ac:115: -1- AC_SUBST([GL_LIBS]) +m4trace:configure.ac:115: -1- AC_SUBST_TRACE([GL_LIBS]) +m4trace:configure.ac:115: -1- m4_pattern_allow([^GL_LIBS$]) +m4trace:configure.ac:118: -1- AC_SUBST([GLUT_LIBS]) +m4trace:configure.ac:118: -1- AC_SUBST_TRACE([GLUT_LIBS]) +m4trace:configure.ac:118: -1- m4_pattern_allow([^GLUT_LIBS$]) +m4trace:configure.ac:125: -1- AC_SUBST([GL_LIBS]) +m4trace:configure.ac:125: -1- AC_SUBST_TRACE([GL_LIBS]) +m4trace:configure.ac:125: -1- m4_pattern_allow([^GL_LIBS$]) +m4trace:configure.ac:128: -1- AC_SUBST([GLUT_FLAGS]) +m4trace:configure.ac:128: -1- AC_SUBST_TRACE([GLUT_FLAGS]) +m4trace:configure.ac:128: -1- m4_pattern_allow([^GLUT_FLAGS$]) +m4trace:configure.ac:130: -1- AC_SUBST([GLUT_LIBS]) +m4trace:configure.ac:130: -1- AC_SUBST_TRACE([GLUT_LIBS]) +m4trace:configure.ac:130: -1- m4_pattern_allow([^GLUT_LIBS$]) +m4trace:configure.ac:137: -1- AC_SUBST([GL_LIBS]) +m4trace:configure.ac:137: -1- AC_SUBST_TRACE([GL_LIBS]) +m4trace:configure.ac:137: -1- m4_pattern_allow([^GL_LIBS$]) +m4trace:configure.ac:140: -1- AC_SUBST([GLUT_FLAGS]) +m4trace:configure.ac:140: -1- AC_SUBST_TRACE([GLUT_FLAGS]) +m4trace:configure.ac:140: -1- m4_pattern_allow([^GLUT_FLAGS$]) +m4trace:configure.ac:142: -1- AC_SUBST([GLUT_LIBS]) +m4trace:configure.ac:142: -1- AC_SUBST_TRACE([GLUT_LIBS]) +m4trace:configure.ac:142: -1- m4_pattern_allow([^GLUT_LIBS$]) +m4trace:configure.ac:147: -1- AM_CONDITIONAL([USE_GLUT], [(test x$all = xtrue || test x$glut = xtrue)]) +m4trace:configure.ac:147: -1- AC_SUBST([USE_GLUT_TRUE]) +m4trace:configure.ac:147: -1- AC_SUBST_TRACE([USE_GLUT_TRUE]) +m4trace:configure.ac:147: -1- m4_pattern_allow([^USE_GLUT_TRUE$]) +m4trace:configure.ac:147: -1- AC_SUBST([USE_GLUT_FALSE]) +m4trace:configure.ac:147: -1- AC_SUBST_TRACE([USE_GLUT_FALSE]) +m4trace:configure.ac:147: -1- m4_pattern_allow([^USE_GLUT_FALSE$]) +m4trace:configure.ac:147: -1- _AM_SUBST_NOTMAKE([USE_GLUT_TRUE]) +m4trace:configure.ac:147: -1- _AM_SUBST_NOTMAKE([USE_GLUT_FALSE]) +m4trace:configure.ac:177: -1- AC_SUBST([HDF5_FLAGS]) +m4trace:configure.ac:177: -1- AC_SUBST_TRACE([HDF5_FLAGS]) +m4trace:configure.ac:177: -1- m4_pattern_allow([^HDF5_FLAGS$]) +m4trace:configure.ac:179: -1- AC_SUBST([HDF5_LIBS]) +m4trace:configure.ac:179: -1- AC_SUBST_TRACE([HDF5_LIBS]) +m4trace:configure.ac:179: -1- m4_pattern_allow([^HDF5_LIBS$]) +m4trace:configure.ac:181: -1- AM_CONDITIONAL([USE_HDF5], [(test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue)]) +m4trace:configure.ac:181: -1- AC_SUBST([USE_HDF5_TRUE]) +m4trace:configure.ac:181: -1- AC_SUBST_TRACE([USE_HDF5_TRUE]) +m4trace:configure.ac:181: -1- m4_pattern_allow([^USE_HDF5_TRUE$]) +m4trace:configure.ac:181: -1- AC_SUBST([USE_HDF5_FALSE]) +m4trace:configure.ac:181: -1- AC_SUBST_TRACE([USE_HDF5_FALSE]) +m4trace:configure.ac:181: -1- m4_pattern_allow([^USE_HDF5_FALSE$]) +m4trace:configure.ac:181: -1- _AM_SUBST_NOTMAKE([USE_HDF5_TRUE]) +m4trace:configure.ac:181: -1- _AM_SUBST_NOTMAKE([USE_HDF5_FALSE]) +m4trace:configure.ac:193: -1- AC_SUBST([HDF4_FLAGS]) +m4trace:configure.ac:193: -1- AC_SUBST_TRACE([HDF4_FLAGS]) +m4trace:configure.ac:193: -1- m4_pattern_allow([^HDF4_FLAGS$]) +m4trace:configure.ac:194: -1- AC_SUBST([HDF4_LIBS]) +m4trace:configure.ac:194: -1- AC_SUBST_TRACE([HDF4_LIBS]) +m4trace:configure.ac:194: -1- m4_pattern_allow([^HDF4_LIBS$]) +m4trace:configure.ac:196: -1- AM_CONDITIONAL([USE_HDF4], [(test x$all = xtrue || test x$hdf4 = xtrue)]) +m4trace:configure.ac:196: -1- AC_SUBST([USE_HDF4_TRUE]) +m4trace:configure.ac:196: -1- AC_SUBST_TRACE([USE_HDF4_TRUE]) +m4trace:configure.ac:196: -1- m4_pattern_allow([^USE_HDF4_TRUE$]) +m4trace:configure.ac:196: -1- AC_SUBST([USE_HDF4_FALSE]) +m4trace:configure.ac:196: -1- AC_SUBST_TRACE([USE_HDF4_FALSE]) +m4trace:configure.ac:196: -1- m4_pattern_allow([^USE_HDF4_FALSE$]) +m4trace:configure.ac:196: -1- _AM_SUBST_NOTMAKE([USE_HDF4_TRUE]) +m4trace:configure.ac:196: -1- _AM_SUBST_NOTMAKE([USE_HDF4_FALSE]) +m4trace:configure.ac:205: -1- AC_SUBST([GIF_FLAGS]) +m4trace:configure.ac:205: -1- AC_SUBST_TRACE([GIF_FLAGS]) +m4trace:configure.ac:205: -1- m4_pattern_allow([^GIF_FLAGS$]) +m4trace:configure.ac:208: -1- AC_SUBST([GIF_LIBS]) +m4trace:configure.ac:208: -1- AC_SUBST_TRACE([GIF_LIBS]) +m4trace:configure.ac:208: -1- m4_pattern_allow([^GIF_LIBS$]) +m4trace:configure.ac:210: -1- AM_CONDITIONAL([USE_GIF], [(test x$all = xtrue || test x$gif = xtrue)]) +m4trace:configure.ac:210: -1- AC_SUBST([USE_GIF_TRUE]) +m4trace:configure.ac:210: -1- AC_SUBST_TRACE([USE_GIF_TRUE]) +m4trace:configure.ac:210: -1- m4_pattern_allow([^USE_GIF_TRUE$]) +m4trace:configure.ac:210: -1- AC_SUBST([USE_GIF_FALSE]) +m4trace:configure.ac:210: -1- AC_SUBST_TRACE([USE_GIF_FALSE]) +m4trace:configure.ac:210: -1- m4_pattern_allow([^USE_GIF_FALSE$]) +m4trace:configure.ac:210: -1- _AM_SUBST_NOTMAKE([USE_GIF_TRUE]) +m4trace:configure.ac:210: -1- _AM_SUBST_NOTMAKE([USE_GIF_FALSE]) +m4trace:configure.ac:214: -1- AC_SUBST([PNG_LIBS]) +m4trace:configure.ac:214: -1- AC_SUBST_TRACE([PNG_LIBS]) +m4trace:configure.ac:214: -1- m4_pattern_allow([^PNG_LIBS$]) +m4trace:configure.ac:224: -1- AC_SUBST([JPEG_FLAGS]) +m4trace:configure.ac:224: -1- AC_SUBST_TRACE([JPEG_FLAGS]) +m4trace:configure.ac:224: -1- m4_pattern_allow([^JPEG_FLAGS$]) +m4trace:configure.ac:227: -1- AC_SUBST([JPEG_LIBS]) +m4trace:configure.ac:227: -1- AC_SUBST_TRACE([JPEG_LIBS]) +m4trace:configure.ac:227: -1- m4_pattern_allow([^JPEG_LIBS$]) +m4trace:configure.ac:229: -1- AM_CONDITIONAL([USE_JPEG], [(test x$all = xtrue || test x$jpeg = xtrue)]) +m4trace:configure.ac:229: -1- AC_SUBST([USE_JPEG_TRUE]) +m4trace:configure.ac:229: -1- AC_SUBST_TRACE([USE_JPEG_TRUE]) +m4trace:configure.ac:229: -1- m4_pattern_allow([^USE_JPEG_TRUE$]) +m4trace:configure.ac:229: -1- AC_SUBST([USE_JPEG_FALSE]) +m4trace:configure.ac:229: -1- AC_SUBST_TRACE([USE_JPEG_FALSE]) +m4trace:configure.ac:229: -1- m4_pattern_allow([^USE_JPEG_FALSE$]) +m4trace:configure.ac:229: -1- _AM_SUBST_NOTMAKE([USE_JPEG_TRUE]) +m4trace:configure.ac:229: -1- _AM_SUBST_NOTMAKE([USE_JPEG_FALSE]) +m4trace:configure.ac:240: -1- AC_SUBST([FLTK_FLAGS]) +m4trace:configure.ac:240: -1- AC_SUBST_TRACE([FLTK_FLAGS]) +m4trace:configure.ac:240: -1- m4_pattern_allow([^FLTK_FLAGS$]) +m4trace:configure.ac:241: -1- AC_SUBST([FLTK_LIBS]) +m4trace:configure.ac:241: -1- AC_SUBST_TRACE([FLTK_LIBS]) +m4trace:configure.ac:241: -1- m4_pattern_allow([^FLTK_LIBS$]) +m4trace:configure.ac:250: -1- AM_CONDITIONAL([USE_FLTK], [test x$test_fltk = xtrue]) +m4trace:configure.ac:250: -1- AC_SUBST([USE_FLTK_TRUE]) +m4trace:configure.ac:250: -1- AC_SUBST_TRACE([USE_FLTK_TRUE]) +m4trace:configure.ac:250: -1- m4_pattern_allow([^USE_FLTK_TRUE$]) +m4trace:configure.ac:250: -1- AC_SUBST([USE_FLTK_FALSE]) +m4trace:configure.ac:250: -1- AC_SUBST_TRACE([USE_FLTK_FALSE]) +m4trace:configure.ac:250: -1- m4_pattern_allow([^USE_FLTK_FALSE$]) +m4trace:configure.ac:250: -1- _AM_SUBST_NOTMAKE([USE_FLTK_TRUE]) +m4trace:configure.ac:250: -1- _AM_SUBST_NOTMAKE([USE_FLTK_FALSE]) +m4trace:configure.ac:262: -1- AC_SUBST([WX_FLAGS]) +m4trace:configure.ac:262: -1- AC_SUBST_TRACE([WX_FLAGS]) +m4trace:configure.ac:262: -1- m4_pattern_allow([^WX_FLAGS$]) +m4trace:configure.ac:263: -1- AC_SUBST([WX_LIBS]) +m4trace:configure.ac:263: -1- AC_SUBST_TRACE([WX_LIBS]) +m4trace:configure.ac:263: -1- m4_pattern_allow([^WX_LIBS$]) +m4trace:configure.ac:272: -1- AM_CONDITIONAL([USE_WX], [test x$test_wx = xtrue]) +m4trace:configure.ac:272: -1- AC_SUBST([USE_WX_TRUE]) +m4trace:configure.ac:272: -1- AC_SUBST_TRACE([USE_WX_TRUE]) +m4trace:configure.ac:272: -1- m4_pattern_allow([^USE_WX_TRUE$]) +m4trace:configure.ac:272: -1- AC_SUBST([USE_WX_FALSE]) +m4trace:configure.ac:272: -1- AC_SUBST_TRACE([USE_WX_FALSE]) +m4trace:configure.ac:272: -1- m4_pattern_allow([^USE_WX_FALSE$]) +m4trace:configure.ac:272: -1- _AM_SUBST_NOTMAKE([USE_WX_TRUE]) +m4trace:configure.ac:272: -1- _AM_SUBST_NOTMAKE([USE_WX_FALSE]) +m4trace:configure.ac:282: -1- AC_SUBST([QMAKE]) +m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QMAKE]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^QMAKE$]) +m4trace:configure.ac:282: -1- AC_SUBST([QMAKE]) +m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QMAKE]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^QMAKE$]) +m4trace:configure.ac:282: -1- AC_SUBST([MOC]) +m4trace:configure.ac:282: -1- AC_SUBST_TRACE([MOC]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^MOC$]) +m4trace:configure.ac:282: -1- AC_SUBST([MOC]) +m4trace:configure.ac:282: -1- AC_SUBST_TRACE([MOC]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^MOC$]) +m4trace:configure.ac:282: -1- AC_SUBST([UIC]) +m4trace:configure.ac:282: -1- AC_SUBST_TRACE([UIC]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^UIC$]) +m4trace:configure.ac:282: -1- AC_SUBST([UIC]) +m4trace:configure.ac:282: -1- AC_SUBST_TRACE([UIC]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^UIC$]) +m4trace:configure.ac:282: -1- AC_SUBST([RCC]) +m4trace:configure.ac:282: -1- AC_SUBST_TRACE([RCC]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^RCC$]) +m4trace:configure.ac:282: -1- AC_SUBST([RCC]) +m4trace:configure.ac:282: -1- AC_SUBST_TRACE([RCC]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^RCC$]) +m4trace:configure.ac:282: -1- AC_SUBST([QT_PATH]) +m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QT_PATH]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_PATH$]) +m4trace:configure.ac:282: -1- AC_SUBST([TMPDIR]) +m4trace:configure.ac:282: -1- AC_SUBST_TRACE([TMPDIR]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^TMPDIR$]) +m4trace:configure.ac:282: -1- AC_SUBST([QT_VERSION_MAJOR]) +m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QT_VERSION_MAJOR]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_VERSION_MAJOR$]) +m4trace:configure.ac:282: -1- AC_SUBST([QT_DEFINES], [$at_cv_env_QT_DEFINES]) +m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QT_DEFINES]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_DEFINES$]) +m4trace:configure.ac:282: -1- AC_SUBST([QT_CFLAGS], [$at_cv_env_QT_CFLAGS]) +m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QT_CFLAGS]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_CFLAGS$]) +m4trace:configure.ac:282: -1- AC_SUBST([QT_CXXFLAGS], [$at_cv_env_QT_CXXFLAGS]) +m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QT_CXXFLAGS]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_CXXFLAGS$]) +m4trace:configure.ac:282: -1- AC_SUBST([QT_INCPATH], [$at_cv_env_QT_INCPATH]) +m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QT_INCPATH]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_INCPATH$]) +m4trace:configure.ac:282: -1- AC_SUBST([QT_CPPFLAGS], ["$at_cv_env_QT_DEFINES $at_cv_env_QT_INCPATH"]) +m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QT_CPPFLAGS]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_CPPFLAGS$]) +m4trace:configure.ac:282: -1- AC_SUBST([QT_LFLAGS], [$at_cv_env_QT_LDFLAGS]) +m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QT_LFLAGS]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_LFLAGS$]) +m4trace:configure.ac:282: -1- AC_SUBST([QT_LDFLAGS], [$at_cv_env_QT_LDFLAGS]) +m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QT_LDFLAGS]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_LDFLAGS$]) +m4trace:configure.ac:282: -1- AC_SUBST([QT_LIBS], [$at_cv_env_QT_LIBS]) +m4trace:configure.ac:282: -1- AC_SUBST_TRACE([QT_LIBS]) +m4trace:configure.ac:282: -1- m4_pattern_allow([^QT_LIBS$]) +m4trace:configure.ac:283: -1- AC_SUBST([QT_VERSION], [$at_cv_QT_VERSION]) +m4trace:configure.ac:283: -1- AC_SUBST_TRACE([QT_VERSION]) +m4trace:configure.ac:283: -1- m4_pattern_allow([^QT_VERSION$]) +m4trace:configure.ac:286: -1- AM_CONDITIONAL([USE_QT], [test x$test_qt = xtrue]) +m4trace:configure.ac:286: -1- AC_SUBST([USE_QT_TRUE]) +m4trace:configure.ac:286: -1- AC_SUBST_TRACE([USE_QT_TRUE]) +m4trace:configure.ac:286: -1- m4_pattern_allow([^USE_QT_TRUE$]) +m4trace:configure.ac:286: -1- AC_SUBST([USE_QT_FALSE]) +m4trace:configure.ac:286: -1- AC_SUBST_TRACE([USE_QT_FALSE]) +m4trace:configure.ac:286: -1- m4_pattern_allow([^USE_QT_FALSE$]) +m4trace:configure.ac:286: -1- _AM_SUBST_NOTMAKE([USE_QT_TRUE]) +m4trace:configure.ac:286: -1- _AM_SUBST_NOTMAKE([USE_QT_FALSE]) +m4trace:configure.ac:296: -1- AC_SUBST([PYTHON_HEADERS]) +m4trace:configure.ac:296: -1- AC_SUBST_TRACE([PYTHON_HEADERS]) +m4trace:configure.ac:296: -1- m4_pattern_allow([^PYTHON_HEADERS$]) +m4trace:configure.ac:297: -1- AC_SUBST([HAVE_SWIG]) +m4trace:configure.ac:297: -1- AC_SUBST_TRACE([HAVE_SWIG]) +m4trace:configure.ac:297: -1- m4_pattern_allow([^HAVE_SWIG$]) +m4trace:configure.ac:300: -1- AC_SUBST([PYTHON]) +m4trace:configure.ac:300: -1- AC_SUBST_TRACE([PYTHON]) +m4trace:configure.ac:300: -1- m4_pattern_allow([^PYTHON$]) +m4trace:configure.ac:300: -1- AC_SUBST([PYTHON_VERSION], [$am_cv_python_version]) +m4trace:configure.ac:300: -1- AC_SUBST_TRACE([PYTHON_VERSION]) +m4trace:configure.ac:300: -1- m4_pattern_allow([^PYTHON_VERSION$]) +m4trace:configure.ac:300: -1- AC_SUBST([PYTHON_PREFIX], ['${prefix}']) +m4trace:configure.ac:300: -1- AC_SUBST_TRACE([PYTHON_PREFIX]) +m4trace:configure.ac:300: -1- m4_pattern_allow([^PYTHON_PREFIX$]) +m4trace:configure.ac:300: -1- AC_SUBST([PYTHON_EXEC_PREFIX], ['${exec_prefix}']) +m4trace:configure.ac:300: -1- AC_SUBST_TRACE([PYTHON_EXEC_PREFIX]) +m4trace:configure.ac:300: -1- m4_pattern_allow([^PYTHON_EXEC_PREFIX$]) +m4trace:configure.ac:300: -1- AC_SUBST([PYTHON_PLATFORM], [$am_cv_python_platform]) +m4trace:configure.ac:300: -1- AC_SUBST_TRACE([PYTHON_PLATFORM]) +m4trace:configure.ac:300: -1- m4_pattern_allow([^PYTHON_PLATFORM$]) +m4trace:configure.ac:300: -1- AC_SUBST([pythondir], [$am_cv_python_pythondir]) +m4trace:configure.ac:300: -1- AC_SUBST_TRACE([pythondir]) +m4trace:configure.ac:300: -1- m4_pattern_allow([^pythondir$]) +m4trace:configure.ac:300: -1- AC_SUBST([pkgpythondir], [\${pythondir}/$PACKAGE]) +m4trace:configure.ac:300: -1- AC_SUBST_TRACE([pkgpythondir]) +m4trace:configure.ac:300: -1- m4_pattern_allow([^pkgpythondir$]) +m4trace:configure.ac:300: -1- AC_SUBST([pyexecdir], [$am_cv_python_pyexecdir]) +m4trace:configure.ac:300: -1- AC_SUBST_TRACE([pyexecdir]) +m4trace:configure.ac:300: -1- m4_pattern_allow([^pyexecdir$]) +m4trace:configure.ac:300: -1- AC_SUBST([pkgpyexecdir], [\${pyexecdir}/$PACKAGE]) +m4trace:configure.ac:300: -1- AC_SUBST_TRACE([pkgpyexecdir]) +m4trace:configure.ac:300: -1- m4_pattern_allow([^pkgpyexecdir$]) +m4trace:configure.ac:306: -1- AM_CONDITIONAL([USE_PYTHON], [test x$test_python = xtrue ]) +m4trace:configure.ac:306: -1- AC_SUBST([USE_PYTHON_TRUE]) +m4trace:configure.ac:306: -1- AC_SUBST_TRACE([USE_PYTHON_TRUE]) +m4trace:configure.ac:306: -1- m4_pattern_allow([^USE_PYTHON_TRUE$]) +m4trace:configure.ac:306: -1- AC_SUBST([USE_PYTHON_FALSE]) +m4trace:configure.ac:306: -1- AC_SUBST_TRACE([USE_PYTHON_FALSE]) +m4trace:configure.ac:306: -1- m4_pattern_allow([^USE_PYTHON_FALSE$]) +m4trace:configure.ac:306: -1- _AM_SUBST_NOTMAKE([USE_PYTHON_TRUE]) +m4trace:configure.ac:306: -1- _AM_SUBST_NOTMAKE([USE_PYTHON_FALSE]) +m4trace:configure.ac:316: -1- AC_SUBST([OCTAVE]) +m4trace:configure.ac:316: -1- AC_SUBST_TRACE([OCTAVE]) +m4trace:configure.ac:316: -1- m4_pattern_allow([^OCTAVE$]) +m4trace:configure.ac:322: -1- AC_SUBST([OCTAVE_ARCH], [$OCTAVE_ARCH]) +m4trace:configure.ac:322: -1- AC_SUBST_TRACE([OCTAVE_ARCH]) +m4trace:configure.ac:322: -1- m4_pattern_allow([^OCTAVE_ARCH$]) +m4trace:configure.ac:323: -1- AC_SUBST([OCTAVE_INCFLAGS], [$OCTAVE_INCFLAGS]) +m4trace:configure.ac:323: -1- AC_SUBST_TRACE([OCTAVE_INCFLAGS]) +m4trace:configure.ac:323: -1- m4_pattern_allow([^OCTAVE_INCFLAGS$]) +m4trace:configure.ac:326: -1- AM_CONDITIONAL([USE_OCTAVE], [test x$test_octave = xtrue ]) +m4trace:configure.ac:326: -1- AC_SUBST([USE_OCTAVE_TRUE]) +m4trace:configure.ac:326: -1- AC_SUBST_TRACE([USE_OCTAVE_TRUE]) +m4trace:configure.ac:326: -1- m4_pattern_allow([^USE_OCTAVE_TRUE$]) +m4trace:configure.ac:326: -1- AC_SUBST([USE_OCTAVE_FALSE]) +m4trace:configure.ac:326: -1- AC_SUBST_TRACE([USE_OCTAVE_FALSE]) +m4trace:configure.ac:326: -1- m4_pattern_allow([^USE_OCTAVE_FALSE$]) +m4trace:configure.ac:326: -1- _AM_SUBST_NOTMAKE([USE_OCTAVE_TRUE]) +m4trace:configure.ac:326: -1- _AM_SUBST_NOTMAKE([USE_OCTAVE_FALSE]) +m4trace:configure.ac:335: -1- AM_CONDITIONAL([USE_TESTIO], [test x$testio = xtrue ]) +m4trace:configure.ac:335: -1- AC_SUBST([USE_TESTIO_TRUE]) +m4trace:configure.ac:335: -1- AC_SUBST_TRACE([USE_TESTIO_TRUE]) +m4trace:configure.ac:335: -1- m4_pattern_allow([^USE_TESTIO_TRUE$]) +m4trace:configure.ac:335: -1- AC_SUBST([USE_TESTIO_FALSE]) +m4trace:configure.ac:335: -1- AC_SUBST_TRACE([USE_TESTIO_FALSE]) +m4trace:configure.ac:335: -1- m4_pattern_allow([^USE_TESTIO_FALSE$]) +m4trace:configure.ac:335: -1- _AM_SUBST_NOTMAKE([USE_TESTIO_TRUE]) +m4trace:configure.ac:335: -1- _AM_SUBST_NOTMAKE([USE_TESTIO_FALSE]) +m4trace:configure.ac:345: -1- AC_CONFIG_FILES([texinfo/Makefile texinfo/png/Makefile]) +m4trace:configure.ac:347: -1- AM_CONDITIONAL([USE_DOCS], [(test x$docs = xtrue || test x$all = xtrue) ]) +m4trace:configure.ac:347: -1- AC_SUBST([USE_DOCS_TRUE]) +m4trace:configure.ac:347: -1- AC_SUBST_TRACE([USE_DOCS_TRUE]) +m4trace:configure.ac:347: -1- m4_pattern_allow([^USE_DOCS_TRUE$]) +m4trace:configure.ac:347: -1- AC_SUBST([USE_DOCS_FALSE]) +m4trace:configure.ac:347: -1- AC_SUBST_TRACE([USE_DOCS_FALSE]) +m4trace:configure.ac:347: -1- m4_pattern_allow([^USE_DOCS_FALSE$]) +m4trace:configure.ac:347: -1- _AM_SUBST_NOTMAKE([USE_DOCS_TRUE]) +m4trace:configure.ac:347: -1- _AM_SUBST_NOTMAKE([USE_DOCS_FALSE]) +m4trace:configure.ac:350: -1- AC_SUBST([AM_CXXFLAGS]) +m4trace:configure.ac:350: -1- AC_SUBST_TRACE([AM_CXXFLAGS]) +m4trace:configure.ac:350: -1- m4_pattern_allow([^AM_CXXFLAGS$]) +m4trace:configure.ac:352: -1- AC_CONFIG_FILES([ +Makefile +mgl/Makefile +examples/Makefile +include/Makefile +lang/Makefile +utils/Makefile +widgets/Makefile +]) +m4trace:configure.ac:361: -1- AC_SUBST([LIB@&t@OBJS], [$ac_libobjs]) +m4trace:configure.ac:361: -1- AC_SUBST_TRACE([LIB@&t@OBJS]) +m4trace:configure.ac:361: -1- m4_pattern_allow([^LIB@&t@OBJS$]) +m4trace:configure.ac:361: -1- AC_SUBST([LTLIBOBJS], [$ac_ltlibobjs]) +m4trace:configure.ac:361: -1- AC_SUBST_TRACE([LTLIBOBJS]) +m4trace:configure.ac:361: -1- m4_pattern_allow([^LTLIBOBJS$]) +m4trace:configure.ac:361: -1- AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"]) +m4trace:configure.ac:361: -1- AC_SUBST([am__EXEEXT_TRUE]) +m4trace:configure.ac:361: -1- AC_SUBST_TRACE([am__EXEEXT_TRUE]) +m4trace:configure.ac:361: -1- m4_pattern_allow([^am__EXEEXT_TRUE$]) +m4trace:configure.ac:361: -1- AC_SUBST([am__EXEEXT_FALSE]) +m4trace:configure.ac:361: -1- AC_SUBST_TRACE([am__EXEEXT_FALSE]) +m4trace:configure.ac:361: -1- m4_pattern_allow([^am__EXEEXT_FALSE$]) +m4trace:configure.ac:361: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_TRUE]) +m4trace:configure.ac:361: -1- _AM_SUBST_NOTMAKE([am__EXEEXT_FALSE]) +m4trace:configure.ac:361: -1- AC_SUBST_TRACE([top_builddir]) +m4trace:configure.ac:361: -1- AC_SUBST_TRACE([top_build_prefix]) +m4trace:configure.ac:361: -1- AC_SUBST_TRACE([srcdir]) +m4trace:configure.ac:361: -1- AC_SUBST_TRACE([abs_srcdir]) +m4trace:configure.ac:361: -1- AC_SUBST_TRACE([top_srcdir]) +m4trace:configure.ac:361: -1- AC_SUBST_TRACE([abs_top_srcdir]) +m4trace:configure.ac:361: -1- AC_SUBST_TRACE([builddir]) +m4trace:configure.ac:361: -1- AC_SUBST_TRACE([abs_builddir]) +m4trace:configure.ac:361: -1- AC_SUBST_TRACE([abs_top_builddir]) +m4trace:configure.ac:361: -1- AC_SUBST_TRACE([INSTALL]) +m4trace:configure.ac:361: -1- AC_SUBST_TRACE([MKDIR_P]) +m4trace:configure.ac:361: -1- AC_REQUIRE_AUX_FILE([ltmain.sh]) diff --git a/config/config.guess b/config/config.guess index da83314..c2246a4 100755 --- a/config/config.guess +++ b/config/config.guess @@ -1,10 +1,10 @@ #! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 # Free Software Foundation, Inc. -timestamp='2009-04-27' +timestamp='2009-12-30' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -27,16 +27,16 @@ timestamp='2009-04-27' # the same distribution terms that you use for the rest of that program. -# Originally written by Per Bothner . -# Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. +# Originally written by Per Bothner. Please send patches (context +# diff format) to and include a ChangeLog +# entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # -# The plan is that this can be called by configure scripts if you -# don't specify an explicit build system type. +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD me=`echo "$0" | sed -e 's,.*/,,'` @@ -56,8 +56,9 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free +Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -170,7 +171,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ - | grep __ELF__ >/dev/null + | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? @@ -333,6 +334,9 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; + i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) + echo i386-pc-auroraux${UNAME_RELEASE} + exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" @@ -656,7 +660,7 @@ EOF # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | - grep __LP64__ >/dev/null + grep -q __LP64__ then HP_ARCH="hppa2.0w" else @@ -807,12 +811,12 @@ EOF i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; - *:Interix*:[3456]*) + *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; - EM64T | authenticamd | genuineintel) + authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) @@ -822,6 +826,9 @@ EOF [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; + 8664:Windows_NT:*) + echo x86_64-pc-mks + exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we @@ -851,6 +858,20 @@ EOF i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; + alpha:Linux:*:*) + case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in + EV5) UNAME_MACHINE=alphaev5 ;; + EV56) UNAME_MACHINE=alphaev56 ;; + PCA56) UNAME_MACHINE=alphapca56 ;; + PCA57) UNAME_MACHINE=alphapca56 ;; + EV6) UNAME_MACHINE=alphaev6 ;; + EV67) UNAME_MACHINE=alphaev67 ;; + EV68*) UNAME_MACHINE=alphaev68 ;; + esac + objdump --private-headers /bin/sh | grep -q ld.so.1 + if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi + echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} + exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ @@ -873,6 +894,17 @@ EOF frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; + i*86:Linux:*:*) + LIBC=gnu + eval $set_cc_for_build + sed 's/^ //' << EOF >$dummy.c + #ifdef __dietlibc__ + LIBC=dietlibc + #endif +EOF + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC'` + echo "${UNAME_MACHINE}-pc-linux-${LIBC}" + exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; @@ -882,78 +914,34 @@ EOF m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; - mips:Linux:*:*) - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #undef CPU - #undef mips - #undef mipsel - #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mipsel - #else - #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips - #else - CPU= - #endif - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" - test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } - ;; - mips64:Linux:*:*) + mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU - #undef mips64 - #undef mips64el + #undef ${UNAME_MACHINE} + #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) - CPU=mips64el + CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) - CPU=mips64 + CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^CPU/{ - s: ::g - p - }'`" + eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; - ppc:Linux:*:*) - echo powerpc-unknown-linux-gnu - exit ;; - ppc64:Linux:*:*) - echo powerpc64-unknown-linux-gnu - exit ;; - alpha:Linux:*:*) - case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in - EV5) UNAME_MACHINE=alphaev5 ;; - EV56) UNAME_MACHINE=alphaev56 ;; - PCA56) UNAME_MACHINE=alphapca56 ;; - PCA57) UNAME_MACHINE=alphapca56 ;; - EV6) UNAME_MACHINE=alphaev6 ;; - EV67) UNAME_MACHINE=alphaev67 ;; - EV68*) UNAME_MACHINE=alphaev68 ;; - esac - objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null - if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi - echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} - exit ;; padre:Linux:*:*) echo sparc-unknown-linux-gnu exit ;; + parisc64:Linux:*:* | hppa64:Linux:*:*) + echo hppa64-unknown-linux-gnu + exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in @@ -962,8 +950,11 @@ EOF *) echo hppa-unknown-linux-gnu ;; esac exit ;; - parisc64:Linux:*:* | hppa64:Linux:*:*) - echo hppa64-unknown-linux-gnu + ppc64:Linux:*:*) + echo powerpc64-unknown-linux-gnu + exit ;; + ppc:Linux:*:*) + echo powerpc-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux @@ -986,66 +977,6 @@ EOF xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; - i*86:Linux:*:*) - # The BFD linker knows what the default object file format is, so - # first see if it will tell us. cd to the root directory to prevent - # problems with other programs or directories called `ld' in the path. - # Set LC_ALL=C to ensure ld outputs messages in English. - ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ - | sed -ne '/supported targets:/!d - s/[ ][ ]*/ /g - s/.*supported targets: *// - s/ .*// - p'` - case "$ld_supported_targets" in - elf32-i386) - TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" - ;; - a.out-i386-linux) - echo "${UNAME_MACHINE}-pc-linux-gnuaout" - exit ;; - "") - # Either a pre-BFD a.out linker (linux-gnuoldld) or - # one that does not give us useful --help. - echo "${UNAME_MACHINE}-pc-linux-gnuoldld" - exit ;; - esac - # Determine whether the default compiler is a.out or elf - eval $set_cc_for_build - sed 's/^ //' << EOF >$dummy.c - #include - #ifdef __ELF__ - # ifdef __GLIBC__ - # if __GLIBC__ >= 2 - LIBC=gnu - # else - LIBC=gnulibc1 - # endif - # else - LIBC=gnulibc1 - # endif - #else - #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) - LIBC=gnu - #else - LIBC=gnuaout - #endif - #endif - #ifdef __dietlibc__ - LIBC=dietlibc - #endif -EOF - eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' - /^LIBC/{ - s: ::g - p - }'`" - test x"${LIBC}" != x && { - echo "${UNAME_MACHINE}-pc-linux-${LIBC}" - exit - } - test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } - ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both @@ -1074,7 +1005,7 @@ EOF i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; - i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) + i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) @@ -1182,7 +1113,7 @@ EOF rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; - PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) + PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) @@ -1275,6 +1206,16 @@ EOF *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in + i386) + eval $set_cc_for_build + if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ + (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null + then + UNAME_PROCESSOR="x86_64" + fi + fi ;; unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} diff --git a/config/config.sub b/config/config.sub index a39437d..c2d1257 100755 --- a/config/config.sub +++ b/config/config.sub @@ -1,10 +1,10 @@ #! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, -# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 +# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 # Free Software Foundation, Inc. -timestamp='2009-04-17' +timestamp='2010-01-22' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software @@ -32,13 +32,16 @@ timestamp='2009-04-17' # Please send patches to . Submit a context -# diff and a properly formatted ChangeLog entry. +# diff and a properly formatted GNU ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. +# You can get the latest version of this script from: +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD + # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. @@ -72,8 +75,9 @@ Report bugs and patches to ." version="\ GNU config.sub ($timestamp) -Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, -2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. +Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, +2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free +Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -149,10 +153,13 @@ case $os in -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ - -apple | -axis | -knuth | -cray) + -apple | -axis | -knuth | -cray | -microblaze) os= basic_machine=$1 ;; + -bluegene*) + os=-cnk + ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 @@ -281,6 +288,7 @@ case $basic_machine in | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ + | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ @@ -288,13 +296,14 @@ case $basic_machine in | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ + | ubicom32 \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; - m6811 | m68hc11 | m6812 | m68hc12) + m6811 | m68hc11 | m6812 | m68hc12 | picochip) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none @@ -337,7 +346,7 @@ case $basic_machine in | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ - | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ + | m88110-* | m88k-* | maxq-* | mcore-* | metag-* | microblaze-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ @@ -365,15 +374,17 @@ case $basic_machine in | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ - | romp-* | rs6000-* \ + | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ - | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \ + | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ + | tile-* | tilegx-* \ | tron-* \ + | ubicom32-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ @@ -467,6 +478,10 @@ case $basic_machine in basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; + bluegene*) + basic_machine=powerpc-ibm + os=-cnk + ;; c90) basic_machine=c90-cray os=-unicos @@ -719,6 +734,9 @@ case $basic_machine in basic_machine=ns32k-utek os=-sysv ;; + microblaze) + basic_machine=microblaze-xilinx + ;; mingw32) basic_machine=i386-pc os=-mingw32 @@ -1069,6 +1087,11 @@ case $basic_machine in basic_machine=tic6x-unknown os=-coff ;; + # This must be matched before tile*. + tilegx*) + basic_machine=tilegx-unknown + os=-linux-gnu + ;; tile*) basic_machine=tile-unknown os=-linux-gnu @@ -1240,6 +1263,9 @@ case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. + -auroraux) + os=-auroraux + ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; @@ -1260,9 +1286,9 @@ case $os in # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ - | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ - | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ - | -kopensolaris* \ + | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ + | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ + | -sym* | -kopensolaris* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ @@ -1283,7 +1309,7 @@ case $os in | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1416,6 +1442,8 @@ case $os in -dicos*) os=-dicos ;; + -nacl*) + ;; -none) ;; *) @@ -1613,7 +1641,7 @@ case $basic_machine in -sunos*) vendor=sun ;; - -aix*) + -cnk*|-aix*) vendor=ibm ;; -beos*) diff --git a/config/libtool.m4 b/config/libtool.m4 index 1e7ea47..a3fee53 100644 --- a/config/libtool.m4 +++ b/config/libtool.m4 @@ -2445,7 +2445,7 @@ linux*oldld* | linux*aout* | linux*coff*) ;; # This must be Linux ELF. -linux* | k*bsd*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux need_lib_prefix=no need_version=no @@ -3084,7 +3084,7 @@ irix5* | irix6* | nonstopux*) ;; # This must be Linux ELF. -linux* | k*bsd*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; @@ -3705,7 +3705,7 @@ m4_if([$1], [CXX], [ ;; esac ;; - linux* | k*bsd*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler @@ -3989,7 +3989,7 @@ m4_if([$1], [CXX], [ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; - linux* | k*bsd*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) @@ -4285,6 +4285,7 @@ dnl Note also adjust exclude_expsyms for C++ above. fi supports_anon_versioning=no case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... @@ -4376,7 +4377,7 @@ _LT_EOF _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; - gnu* | linux* | tpf* | k*bsd*-gnu) + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in @@ -5860,7 +5861,7 @@ if test "$_lt_caught_CXX_error" != yes; then _LT_TAGVAR(inherit_rpath, $1)=yes ;; - linux* | k*bsd*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler diff --git a/config/ltmain.sh b/config/ltmain.sh index 3506ead..7ed280b 100755 --- a/config/ltmain.sh +++ b/config/ltmain.sh @@ -1,6 +1,6 @@ # Generated from ltmain.m4sh. -# ltmain.sh (GNU libtool) 2.2.6 +# ltmain.sh (GNU libtool) 2.2.6b # Written by Gordon Matzigkeit , 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc. @@ -65,7 +65,7 @@ # compiler: $LTCC # compiler flags: $LTCFLAGS # linker: $LD (gnu? $with_gnu_ld) -# $progname: (GNU libtool) 2.2.6 Debian-2.2.6a-4 +# $progname: (GNU libtool) 2.2.6b Debian-2.2.6b-2ubuntu1 # automake: $automake_version # autoconf: $autoconf_version # @@ -73,9 +73,9 @@ PROGRAM=ltmain.sh PACKAGE=libtool -VERSION="2.2.6 Debian-2.2.6a-4" +VERSION="2.2.6b Debian-2.2.6b-2ubuntu1" TIMESTAMP="" -package_revision=1.3012 +package_revision=1.3017 # Be Bourne compatible if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then diff --git a/config/ltversion.m4 b/config/ltversion.m4 index b8e154f..f3c5309 100644 --- a/config/ltversion.m4 +++ b/config/ltversion.m4 @@ -9,15 +9,15 @@ # Generated from ltversion.in. -# serial 3012 ltversion.m4 +# serial 3017 ltversion.m4 # This file is part of GNU Libtool -m4_define([LT_PACKAGE_VERSION], [2.2.6]) -m4_define([LT_PACKAGE_REVISION], [1.3012]) +m4_define([LT_PACKAGE_VERSION], [2.2.6b]) +m4_define([LT_PACKAGE_REVISION], [1.3017]) AC_DEFUN([LTVERSION_VERSION], -[macro_version='2.2.6' -macro_revision='1.3012' +[macro_version='2.2.6b' +macro_revision='1.3017' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) diff --git a/config/texinfo.tex b/config/texinfo.tex index 0d3ba16..9140826 100644 --- a/config/texinfo.tex +++ b/config/texinfo.tex @@ -1,9 +1,9 @@ % texinfo.tex -- TeX macros to handle Texinfo files. -% +% % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % -\def\texinfoversion{2009-05-16.16} +\def\texinfoversion{2009-08-14.15} % % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, @@ -1332,13 +1332,16 @@ output) for that.)} \ifpdf % - % Color manipulation macros based on pdfcolor.tex. - \def\cmykDarkRed{0.28 1 1 0.35} - \def\cmykBlack{0 0 0 1} + % Color manipulation macros based on pdfcolor.tex, + % except using rgb instead of cmyk; the latter is said to render as a + % very dark gray on-screen and a very dark halftone in print, instead + % of actual black. + \def\rgbDarkRed{0.50 0.09 0.12} + \def\rgbBlack{0 0 0} % % k sets the color for filling (usual text, etc.); % K sets the color for stroking (thin rules, e.g., normal _'s). - \def\pdfsetcolor#1{\pdfliteral{#1 k #1 K}} + \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. @@ -1348,7 +1351,7 @@ output) for that.)} \pdfsetcolor{#1}% } % - \def\maincolor{\cmykBlack} + \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\lastcolordefs{} @@ -1443,8 +1446,8 @@ output) for that.)} % % by default, use a color that is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. - \def\urlcolor{\cmykDarkRed} - \def\linkcolor{\cmykDarkRed} + \def\urlcolor{\rgbDarkRed} + \def\linkcolor{\rgbDarkRed} \def\endlink{\setcolor{\maincolor}\pdfendlink} % % Adding outlines to PDF; macros for calculating structure of outlines @@ -4322,6 +4325,7 @@ end \definedummyword\code \definedummyword\command \definedummyword\dfn + \definedummyword\email \definedummyword\emph \definedummyword\env \definedummyword\file @@ -9272,12 +9276,8 @@ directory should work if nowhere else does.} @markupsetuplqdefault @markupsetuprqdefault -@c Gnulib now utterly and painfully insists on no trailing whitespace. -@c So we have to nuke it. - @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) -@c eval: (add-hook 'write-file-hooks 'nuke-trailing-whitespace) @c page-delimiter: "^\\\\message" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" diff --git a/configure b/configure index 4016c53..8245fcd 100755 --- a/configure +++ b/configure @@ -1,13 +1,15 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.64 for mathgl 1.10. +# Generated by GNU Autoconf 2.67 for mathgl 1.10. # # Report bugs to . # +# # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, -# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software +# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010 Free Software # Foundation, Inc. # +# # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## @@ -317,7 +319,7 @@ $as_echo X"$as_dir" | test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p @@ -357,19 +359,19 @@ else fi # as_fn_arith -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. +# script with STATUS, using 1 if that was 0. as_fn_error () { - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $1" >&2 + $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -736,10 +738,11 @@ as_awk_strverscmp=' } ' -exec 7<&0 &1 +test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. -# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` @@ -862,6 +865,10 @@ USE_GIF_FALSE USE_GIF_TRUE GIF_LIBS GIF_FLAGS +USE_HDF4_FALSE +USE_HDF4_TRUE +HDF4_LIBS +HDF4_FLAGS USE_HDF5_FALSE USE_HDF5_TRUE HDF5_LIBS @@ -958,6 +965,7 @@ INSTALL_PROGRAM MGL_AGE MGL_REVISION MGL_CURRENT +MGL_RELEASE target_alias host_alias build_alias @@ -1014,6 +1022,7 @@ enable_gsl enable_glut enable_hdf5 enable_hdf5_18 +enable_hdf4 enable_gif enable_jpeg enable_fltk @@ -1101,8 +1110,9 @@ do fi case $ac_option in - *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *) ac_optarg=yes ;; + *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; + *=) ac_optarg= ;; + *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. @@ -1147,7 +1157,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1173,7 +1183,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1377,7 +1387,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1393,7 +1403,7 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in @@ -1423,8 +1433,8 @@ do | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; - -*) as_fn_error "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information." + -*) as_fn_error $? "unrecognized option: \`$ac_option' +Try \`$0 --help' for more information" ;; *=*) @@ -1432,7 +1442,7 @@ Try \`$0 --help' for more information." # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error "invalid variable name: \`$ac_envvar'" ;; + as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; @@ -1450,13 +1460,13 @@ done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error "missing argument to $ac_option" + as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; - fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; + fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1479,7 +1489,7 @@ do [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac - as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" + as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' @@ -1493,8 +1503,8 @@ target=$target_alias if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe - $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. - If a cross compiler is detected then cross compile mode will be used." >&2 + $as_echo "$as_me: WARNING: if you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used" >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi @@ -1509,9 +1519,9 @@ test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error "working directory cannot be determined" + as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error "pwd does not report name of working directory" + as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. @@ -1550,11 +1560,11 @@ else fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" + as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" + cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then @@ -1594,7 +1604,7 @@ Configuration: --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking...' messages + -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files @@ -1673,6 +1683,7 @@ Optional Features: --enable-glut Turn on glut --enable-hdf5 Turn on hdf5 --enable-hdf5_18 Turn on hdf5 version 1.8 + --enable-hdf4 Turn on hdf4 --enable-gif Turn on gif --enable-jpeg Turn on jpeg --enable-fltk Turn on fltk @@ -1697,7 +1708,7 @@ Some influential environment variables: LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I if + CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CXX C++ compiler command CXXFLAGS C++ compiler flags @@ -1772,9 +1783,9 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF mathgl configure 1.10 -generated by GNU Autoconf 2.64 +generated by GNU Autoconf 2.67 -Copyright (C) 2009 Free Software Foundation, Inc. +Copyright (C) 2010 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1819,7 +1830,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - return $ac_retval + as_fn_set_status $ac_retval } # ac_fn_c_try_compile @@ -1857,7 +1868,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - return $ac_retval + as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile @@ -1903,7 +1914,7 @@ fi # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - return $ac_retval + as_fn_set_status $ac_retval } # ac_fn_c_try_link @@ -1916,7 +1927,7 @@ ac_fn_c_check_header_compile () as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : +if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -1959,7 +1970,7 @@ $as_echo "$ac_try_echo"; } >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } >/dev/null && { + test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : @@ -1971,7 +1982,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - return $ac_retval + as_fn_set_status $ac_retval } # ac_fn_c_try_cpp @@ -2013,7 +2024,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - return $ac_retval + as_fn_set_status $ac_retval } # ac_fn_c_try_run @@ -2025,7 +2036,7 @@ ac_fn_c_check_func () as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : +if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -2105,7 +2116,7 @@ $as_echo "$ac_try_echo"; } >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } >/dev/null && { + test $ac_status = 0; } > conftest.i && { test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" || test ! -s conftest.err }; then : @@ -2117,7 +2128,7 @@ sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - return $ac_retval + as_fn_set_status $ac_retval } # ac_fn_cxx_try_cpp @@ -2163,7 +2174,7 @@ fi # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} - return $ac_retval + as_fn_set_status $ac_retval } # ac_fn_cxx_try_link @@ -2175,10 +2186,10 @@ fi ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : + if eval "test \"\${$3+set}\"" = set; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : +if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 @@ -2214,7 +2225,7 @@ if ac_fn_c_try_cpp "$LINENO"; then : else ac_header_preproc=no fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } @@ -2237,17 +2248,15 @@ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} -( cat <<\_ASBOX -## ---------------------------------------- ## +( $as_echo "## ---------------------------------------- ## ## Report this to mathgl.abalakin@gmail.com ## -## ---------------------------------------- ## -_ASBOX +## ---------------------------------------- ##" ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } -if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : +if eval "test \"\${$3+set}\"" = set; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" @@ -2264,7 +2273,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by mathgl $as_me 1.10, which was -generated by GNU Autoconf 2.64. Invocation command line was +generated by GNU Autoconf 2.67. Invocation command line was $ $0 $@ @@ -2374,11 +2383,9 @@ trap 'exit_status=$? { echo - cat <<\_ASBOX -## ---------------- ## + $as_echo "## ---------------- ## ## Cache variables. ## -## ---------------- ## -_ASBOX +## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( @@ -2412,11 +2419,9 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; ) echo - cat <<\_ASBOX -## ----------------- ## + $as_echo "## ----------------- ## ## Output variables. ## -## ----------------- ## -_ASBOX +## ----------------- ##" echo for ac_var in $ac_subst_vars do @@ -2429,11 +2434,9 @@ _ASBOX echo if test -n "$ac_subst_files"; then - cat <<\_ASBOX -## ------------------- ## + $as_echo "## ------------------- ## ## File substitutions. ## -## ------------------- ## -_ASBOX +## ------------------- ##" echo for ac_var in $ac_subst_files do @@ -2447,11 +2450,9 @@ _ASBOX fi if test -s confdefs.h; then - cat <<\_ASBOX -## ----------- ## + $as_echo "## ----------- ## ## confdefs.h. ## -## ----------- ## -_ASBOX +## ----------- ##" echo cat confdefs.h echo @@ -2506,7 +2507,12 @@ _ACEOF ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - ac_site_file1=$CONFIG_SITE + # We do not want a PATH search for config.site. + case $CONFIG_SITE in #(( + -*) ac_site_file1=./$CONFIG_SITE;; + */*) ac_site_file1=$CONFIG_SITE;; + *) ac_site_file1=./$CONFIG_SITE;; + esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site @@ -2517,18 +2523,22 @@ fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue - if test -r "$ac_site_file"; then + if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" + . "$ac_site_file" \ + || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "failed to load site script $ac_site_file +See \`config.log' for more details" "$LINENO" 5 ; } fi done if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special - # files actually), so we avoid doing that. - if test -f "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special files + # actually), so we avoid doing that. DJGPP emulates it as a regular file. + if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in @@ -2597,7 +2607,7 @@ if $ac_cache_corrupted; then $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 + as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## @@ -2611,19 +2621,28 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu +MGL_RELEASE=1.10 + + ac_aux_dir= for ac_dir in config "$srcdir"/config; do - for ac_t in install-sh install.sh shtool; do - if test -f "$ac_dir/$ac_t"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/$ac_t -c" - break 2 - fi - done + if test -f "$ac_dir/install-sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f "$ac_dir/install.sh"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f "$ac_dir/shtool"; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi done if test -z "$ac_aux_dir"; then - as_fn_error "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 + as_fn_error $? "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 fi # These three variables are undocumented and unsupported, @@ -2759,11 +2778,11 @@ am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) - as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; + as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5 ;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) - as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; + as_fn_error $? "unsafe srcdir value: \`$srcdir'" "$LINENO" 5 ;; esac # Do `set' in a subshell so we don't clobber the current shell's @@ -2785,7 +2804,7 @@ if ( # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". - as_fn_error "ls -t appears to fail. Make sure there is not a broken + as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi @@ -2795,7 +2814,7 @@ then # Ok. : else - as_fn_error "newly created file is older than distributed files! + as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 @@ -2967,6 +2986,7 @@ IFS=$as_save_IFS fi + test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else @@ -2974,7 +2994,6 @@ fi # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. - test -d ./--version && rmdir ./--version MKDIR_P="$ac_install_sh -d" fi fi @@ -3033,7 +3052,7 @@ done $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` -if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : +if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\"" = set; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF @@ -3041,7 +3060,7 @@ SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. +# GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; @@ -3075,7 +3094,7 @@ if test "`cd $srcdir && pwd`" != "`pwd`"; then am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then - as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 + as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi @@ -3432,8 +3451,8 @@ fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "no acceptable C compiler found in \$PATH -See \`config.log' for more details." "$LINENO" 5; } +as_fn_error $? "no acceptable C compiler found in \$PATH +See \`config.log' for more details" "$LINENO" 5 ; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 @@ -3454,32 +3473,30 @@ $as_echo "$ac_try_echo"; } >&5 ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 - rm -f conftest.er1 conftest.err fi + rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include + int main () { -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out" +ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +$as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: @@ -3541,62 +3558,28 @@ test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } if test -z "$ac_file"; then : - $as_echo "$as_me: failed program was:" >&5 + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +$as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -{ as_fn_set_status 77 -as_fn_error "C compiler cannot create executables -See \`config.log' for more details." "$LINENO" 5; }; } +as_fn_error 77 "C compiler cannot create executables +See \`config.log' for more details" "$LINENO" 5 ; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +$as_echo "yes" >&6; } fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +$as_echo_n "checking for C compiler default output file name... " >&6; } +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +$as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -# If not cross compiling, check that we can run a simple program. -if test "$cross_compiling" != yes; then - if { ac_try='./$ac_file' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details." "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out +rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" @@ -3626,16 +3609,75 @@ done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details." "$LINENO" 5; } +as_fn_error $? "cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details" "$LINENO" 5 ; } fi -rm -f conftest$ac_cv_exeext +rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include +int +main () +{ +FILE *f = fopen ("conftest.out", "w"); + return ferror (f) || fclose (f) != 0; + + ; + return 0; +} +_ACEOF +ac_clean_files="$ac_clean_files conftest.out" +# Check that the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +$as_echo_n "checking whether we are cross compiling... " >&6; } +if test "$cross_compiling" != yes; then + { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + if { ac_try='./conftest$ac_cv_exeext' + { { case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +$as_echo "$ac_try_echo"; } >&5 + (eval "$ac_try") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details" "$LINENO" 5 ; } + fi + fi +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +$as_echo "$cross_compiling" >&6; } + +rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out +ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if test "${ac_cv_objext+set}" = set; then : @@ -3678,8 +3720,8 @@ sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "cannot compute suffix of object files: cannot compile -See \`config.log' for more details." "$LINENO" 5; } +as_fn_error $? "cannot compute suffix of object files: cannot compile +See \`config.log' for more details" "$LINENO" 5 ; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi @@ -4218,8 +4260,8 @@ $as_echo "$ac_try_echo"; } >&5 ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 - rm -f conftest.er1 conftest.err fi + rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done @@ -4476,7 +4518,7 @@ fi # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } @@ -4487,16 +4529,16 @@ else test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && - as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 + as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; -*) as_fn_error "invalid value of canonical build" "$LINENO" 5;; +*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 ;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' @@ -4521,7 +4563,7 @@ else ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 + as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi @@ -4529,7 +4571,7 @@ fi $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; -*) as_fn_error "invalid value of canonical host" "$LINENO" 5;; +*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 ;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' @@ -4860,8 +4902,8 @@ esac -macro_version='2.2.6' -macro_revision='1.3012' +macro_version='2.2.6b' +macro_revision='1.3017' @@ -4934,7 +4976,7 @@ esac done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then - as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5 + as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED @@ -5010,7 +5052,7 @@ esac done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then - as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP @@ -5076,7 +5118,7 @@ esac done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then - as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP @@ -5143,7 +5185,7 @@ esac done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then - as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP @@ -5259,7 +5301,7 @@ else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi -test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if test "${lt_cv_prog_gnu_ld+set}" = set; then : @@ -5461,13 +5503,13 @@ if test "${lt_cv_nm_interface+set}" = set; then : else lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext - (eval echo "\"\$as_me:5464: $ac_compile\"" >&5) + (eval echo "\"\$as_me:5506: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 - (eval echo "\"\$as_me:5467: $NM \\\"conftest.$ac_objext\\\"\"" >&5) + (eval echo "\"\$as_me:5509: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 - (eval echo "\"\$as_me:5470: output\"" >&5) + (eval echo "\"\$as_me:5512: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" @@ -5930,7 +5972,7 @@ irix5* | irix6* | nonstopux*) ;; # This must be Linux ELF. -linux* | k*bsd*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu) lt_cv_deplibs_check_method=pass_all ;; @@ -6670,7 +6712,7 @@ ia64-*-hpux*) ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 6673 "configure"' > conftest.$ac_ext + echo '#line 6715 "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -7459,7 +7501,7 @@ else # Broken: fails on valid input. continue fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. @@ -7475,11 +7517,11 @@ else ac_preproc_ok=: break fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext +rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi @@ -7518,7 +7560,7 @@ else # Broken: fails on valid input. continue fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. @@ -7534,18 +7576,18 @@ else ac_preproc_ok=: break fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext +rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details." "$LINENO" 5; } +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5 ; } fi ac_ext=c @@ -7674,8 +7716,7 @@ do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " -eval as_val=\$$as_ac_Header - if test "x$as_val" = x""yes; then : +if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF @@ -7830,8 +7871,8 @@ $as_echo "$ac_try_echo"; } >&5 ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 - rm -f conftest.er1 conftest.err fi + rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done @@ -8125,7 +8166,7 @@ else # Broken: fails on valid input. continue fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. @@ -8141,11 +8182,11 @@ else ac_preproc_ok=: break fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext +rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi @@ -8184,7 +8225,7 @@ else # Broken: fails on valid input. continue fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. @@ -8200,11 +8241,11 @@ else ac_preproc_ok=: break fi -rm -f conftest.err conftest.$ac_ext +rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.err conftest.$ac_ext +rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else @@ -8719,11 +8760,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:8722: $lt_compile\"" >&5) + (eval echo "\"\$as_me:8763: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:8726: \$? = $ac_status" >&5 + echo "$as_me:8767: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -8888,7 +8929,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; } lt_prog_compiler_static='-non_shared' ;; - linux* | k*bsd*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in # old Intel for x86_64 which still supported -KPIC. ecc*) @@ -9058,11 +9099,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:9061: $lt_compile\"" >&5) + (eval echo "\"\$as_me:9102: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:9065: \$? = $ac_status" >&5 + echo "$as_me:9106: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -9163,11 +9204,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:9166: $lt_compile\"" >&5) + (eval echo "\"\$as_me:9207: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:9170: \$? = $ac_status" >&5 + echo "$as_me:9211: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -9218,11 +9259,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:9221: $lt_compile\"" >&5) + (eval echo "\"\$as_me:9262: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:9225: \$? = $ac_status" >&5 + echo "$as_me:9266: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -9361,6 +9402,7 @@ $as_echo_n "checking whether the $compiler linker ($LD) supports shared librarie fi supports_anon_versioning=no case `$LD -v 2>&1` in + *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... @@ -9452,7 +9494,7 @@ _LT_EOF archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; - gnu* | linux* | tpf* | k*bsd*-gnu) + gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test "$host_os" = linux-dietlibc; then case $cc_basename in @@ -10914,7 +10956,7 @@ linux*oldld* | linux*aout* | linux*coff*) ;; # This must be Linux ELF. -linux* | k*bsd*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux need_lib_prefix=no need_version=no @@ -11601,7 +11643,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11604 "configure" +#line 11646 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -11697,7 +11739,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF -#line 11700 "configure" +#line 11742 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -12112,7 +12154,7 @@ else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi -test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 +test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if test "${lt_cv_prog_gnu_ld+set}" = set; then : @@ -12637,7 +12679,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi inherit_rpath_CXX=yes ;; - linux* | k*bsd*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler @@ -13465,7 +13507,7 @@ $as_echo_n "checking for $compiler option to produce PIC... " >&6; } ;; esac ;; - linux* | k*bsd*-gnu) + linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in KCC*) # KAI C++ Compiler @@ -13653,11 +13695,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13656: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13698: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "$as_me:13660: \$? = $ac_status" >&5 + echo "$as_me:13702: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -13752,11 +13794,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13755: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13797: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:13759: \$? = $ac_status" >&5 + echo "$as_me:13801: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -13804,11 +13846,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"\$as_me:13807: $lt_compile\"" >&5) + (eval echo "\"\$as_me:13849: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "$as_me:13811: \$? = $ac_status" >&5 + echo "$as_me:13853: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -14382,7 +14424,7 @@ linux*oldld* | linux*aout* | linux*coff*) ;; # This must be Linux ELF. -linux* | k*bsd*-gnu) +linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux need_lib_prefix=no need_version=no @@ -14777,7 +14819,7 @@ if test "${enable_double+set}" = set; then : enableval=$enable_double; case "${enableval}" in yes) double=true ;; no) double=false ;; - *) as_fn_error "bad value ${enableval} for --enable-double" "$LINENO" 5 ;; + *) as_fn_error $? "bad value ${enableval} for --enable-double" "$LINENO" 5 ;; esac else double=false @@ -14799,7 +14841,7 @@ if test "${enable_all+set}" = set; then : enableval=$enable_all; case "${enableval}" in yes) all=true ;; no) all=false ;; - *) as_fn_error "bad value ${enableval} for --enable-all" "$LINENO" 5 ;; + *) as_fn_error $? "bad value ${enableval} for --enable-all" "$LINENO" 5 ;; esac else all=false @@ -14811,7 +14853,7 @@ if test "${enable_langall+set}" = set; then : enableval=$enable_langall; case "${enableval}" in yes) langall=true ;; no) langall=false ;; - *) as_fn_error "bad value ${enableval} for --enable-langall" "$LINENO" 5 ;; + *) as_fn_error $? "bad value ${enableval} for --enable-langall" "$LINENO" 5 ;; esac else langall=false @@ -14823,7 +14865,7 @@ if test "${enable_pthread+set}" = set; then : enableval=$enable_pthread; case "${enableval}" in yes) pthread=true ;; no) pthread=false ;; - *) as_fn_error "bad value ${enableval} for --enable-pthread" "$LINENO" 5 ;; + *) as_fn_error $? "bad value ${enableval} for --enable-pthread" "$LINENO" 5 ;; esac else pthread=true @@ -14888,7 +14930,7 @@ if test "${enable_gsl+set}" = set; then : enableval=$enable_gsl; case "${enableval}" in yes) gsl=true ;; no) gsl=false ;; - *) as_fn_error "bad value ${enableval} for --enable-gsl" "$LINENO" 5 ;; + *) as_fn_error $? "bad value ${enableval} for --enable-gsl" "$LINENO" 5 ;; esac else gsl=true @@ -14996,7 +15038,7 @@ if test "${enable_glut+set}" = set; then : enableval=$enable_glut; case "${enableval}" in yes) glut=true ;; no) glut=false ;; - *) as_fn_error "bad value ${enableval} for --enable-glut" "$LINENO" 5 ;; + *) as_fn_error $? "bad value ${enableval} for --enable-glut" "$LINENO" 5 ;; esac else glut=false @@ -15026,7 +15068,7 @@ fi as_ac_Lib=`$as_echo "ac_cv_lib_${GL_LIBS}''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GL_LIBS}" >&5 $as_echo_n "checking for main in -l${GL_LIBS}... " >&6; } -if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then : +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -15055,8 +15097,7 @@ fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } -eval as_val=\$$as_ac_Lib - if test "x$as_val" = x""yes; then : +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : GL_LIBS=-l${GL_LIBS} else echo "Please install OpenGL library (lib${GL_LIBS}.a)"; exit @@ -15074,7 +15115,7 @@ fi as_ac_Lib=`$as_echo "ac_cv_lib_${GLUT_LIBS}''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GLUT_LIBS}" >&5 $as_echo_n "checking for main in -l${GLUT_LIBS}... " >&6; } -if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then : +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -15103,8 +15144,7 @@ fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } -eval as_val=\$$as_ac_Lib - if test "x$as_val" = x""yes; then : +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : (test x$all = xtrue || test x$glut = xtrue) && GLUT_LIBS=-l${GLUT_LIBS} else (test x$all = xtrue || test x$glut = xtrue) && echo "Please install FreeGLUT library (lib${GLUT_LIBS}.a)" && exit @@ -15125,7 +15165,7 @@ fi as_ac_Lib=`$as_echo "ac_cv_lib_${GL_LIBS}''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GL_LIBS}" >&5 $as_echo_n "checking for main in -l${GL_LIBS}... " >&6; } -if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then : +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -15154,8 +15194,7 @@ fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } -eval as_val=\$$as_ac_Lib - if test "x$as_val" = x""yes; then : +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : GL_LIBS=-l${GL_LIBS} else echo "Please install OpenGL library (lib${GL_LIBS}.a)"; exit @@ -15173,7 +15212,7 @@ fi as_ac_Lib=`$as_echo "ac_cv_lib_${GLUT_LIBS}''_main" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -l${GLUT_LIBS}" >&5 $as_echo_n "checking for main in -l${GLUT_LIBS}... " >&6; } -if { as_var=$as_ac_Lib; eval "test \"\${$as_var+set}\" = set"; }; then : +if eval "test \"\${$as_ac_Lib+set}\"" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS @@ -15202,8 +15241,7 @@ fi eval ac_res=\$$as_ac_Lib { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } -eval as_val=\$$as_ac_Lib - if test "x$as_val" = x""yes; then : +if eval test \"x\$"$as_ac_Lib"\" = x"yes"; then : (test x$all = xtrue || test x$glut = xtrue) && GLUT_LIBS=-l${GLUT_LIBS} else (test x$all = xtrue || test x$glut = xtrue) && echo "Please install FreeGLUT library (lib${GLUT_LIBS}.a)" && exit @@ -15235,7 +15273,7 @@ if test "${enable_hdf5+set}" = set; then : enableval=$enable_hdf5; case "${enableval}" in yes) hdf5=true ;; no) hdf5=false ;; - *) as_fn_error "bad value ${enableval} for --enable-hdf5" "$LINENO" 5 ;; + *) as_fn_error $? "bad value ${enableval} for --enable-hdf5" "$LINENO" 5 ;; esac else hdf5=false @@ -15246,7 +15284,7 @@ if test "${enable_hdf5_18+set}" = set; then : enableval=$enable_hdf5_18; case "${enableval}" in yes) hdf5_18=true ;; no) hdf5_18=false ;; - *) as_fn_error "bad value ${enableval} for --enable-hdf5_18" "$LINENO" 5 ;; + *) as_fn_error $? "bad value ${enableval} for --enable-hdf5_18" "$LINENO" 5 ;; esac else hdf5_18=false @@ -15310,12 +15348,78 @@ else fi + +# Check whether --enable-hdf4 was given. +if test "${enable_hdf4+set}" = set; then : + enableval=$enable_hdf4; case "${enableval}" in + yes) hdf4=true ;; + no) hdf4=false ;; + *) as_fn_error $? "bad value ${enableval} for --enable-hdf4" "$LINENO" 5 ;; +esac +else + hdf4=false +fi + +ac_fn_c_check_header_mongrel "$LINENO" "hdf/mfhdf.h" "ac_cv_header_hdf_mfhdf_h" "$ac_includes_default" +if test "x$ac_cv_header_hdf_mfhdf_h" = x""yes; then : + (test x$all = xtrue || test x$hdf4 = xtrue) && HDF4_FLAGS=-DHAVE_HDF4 +else + (test x$all = xtrue || test x$hdf4 = xtrue) && echo "Please install hdf4 headers" && exit +fi + + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -ldf" >&5 +$as_echo_n "checking for main in -ldf... " >&6; } +if test "${ac_cv_lib_df_main+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-ldf $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + + +int +main () +{ +return main (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_df_main=yes +else + ac_cv_lib_df_main=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_df_main" >&5 +$as_echo "$ac_cv_lib_df_main" >&6; } +if test "x$ac_cv_lib_df_main" = x""yes; then : + (test x$all = xtrue || test x$hdf4 = xtrue) && HDF4_LIBS="-lmfhdf -ldf" +else + (test x$all = xtrue || test x$hdf4 = xtrue) && echo "Please install hdf4 library" && exit +fi + + if (test x$all = xtrue || test x$hdf4 = xtrue); then + USE_HDF4_TRUE= + USE_HDF4_FALSE='#' +else + USE_HDF4_TRUE='#' + USE_HDF4_FALSE= +fi + + # Check whether --enable-gif was given. if test "${enable_gif+set}" = set; then : enableval=$enable_gif; case "${enableval}" in yes) gif=true ;; no) gif=false ;; - *) as_fn_error "bad value ${enableval} for --enable-gif" "$LINENO" 5 ;; + *) as_fn_error $? "bad value ${enableval} for --enable-gif" "$LINENO" 5 ;; esac else gif=false @@ -15426,7 +15530,7 @@ if test "${enable_jpeg+set}" = set; then : enableval=$enable_jpeg; case "${enableval}" in yes) jpeg=true ;; no) jpeg=false ;; - *) as_fn_error "bad value ${enableval} for --enable-jpeg" "$LINENO" 5 ;; + *) as_fn_error $? "bad value ${enableval} for --enable-jpeg" "$LINENO" 5 ;; esac else jpeg=false @@ -15491,7 +15595,7 @@ if test "${enable_fltk+set}" = set; then : enableval=$enable_fltk; case "${enableval}" in yes) fltk=true ;; no) fltk=false ;; - *) as_fn_error "bad value ${enableval} for --enable-fltk" "$LINENO" 5 ;; + *) as_fn_error $? "bad value ${enableval} for --enable-fltk" "$LINENO" 5 ;; esac else fltk=false @@ -15595,7 +15699,7 @@ if test "${enable_wx+set}" = set; then : enableval=$enable_wx; case "${enableval}" in yes) wx=true ;; no) wx=false ;; - *) as_fn_error "bad value ${enableval} for --enable-wx" "$LINENO" 5 ;; + *) as_fn_error $? "bad value ${enableval} for --enable-wx" "$LINENO" 5 ;; esac else wx=false @@ -15700,7 +15804,7 @@ if test "${enable_qt+set}" = set; then : enableval=$enable_qt; case "${enableval}" in yes) qt=true ;; no) qt=false ;; - *) as_fn_error "bad value ${enableval} for --enable-qt" "$LINENO" 5 ;; + *) as_fn_error $? "bad value ${enableval} for --enable-qt" "$LINENO" 5 ;; esac else qt=false @@ -15826,7 +15930,7 @@ done test -n "$QMAKE" || QMAKE="missing" if test x"$QMAKE" = xmissing; then - as_fn_error "Cannot find qmake in your PATH. Try using --with-qt." "$LINENO" 5 + as_fn_error $? "Cannot find qmake in your PATH. Try using --with-qt." "$LINENO" 5 fi fi @@ -15927,7 +16031,7 @@ done test -n "$MOC" || MOC="missing" if test x"$MOC" = xmissing; then - as_fn_error "Cannot find moc (Meta Object Compiler) in your PATH. Try using --with-qt." "$LINENO" 5 + as_fn_error $? "Cannot find moc (Meta Object Compiler) in your PATH. Try using --with-qt." "$LINENO" 5 fi fi @@ -16028,7 +16132,7 @@ done test -n "$UIC" || UIC="missing" if test x"$UIC" = xmissing; then - as_fn_error "Cannot find uic (User Interface Compiler) in your PATH. Try using --with-qt." "$LINENO" 5 + as_fn_error $? "Cannot find uic (User Interface Compiler) in your PATH. Try using --with-qt." "$LINENO" 5 fi fi @@ -16139,7 +16243,7 @@ $as_echo "$as_me: WARNING: Cannot find rcc (Qt Resource Compiler) in your PATH. QT_PATH=`dirname "$QMAKE"` fi if test x"$QT_PATH" = x; then - as_fn_error "Cannot find the path to your Qt install. Use --with-qt." "$LINENO" 5 + as_fn_error $? "Cannot find the path to your Qt install. Use --with-qt." "$LINENO" 5 fi @@ -16173,7 +16277,7 @@ $as_echo "$as_me: WARNING: Cannot find rcc (Qt Resource Compiler) in your PATH. then : else - as_fn_error "Cannot cd to or write in $my_tmpdir" "$LINENO" 5 + as_fn_error $? "Cannot cd to or write in $my_tmpdir" "$LINENO" 5 fi cat >conftest.h <<_ASEOF #include @@ -16212,14 +16316,14 @@ int main() } _ASEOF if $QMAKE -project; then :; else - as_fn_error "Calling $QMAKE -project failed." "$LINENO" 5 + as_fn_error $? "Calling $QMAKE -project failed." "$LINENO" 5 fi # Find the .pro file generated by qmake. pro_file='conftest.dir.pro' test -f $pro_file || pro_file=`echo *.pro` if test -f "$pro_file"; then :; else - as_fn_error "Can't find the .pro file generated by Qmake." "$LINENO" 5 + as_fn_error $? "Can't find the .pro file generated by Qmake." "$LINENO" 5 fi @@ -16232,7 +16336,7 @@ _ASEOF sed 's/^/| /' "$pro_file" >&5 if $QMAKE; then :; else - as_fn_error "Calling $QMAKE failed." "$LINENO" 5 + as_fn_error $? "Calling $QMAKE failed." "$LINENO" 5 fi # Try to compile a simple Qt app. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we can build a simple Qt app" >&5 @@ -16298,7 +16402,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_qt_build" >&5 $as_echo "$at_cv_qt_build" >&6; } if test x"$at_cv_qt_build" = xko; then - as_fn_error "Cannot build a test Qt program" "$LINENO" 5 + as_fn_error $? "Cannot build a test Qt program" "$LINENO" 5 fi QT_VERSION_MAJOR=`echo "$at_cv_qt_build" | sed 's/^^0-9*//'` @@ -16324,7 +16428,7 @@ $as_echo "$at_cv_qt_build" >&6; } fi if test -f $at_mfile; then :; else cd "$my_configure_pwd" - as_fn_error "Cannot find the Makefile generated by qmake." "$LINENO" 5 + as_fn_error $? "Cannot find the Makefile generated by qmake." "$LINENO" 5 fi # Find the DEFINES of Qt (should have been named CPPFLAGS). @@ -16434,7 +16538,7 @@ $as_echo "$at_cv_env_QT_LIBS" >&6; } if test x"$QMAKE" = x; then - as_fn_error "\$QMAKE is empty. \ + as_fn_error $? "\$QMAKE is empty. \ Did you invoke AT_WITH_QT before AT_REQUIRE_QT_VERSION?" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Qt's version" >&5 @@ -16450,7 +16554,7 @@ fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $at_cv_QT_VERSION" >&5 $as_echo "$at_cv_QT_VERSION" >&6; } if test x"$at_cv_QT_VERSION" = x; then - as_fn_error "Cannot detect Qt's version." "$LINENO" 5 + as_fn_error $? "Cannot detect Qt's version." "$LINENO" 5 fi QT_VERSION=$at_cv_QT_VERSION @@ -16459,7 +16563,7 @@ as_arg_v2=4.3 awk "$as_awk_strverscmp" v1="$as_arg_v1" v2="$as_arg_v2" /dev/null case $? in #( 1) : - as_fn_error "This package requires Qt 4.3 or above." "$LINENO" 5 ;; #( + as_fn_error $? "This package requires Qt 4.3 or above." "$LINENO" 5 ;; #( 0) : ;; #( 2) : @@ -16484,7 +16588,7 @@ if test "${enable_python+set}" = set; then : enableval=$enable_python; case "${enableval}" in yes) python=true ;; no) python=false ;; - *) as_fn_error "bad value ${enableval} for --enable-python" "$LINENO" 5 ;; + *) as_fn_error $? "bad value ${enableval} for --enable-python" "$LINENO" 5 ;; esac else python=false @@ -16624,7 +16728,7 @@ test -n "$PYTHON" || PYTHON=":" if test "$PYTHON" = :; then - as_fn_error "no suitable Python interpreter found" "$LINENO" 5 + as_fn_error $? "no suitable Python interpreter found" "$LINENO" 5 else @@ -16679,6 +16783,14 @@ else am__strip_prefix=`echo "$am_py_prefix" | sed 's|.|.|g'` am_cv_python_pythondir=`echo "$am_cv_python_pythondir" | sed "s,^$am__strip_prefix,$PYTHON_PREFIX,"` ;; + *) + case $am_py_prefix in + /usr|/System*) ;; + *) + am_cv_python_pythondir=$PYTHON_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; esac fi @@ -16709,6 +16821,14 @@ else am__strip_prefix=`echo "$am_py_exec_prefix" | sed 's|.|.|g'` am_cv_python_pyexecdir=`echo "$am_cv_python_pyexecdir" | sed "s,^$am__strip_prefix,$PYTHON_EXEC_PREFIX,"` ;; + *) + case $am_py_exec_prefix in + /usr|/System*) ;; + *) + am_cv_python_pyexecdir=$PYTHON_EXEC_PREFIX/lib/python$PYTHON_VERSION/site-packages + ;; + esac + ;; esac fi @@ -16744,7 +16864,7 @@ if test "${enable_octave+set}" = set; then : enableval=$enable_octave; case "${enableval}" in yes) octave=true ;; no) octave=false ;; - *) as_fn_error "bad value ${enableval} for --enable-octave" "$LINENO" 5 ;; + *) as_fn_error $? "bad value ${enableval} for --enable-octave" "$LINENO" 5 ;; esac else octave=false @@ -16815,7 +16935,7 @@ if test "${enable_testio+set}" = set; then : enableval=$enable_testio; case "${enableval}" in yes) testio=true ;; no) testio=false ;; - *) as_fn_error "bad value ${enableval} for --enable-testio" "$LINENO" 5 ;; + *) as_fn_error $? "bad value ${enableval} for --enable-testio" "$LINENO" 5 ;; esac else testio=false @@ -16835,7 +16955,7 @@ if test "${enable_docs+set}" = set; then : enableval=$enable_docs; case "${enableval}" in yes) docs=true ;; no) docs=false ;; - *) as_fn_error "bad value ${enableval} for --enable-docs" "$LINENO" 5 ;; + *) as_fn_error $? "bad value ${enableval} for --enable-docs" "$LINENO" 5 ;; esac else docs=false @@ -16942,6 +17062,7 @@ DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= +U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' @@ -16965,71 +17086,75 @@ else fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error "conditional \"AMDEP\" was never defined. + as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then - as_fn_error "conditional \"am__fastdepCC\" was never defined. + as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then - as_fn_error "conditional \"am__fastdepCXX\" was never defined. + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then - as_fn_error "conditional \"am__fastdepCXX\" was never defined. + as_fn_error $? "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_PTHREAD_TRUE}" && test -z "${USE_PTHREAD_FALSE}"; then - as_fn_error "conditional \"USE_PTHREAD\" was never defined. + as_fn_error $? "conditional \"USE_PTHREAD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_GSL_TRUE}" && test -z "${USE_GSL_FALSE}"; then - as_fn_error "conditional \"USE_GSL\" was never defined. + as_fn_error $? "conditional \"USE_GSL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_GLUT_TRUE}" && test -z "${USE_GLUT_FALSE}"; then - as_fn_error "conditional \"USE_GLUT\" was never defined. + as_fn_error $? "conditional \"USE_GLUT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_HDF5_TRUE}" && test -z "${USE_HDF5_FALSE}"; then - as_fn_error "conditional \"USE_HDF5\" was never defined. + as_fn_error $? "conditional \"USE_HDF5\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${USE_HDF4_TRUE}" && test -z "${USE_HDF4_FALSE}"; then + as_fn_error $? "conditional \"USE_HDF4\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_GIF_TRUE}" && test -z "${USE_GIF_FALSE}"; then - as_fn_error "conditional \"USE_GIF\" was never defined. + as_fn_error $? "conditional \"USE_GIF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_JPEG_TRUE}" && test -z "${USE_JPEG_FALSE}"; then - as_fn_error "conditional \"USE_JPEG\" was never defined. + as_fn_error $? "conditional \"USE_JPEG\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_FLTK_TRUE}" && test -z "${USE_FLTK_FALSE}"; then - as_fn_error "conditional \"USE_FLTK\" was never defined. + as_fn_error $? "conditional \"USE_FLTK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_WX_TRUE}" && test -z "${USE_WX_FALSE}"; then - as_fn_error "conditional \"USE_WX\" was never defined. + as_fn_error $? "conditional \"USE_WX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_QT_TRUE}" && test -z "${USE_QT_FALSE}"; then - as_fn_error "conditional \"USE_QT\" was never defined. + as_fn_error $? "conditional \"USE_QT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_PYTHON_TRUE}" && test -z "${USE_PYTHON_FALSE}"; then - as_fn_error "conditional \"USE_PYTHON\" was never defined. + as_fn_error $? "conditional \"USE_PYTHON\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_OCTAVE_TRUE}" && test -z "${USE_OCTAVE_FALSE}"; then - as_fn_error "conditional \"USE_OCTAVE\" was never defined. + as_fn_error $? "conditional \"USE_OCTAVE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_TESTIO_TRUE}" && test -z "${USE_TESTIO_FALSE}"; then - as_fn_error "conditional \"USE_TESTIO\" was never defined. + as_fn_error $? "conditional \"USE_TESTIO\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_DOCS_TRUE}" && test -z "${USE_DOCS_FALSE}"; then - as_fn_error "conditional \"USE_DOCS\" was never defined. + as_fn_error $? "conditional \"USE_DOCS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi @@ -17179,19 +17304,19 @@ export LANGUAGE (unset CDPATH) >/dev/null 2>&1 && unset CDPATH -# as_fn_error ERROR [LINENO LOG_FD] -# --------------------------------- +# as_fn_error STATUS ERROR [LINENO LOG_FD] +# ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with status $?, using 1 if that was 0. +# script with STATUS, using 1 if that was 0. as_fn_error () { - as_status=$?; test $as_status -eq 0 && as_status=1 - if test "$3"; then - as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 + as_status=$1; test $as_status -eq 0 && as_status=1 + if test "$4"; then + as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $1" >&2 + $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -17387,7 +17512,7 @@ $as_echo X"$as_dir" | test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" + } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p @@ -17441,7 +17566,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # values after options handling. ac_log=" This file was extended by mathgl $as_me 1.10, which was -generated by GNU Autoconf 2.64. Invocation command line was +generated by GNU Autoconf 2.67. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -17481,6 +17606,7 @@ Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit + --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files @@ -17503,12 +17629,13 @@ Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 +ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ mathgl config.status 1.10 -configured by $0, generated by GNU Autoconf 2.64, - with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" +configured by $0, generated by GNU Autoconf 2.67, + with options \\"\$ac_cs_config\\" -Copyright (C) 2009 Free Software Foundation, Inc. +Copyright (C) 2010 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -17526,11 +17653,16 @@ ac_need_defaults=: while test $# != 0 do case $1 in - --*=*) + --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; + --*=) + ac_option=`expr "X$1" : 'X\([^=]*\)='` + ac_optarg= + ac_shift=: + ;; *) ac_option=$1 ac_optarg=$2 @@ -17544,12 +17676,15 @@ do ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; + --config | --confi | --conf | --con | --co | --c ) + $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; @@ -17562,7 +17697,7 @@ do ac_need_defaults=false;; --he | --h) # Conflict between --help and --header - as_fn_error "ambiguous option: \`$1' + as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; @@ -17571,7 +17706,7 @@ Try \`$0 --help' for more information.";; ac_cs_silent=: ;; # This is an error. - -*) as_fn_error "unrecognized option: \`$1' + -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" @@ -17990,7 +18125,7 @@ do "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; "widgets/Makefile") CONFIG_FILES="$CONFIG_FILES widgets/Makefile" ;; - *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; + *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 ;; esac done @@ -18028,7 +18163,7 @@ $debug || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") -} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 +} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. @@ -18045,7 +18180,7 @@ if test "x$ac_cr" = x; then fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\r' + ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi @@ -18059,18 +18194,18 @@ _ACEOF echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 +ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then - as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 + as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi @@ -18092,7 +18227,7 @@ s/'"$ac_delim"'$// t delim :nl h -s/\(.\{148\}\).*/\1/ +s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p @@ -18106,7 +18241,7 @@ s/.\{148\}// t nl :delim h -s/\(.\{148\}\).*/\1/ +s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p @@ -18159,20 +18294,28 @@ if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then else cat fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ - || as_fn_error "could not setup config files machinery" "$LINENO" 5 + || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF -# VPATH may cause trouble with some makes, so we remove $(srcdir), -# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# VPATH may cause trouble with some makes, so we remove sole $(srcdir), +# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=/{ -s/:*\$(srcdir):*/:/ -s/:*\${srcdir}:*/:/ -s/:*@srcdir@:*/:/ -s/^\([^=]*=[ ]*\):*/\1/ + ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ +h +s/// +s/^/:/ +s/[ ]*$/:/ +s/:\$(srcdir):/:/g +s/:\${srcdir}:/:/g +s/:@srcdir@:/:/g +s/^:*// s/:*$// +x +s/\(=[ ]*\).*/\1/ +G +s/\n// s/^[^=]*=[ ]*$// }' fi @@ -18200,7 +18343,7 @@ for ac_last_try in false false :; do if test -z "$ac_t"; then break elif $ac_last_try; then - as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 + as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi @@ -18285,7 +18428,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - as_fn_error "could not setup config headers machinery" "$LINENO" 5 + as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" @@ -18298,7 +18441,7 @@ do esac case $ac_mode$ac_tag in :[FHL]*:*);; - :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; + :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 ;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac @@ -18326,7 +18469,7 @@ do [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || - as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; + as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 ;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" @@ -18353,7 +18496,7 @@ $as_echo "$as_me: creating $ac_file" >&6;} case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac @@ -18490,22 +18633,22 @@ s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&5 +which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined." >&2;} +which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # @@ -18516,19 +18659,19 @@ which seems to be undefined. Please make sure it is defined." >&2;} $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" } >"$tmp/config.h" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$tmp/config.h" "$ac_file" \ - || as_fn_error "could not create $ac_file" "$LINENO" 5 + || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ - || as_fn_error "could not create -" "$LINENO" 5 + || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" @@ -19486,7 +19629,7 @@ _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || - as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 + as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. @@ -19507,7 +19650,7 @@ if test "$no_create" != yes; then exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit $? + $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 diff --git a/configure.ac b/configure.ac index ff6a500..b4afae5 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,8 @@ AC_INIT([mathgl], [1.10], [mathgl.abalakin@gmail.com]) +MGL_RELEASE=1.10 +AC_SUBST(MGL_RELEASE) + AC_CONFIG_MACRO_DIR([config]) AC_CONFIG_AUX_DIR(config) AC_CONFIG_SRCDIR(mgl) @@ -177,6 +180,21 @@ AC_CHECK_LIB([hdf5], [main], [(test x$all = xtrue || test x$hdf5 = xtrue || test [(test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue) && echo "Please install hdf5 library" && exit]) AM_CONDITIONAL(USE_HDF5, (test x$all = xtrue || test x$hdf5 = xtrue || test x$hdf5_18 = xtrue)) + +AC_ARG_ENABLE(hdf4, +[ --enable-hdf4 Turn on hdf4], +[case "${enableval}" in + yes) hdf4=true ;; + no) hdf4=false ;; + *) AC_MSG_ERROR(bad value ${enableval} for --enable-hdf4) ;; +esac],[hdf4=false]) +AC_CHECK_HEADER(hdf/mfhdf.h,[(test x$all = xtrue || test x$hdf4 = xtrue) && HDF4_FLAGS=-DHAVE_HDF4 ], + [(test x$all = xtrue || test x$hdf4 = xtrue) && echo "Please install hdf4 headers" && exit]) + AC_SUBST(HDF4_FLAGS) +AC_CHECK_LIB([df], [main], [(test x$all = xtrue || test x$hdf4 = xtrue) && HDF4_LIBS="-lmfhdf -ldf" AC_SUBST(HDF4_LIBS)], + [(test x$all = xtrue || test x$hdf4 = xtrue) && echo "Please install hdf4 library" && exit]) +AM_CONDITIONAL(USE_HDF4, (test x$all = xtrue || test x$hdf4 = xtrue)) + AC_ARG_ENABLE(gif, [ --enable-gif Turn on gif], [case "${enableval}" in diff --git a/emblem.mgl b/emblem.mgl new file mode 100644 index 0000000..dcc45ad --- /dev/null +++ b/emblem.mgl @@ -0,0 +1,39 @@ +setsize 1000 500 +text 0.75 0.8 'MathGL' 'ia' -5 +text 0.05 0.15 'library\n for scientific graphics' 'Lia' -3 +#rect 0.05 0.9 2 1.5 1.34 2 'w' +xtick -3:ytick -3:ztick -3 + +stickplot 3 0 60 20:box +new y 50: fill y '-cos(pi*x-pi/4)' +new x 50: fill x '-sin(pi*x-pi/4)' +new z 50: fill z '2*x^2-1' + +area x y z 'lG' +plot x y z 'B2s' + +stickplot 3 1 60 20:box + +new aa 50 40 +modify aa '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' +mirror aa 'y' +light on :alpha on +surf aa 'BbcyrR';alpha 0.8 +cont aa 'y' + +stickplot 3 2 60 20:box +rotate 0 20 + +new a 61 51 40 +modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' + +alpha on:light off +cloud a 'wyrRk' + +stop +cut 0 -1 -1 1 0 1.1 +surf3 a -1 'BbcyrR' +contf3 a 'x' -1 +contf3 a 'y' -1 +contf3 a 'z' 0 +contf3 a 'z' 39 diff --git a/examples/Makefile.am b/examples/Makefile.am index 30a9608..1385c30 100644 --- a/examples/Makefile.am +++ b/examples/Makefile.am @@ -8,24 +8,24 @@ mgl_example_LDADD = $(top_builddir)/mgl/libmgl.la if USE_FLTK bin_PROGRAMS += mgl_fltk_example mgl_fltk_example_SOURCES = wnd_samples.cpp fltk_example.cpp -mgl_fltk_example_LDADD = $(FLTK_LIBS) $(top_builddir)/widgets/libmgl-fltk.la +mgl_fltk_example_LDADD = $(FLTK_LIBS) $(top_builddir)/widgets/libmgl-fltk.la $(top_builddir)/mgl/libmgl.la mgl_fltk_example_CXXFLAGS = $(FLTK_FLAGS) $(AM_CXXFLAGS) check_PROGRAMS += test test_SOURCES = wnd_samples.cpp main.cpp -test_LDADD = $(FLTK_LIBS) $(top_builddir)/widgets/libmgl-fltk.la +test_LDADD = $(FLTK_LIBS) $(top_builddir)/widgets/libmgl-fltk.la $(top_builddir)/mgl/libmgl.la test_CXXFLAGS = $(FLTK_FLAGS) $(AM_CXXFLAGS) endif if USE_GLUT bin_PROGRAMS += mgl_glut_example mgl_glut_example_SOURCES = wnd_samples.cpp glut_example.cpp -mgl_glut_example_LDADD = $(top_builddir)/widgets/libmgl-glut.la +mgl_glut_example_LDADD = $(top_builddir)/widgets/libmgl-glut.la $(top_builddir)/mgl/libmgl.la endif if USE_WX bin_PROGRAMS += mgl_wx_example -mgl_wx_example_LDADD = $(WX_LIBS) $(top_builddir)/widgets/libmgl-wx.la +mgl_wx_example_LDADD = $(WX_LIBS) $(top_builddir)/widgets/libmgl-wx.la $(top_builddir)/mgl/libmgl.la mgl_wx_example_CXXFLAGS = $(WX_FLAGS) $(AM_CXXFLAGS) mgl_wx_example_SOURCES = wnd_samples.cpp wx_example.cpp endif @@ -36,7 +36,7 @@ ACLOCAL_AMFLAGS = -I $(top_srcdir)/config/ bin_PROGRAMS += mgl_qt_example mgl_qt_example_SOURCES = wnd_samples.cpp $(top_builddir)/include/mgl/mgl_qt.moc.cpp $(top_srcdir)/include/mgl/mgl_qt.h qt_example.cpp -mgl_qt_example_LDADD = $(QT_LIBS) $(top_builddir)/widgets/libmgl-qt.la +mgl_qt_example_LDADD = $(QT_LIBS) $(top_builddir)/widgets/libmgl-qt.la $(top_builddir)/mgl/libmgl.la mgl_qt_example_LDFLAGS = $(QT_LDFLAGS) mgl_qt_example_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS) mgl_qt_example_CXXFLAGS = $(QT_CXXFLAGS) $(AM_CXXFLAGS) diff --git a/examples/Makefile.in b/examples/Makefile.in index 719f08a..0979b41 100644 --- a/examples/Makefile.in +++ b/examples/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.11 from Makefile.am. +# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, @@ -90,7 +90,8 @@ am__mgl_fltk_example_SOURCES_DIST = wnd_samples.cpp fltk_example.cpp mgl_fltk_example_OBJECTS = $(am_mgl_fltk_example_OBJECTS) am__DEPENDENCIES_1 = @USE_FLTK_TRUE@mgl_fltk_example_DEPENDENCIES = $(am__DEPENDENCIES_1) \ -@USE_FLTK_TRUE@ $(top_builddir)/widgets/libmgl-fltk.la +@USE_FLTK_TRUE@ $(top_builddir)/widgets/libmgl-fltk.la \ +@USE_FLTK_TRUE@ $(top_builddir)/mgl/libmgl.la mgl_fltk_example_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(mgl_fltk_example_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ @@ -100,7 +101,8 @@ am__mgl_glut_example_SOURCES_DIST = wnd_samples.cpp glut_example.cpp @USE_GLUT_TRUE@ glut_example.$(OBJEXT) mgl_glut_example_OBJECTS = $(am_mgl_glut_example_OBJECTS) @USE_GLUT_TRUE@mgl_glut_example_DEPENDENCIES = \ -@USE_GLUT_TRUE@ $(top_builddir)/widgets/libmgl-glut.la +@USE_GLUT_TRUE@ $(top_builddir)/widgets/libmgl-glut.la \ +@USE_GLUT_TRUE@ $(top_builddir)/mgl/libmgl.la am__mgl_qt_example_SOURCES_DIST = wnd_samples.cpp \ $(top_builddir)/include/mgl/mgl_qt.moc.cpp \ $(top_srcdir)/include/mgl/mgl_qt.h qt_example.cpp @@ -110,7 +112,8 @@ am__mgl_qt_example_SOURCES_DIST = wnd_samples.cpp \ @USE_QT_TRUE@ mgl_qt_example-qt_example.$(OBJEXT) mgl_qt_example_OBJECTS = $(am_mgl_qt_example_OBJECTS) @USE_QT_TRUE@mgl_qt_example_DEPENDENCIES = $(am__DEPENDENCIES_1) \ -@USE_QT_TRUE@ $(top_builddir)/widgets/libmgl-qt.la +@USE_QT_TRUE@ $(top_builddir)/widgets/libmgl-qt.la \ +@USE_QT_TRUE@ $(top_builddir)/mgl/libmgl.la mgl_qt_example_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(mgl_qt_example_CXXFLAGS) $(CXXFLAGS) \ @@ -121,7 +124,8 @@ am__mgl_wx_example_SOURCES_DIST = wnd_samples.cpp wx_example.cpp @USE_WX_TRUE@ mgl_wx_example-wx_example.$(OBJEXT) mgl_wx_example_OBJECTS = $(am_mgl_wx_example_OBJECTS) @USE_WX_TRUE@mgl_wx_example_DEPENDENCIES = $(am__DEPENDENCIES_1) \ -@USE_WX_TRUE@ $(top_builddir)/widgets/libmgl-wx.la +@USE_WX_TRUE@ $(top_builddir)/widgets/libmgl-wx.la \ +@USE_WX_TRUE@ $(top_builddir)/mgl/libmgl.la mgl_wx_example_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CXXLD) \ $(mgl_wx_example_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) \ @@ -131,7 +135,8 @@ am__test_SOURCES_DIST = wnd_samples.cpp main.cpp @USE_FLTK_TRUE@ test-main.$(OBJEXT) test_OBJECTS = $(am_test_OBJECTS) @USE_FLTK_TRUE@test_DEPENDENCIES = $(am__DEPENDENCIES_1) \ -@USE_FLTK_TRUE@ $(top_builddir)/widgets/libmgl-fltk.la +@USE_FLTK_TRUE@ $(top_builddir)/widgets/libmgl-fltk.la \ +@USE_FLTK_TRUE@ $(top_builddir)/mgl/libmgl.la test_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(test_CXXFLAGS) $(CXXFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ @@ -210,6 +215,8 @@ GREP = @GREP@ GSL_FLAGS = @GSL_FLAGS@ GSL_LIBS = @GSL_LIBS@ HAVE_SWIG = @HAVE_SWIG@ +HDF4_FLAGS = @HDF4_FLAGS@ +HDF4_LIBS = @HDF4_LIBS@ HDF5_FLAGS = @HDF5_FLAGS@ HDF5_LIBS = @HDF5_LIBS@ INSTALL = @INSTALL@ @@ -230,6 +237,7 @@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MGL_AGE = @MGL_AGE@ MGL_CURRENT = @MGL_CURRENT@ +MGL_RELEASE = @MGL_RELEASE@ MGL_REVISION = @MGL_REVISION@ MKDIR_P = @MKDIR_P@ MOC = @MOC@ @@ -342,14 +350,14 @@ top_srcdir = @top_srcdir@ mgl_example_SOURCES = wnd_samples.cpp full_test.cpp mgl_example_LDADD = $(top_builddir)/mgl/libmgl.la @USE_FLTK_TRUE@mgl_fltk_example_SOURCES = wnd_samples.cpp fltk_example.cpp -@USE_FLTK_TRUE@mgl_fltk_example_LDADD = $(FLTK_LIBS) $(top_builddir)/widgets/libmgl-fltk.la +@USE_FLTK_TRUE@mgl_fltk_example_LDADD = $(FLTK_LIBS) $(top_builddir)/widgets/libmgl-fltk.la $(top_builddir)/mgl/libmgl.la @USE_FLTK_TRUE@mgl_fltk_example_CXXFLAGS = $(FLTK_FLAGS) $(AM_CXXFLAGS) @USE_FLTK_TRUE@test_SOURCES = wnd_samples.cpp main.cpp -@USE_FLTK_TRUE@test_LDADD = $(FLTK_LIBS) $(top_builddir)/widgets/libmgl-fltk.la +@USE_FLTK_TRUE@test_LDADD = $(FLTK_LIBS) $(top_builddir)/widgets/libmgl-fltk.la $(top_builddir)/mgl/libmgl.la @USE_FLTK_TRUE@test_CXXFLAGS = $(FLTK_FLAGS) $(AM_CXXFLAGS) @USE_GLUT_TRUE@mgl_glut_example_SOURCES = wnd_samples.cpp glut_example.cpp -@USE_GLUT_TRUE@mgl_glut_example_LDADD = $(top_builddir)/widgets/libmgl-glut.la -@USE_WX_TRUE@mgl_wx_example_LDADD = $(WX_LIBS) $(top_builddir)/widgets/libmgl-wx.la +@USE_GLUT_TRUE@mgl_glut_example_LDADD = $(top_builddir)/widgets/libmgl-glut.la $(top_builddir)/mgl/libmgl.la +@USE_WX_TRUE@mgl_wx_example_LDADD = $(WX_LIBS) $(top_builddir)/widgets/libmgl-wx.la $(top_builddir)/mgl/libmgl.la @USE_WX_TRUE@mgl_wx_example_CXXFLAGS = $(WX_FLAGS) $(AM_CXXFLAGS) @USE_WX_TRUE@mgl_wx_example_SOURCES = wnd_samples.cpp wx_example.cpp @@ -361,7 +369,7 @@ mgl_example_LDADD = $(top_builddir)/mgl/libmgl.la @USE_QT_TRUE@DISTCLEANFILES = $(BUILT_SOURCES) @USE_QT_TRUE@ACLOCAL_AMFLAGS = -I $(top_srcdir)/config/ @USE_QT_TRUE@mgl_qt_example_SOURCES = wnd_samples.cpp $(top_builddir)/include/mgl/mgl_qt.moc.cpp $(top_srcdir)/include/mgl/mgl_qt.h qt_example.cpp -@USE_QT_TRUE@mgl_qt_example_LDADD = $(QT_LIBS) $(top_builddir)/widgets/libmgl-qt.la +@USE_QT_TRUE@mgl_qt_example_LDADD = $(QT_LIBS) $(top_builddir)/widgets/libmgl-qt.la $(top_builddir)/mgl/libmgl.la @USE_QT_TRUE@mgl_qt_example_LDFLAGS = $(QT_LDFLAGS) @USE_QT_TRUE@mgl_qt_example_CPPFLAGS = $(QT_CPPFLAGS) $(AM_CPPFLAGS) @USE_QT_TRUE@mgl_qt_example_CXXFLAGS = $(QT_CXXFLAGS) $(AM_CXXFLAGS) diff --git a/examples/fltk_example.cpp b/examples/fltk_example.cpp index 53a6686..9a54ac7 100644 --- a/examples/fltk_example.cpp +++ b/examples/fltk_example.cpp @@ -27,8 +27,32 @@ int sample_2(mglGraph *gr, void *); int sample_3(mglGraph *gr, void *); int sample_d(mglGraph *gr, void *); //----------------------------------------------------------------------------- +#include +#include +mglPoint pnt; // some global variable for changable data +void *mgl_fltk_tmp(void *) { mglFlRun(); return 0; } +//----------------------------------------------------------------------------- int main(int argc,char **argv) -{ +{ +#ifdef PTHREAD_SAMPLE + mglGraphFLTK gr; + gr.Window(argc,argv,NULL,"test",0,0); // create window + gr.ClfOnUpdate = false; + static pthread_t tmp; + pthread_create(&tmp, 0, mgl_fltk_tmp, 0); + pthread_detach(tmp); // run window handling in the separate thread + for(int i=0;i<10;i++) // do calculation + { + sleep(2); // which can be very long + pnt = mglPoint(2*mgl_rnd()-1,2*mgl_rnd()-1); + gr.Clf(); // make new drawing + gr.Line(mglPoint(),pnt,"Ar2"); + char str[10] = "i=0"; str[3] = '0'+i; + gr.Text(mglPoint(),""); + gr.Update(); // update window + } + return 0; // finish calculations and close the window*/ +#else mglGraphFLTK gr; char key = 0; if(argc>1 && argv[1][0]!='-') key = argv[1][0]; @@ -42,6 +66,7 @@ int main(int argc,char **argv) case 't': gr.Window(argc,argv,test,"Testing"); break; default: gr.Window(argc,argv,sample,"Example of molecules"); break; } - return mglFlRun(); + return mglFlRun(); +#endif } //----------------------------------------------------------------------------- diff --git a/examples/full_test.cpp b/examples/full_test.cpp index 14c225a..6fb97d5 100644 --- a/examples/full_test.cpp +++ b/examples/full_test.cpp @@ -17,6 +17,7 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#include #include #include #include @@ -29,12 +30,141 @@ //#include //----------------------------------------------------------------------------- #include "mgl/mgl_parse.h" +extern mglTeXsymb mgl_tex_symb[]; int test(mglGraphAB *gr) { + int N[5] = {0, 28, 52, 73, 85}; + char text[256]; + float tmin = -900, tmax = -400, dt = 100; + double amp[5] = {1., 1.62, 3.98, 5.53, 8.54}; + double z0 = 0.031;//0.063 + gr->SetSize(2400,800); + gr->Clf(); gr->RotatedText = false; gr->TuneTicks = false; + gr->InPlot(0,0.3,0.15,1); + gr->Axis(mglPoint(tmin,-1,-0.65),mglPoint(tmax,1,1),mglPoint(tmin,0,0)); + gr->CAxis(0,1); gr->Light(true); gr->Alpha(true); gr->AlphaDef = 0.6; + gr->Rotate(75-7*1*0-5*1,365); + sprintf(text,"\\i z = %g z_R",N[0]*z0); + gr->Puts(mglPoint(0.5*(tmin+tmax),-1,-0.8),text,"rC"); + sprintf(text,"\\i I_{max}=%g",amp[0]); + gr->Puts(mglPoint(0.5*(tmax+tmin),0,1.1),text,"rC"); + gr->Light(false); gr->Alpha(false); + gr->Line(mglPoint(tmin,-1,0),mglPoint(tmax,-1,0),"r5"); + gr->dz = 0.2; gr->dx = dt; + gr->Min.z = 0; + //gr->Axis("_yz"); + float size = gr->FontSize; gr->FontSize = 4; + gr->Axis("_y"); gr->Axis("z"); + gr->Org = mglPoint(tmin,-1,0); gr->Axis("x"); gr->FontSize = size; + gr->Min.z = -0.65; + gr->Org = mglPoint(tmin,0,-0.65); gr->Axis("_xy"); + //------------------------------------------------------------------------------------ + //-----------------------------Второй график----------------------------------------- + gr->InPlot(0.172,0.472,0.135,0.985); + gr->Axis(mglPoint(tmin,-1,-0.65),mglPoint(tmax,1,1),mglPoint(tmin,0,0)); + gr->CAxis(0,1); gr->Light(true); gr->Alpha(true); gr->AlphaDef = 0.6; + gr->Rotate(75-7*1*0-5*1,365); + sprintf(text,"\\i z = %g z_R",N[1]*z0); + gr->Puts(mglPoint(0.5*(tmin+tmax),-1,-0.8),text,"rC"); + sprintf(text,"\\i I_{max}=%g",amp[1]); + gr->Puts(mglPoint(0.5*(tmax+tmin),0,1.1),text,"rC"); + gr->Light(false); gr->Alpha(false); + gr->Line(mglPoint(tmin,-1,0),mglPoint(tmax,-1,0),"r5"); + gr->Min.z = 0; + gr->Axis("_xyz"); + gr->Min.z = -0.65; + gr->Org = mglPoint(tmin,0,-0.65); gr->Axis("_xy"); +/* //------------------------------------------------------------------------------------ + //-----------------------------Третий график----------------------------------------- + u->ReadHDF(_sprintf("%d.h5",N[2]),"/Real(E)"); u->Transpose(); + intensity( Nt, Nr, k, w0, u->a ); (V+2)->Set(u->a,Nt,Nr); + std::cout<<"Max = "<Norm(0,1); (V+5)->Set((V+2)->a,Nt,1); + gr->InPlot(0.344,0.644,0.12,0.97); + gr->Axis(mglPoint(tmin,-1,-0.65),mglPoint(tmax,1,1),mglPoint(tmin,0,0)); + gr->CAxis(0,1); gr->Light(true); gr->Alpha(true); gr->AlphaDef = 0.6; + gr->Rotate(75-7*1*0-5*1,365); + sprintf(text,"\\i z = %g z_R",N[2]*z0); + gr->Puts(mglPoint(0.5*(tmin+tmax),-1,-0.8),text,"rC"); + sprintf(text,"\\i I_{max}=%g",amp[2]); + gr->Puts(mglPoint(0.5*(tmax+tmin),0,1.1),text,"rC"); + gr->Surf(V[0],V[1],V[2],"wyrRk"); gr->Surf(V[0],V[3],V[2],"wyrRk"); + gr->Plot(V[0],V[4],V[5],"b3"); + gr->Cont(V[0],V[1],V[2],"wyrRk",20); gr->Cont(V[0],V[3],V[2],"wyrRk",20); + gr->Light(false); gr->Alpha(false); + (V+2)->Norm(0,1); + gr->Dens(V[0],V[1],V[2],"wyrRk"); gr->Dens(V[0],V[3],V[2],"wyrRk"); + gr->Line(mglPoint(tmin,-1,0),mglPoint(tmax,-1,0),"r5"); + gr->Min.z = 0; + gr->Axis("_xyz"); + gr->Min.z = -0.65; + gr->Org = mglPoint(tmin,0,-0.65); gr->Axis("_xy"); + //------------------------------------------------------------------------------------ + //-----------------------------Четвертый график----------------------------------------- + u->ReadHDF(_sprintf("%d.h5",N[3]),"/Real(E)"); u->Transpose(); + intensity( Nt, Nr, k, w0, u->a ); (V+2)->Set(u->a,Nt,Nr); + std::cout<<"Max = "<Norm(0,1); (V+5)->Set((V+2)->a,Nt,1); + gr->InPlot(0.516,0.816,0.105,0.955); + gr->Axis(mglPoint(tmin,-1,-0.65),mglPoint(tmax,1,1),mglPoint(tmin,0,0)); + gr->CAxis(0,1); gr->Light(true); gr->Alpha(true); gr->AlphaDef = 0.6; + gr->Rotate(75-7*1*0-5*1,365); + sprintf(text,"\\i z = %g z_R",N[3]*z0); + gr->Puts(mglPoint(0.5*(tmin+tmax),-1,-0.8),text,"rC"); + sprintf(text,"\\i I_{max}=%g",amp[3]); + gr->Puts(mglPoint(0.5*(tmax+tmin),0,1.1),text,"rC"); + gr->Surf(V[0],V[1],V[2],"wyrRk"); gr->Surf(V[0],V[3],V[2],"wyrRk"); + gr->Plot(V[0],V[4],V[5],"b3"); + gr->Cont(V[0],V[1],V[2],"wyrRk",20); gr->Cont(V[0],V[3],V[2],"wyrRk",20); + gr->Light(false); gr->Alpha(false); + (V+2)->Norm(0,1); + gr->Dens(V[0],V[1],V[2],"wyrRk"); gr->Dens(V[0],V[3],V[2],"wyrRk"); + gr->Line(mglPoint(tmin,-1,0),mglPoint(tmax,-1,0),"r5"); + gr->Min.z = 0; + gr->Axis("_xyz"); + gr->Min.z = -0.65; + gr->Org = mglPoint(tmin,0,-0.65); gr->Axis("_xy"); + //------------------------------------------------------------------------------------ + //-----------------------------Пятый график----------------------------------------- + u->ReadHDF(_sprintf("%d.h5",N[4]),"/Real(E)"); u->Transpose(); + intensity( Nt, Nr, k, w0, u->a ); (V+2)->Set(u->a,Nt,Nr); + std::cout<<"Max = "<Norm(0,1); (V+5)->Set((V+2)->a,Nt,1); + gr->InPlot(0.688,0.988,0.09,0.94); + gr->Axis(mglPoint(tmin,-1,-0.65),mglPoint(tmax,1,1),mglPoint(tmin,0,0)); + gr->CAxis(0,1); gr->Light(true); gr->Alpha(true); gr->AlphaDef = 0.6; + gr->Rotate(75-7*1*0-5*1,365); + sprintf(text,"\\i z = %g z_R",N[4]*z0); + gr->Puts(mglPoint(0.5*(tmin+tmax),-1,-0.8),text,"rC"); + sprintf(text,"\\i I_{max}=%g",amp[4]); + gr->Puts(mglPoint(0.5*(tmax+tmin),0,1.1),text,"rC"); + gr->Surf(V[0],V[1],V[2],"wyrRk"); gr->Surf(V[0],V[3],V[2],"wyrRk"); + gr->Plot(V[0],V[4],V[5],"b3"); + gr->Cont(V[0],V[1],V[2],"wyrRk",20); gr->Cont(V[0],V[3],V[2],"wyrRk",20); + gr->Light(false); gr->Alpha(false); + (V+2)->Norm(0,1); + gr->Dens(V[0],V[1],V[2],"wyrRk"); gr->Dens(V[0],V[3],V[2],"wyrRk"); + gr->Line(mglPoint(tmin,-1,0),mglPoint(tmax,-1,0),"r5A"); + gr->Puts(mglPoint(1.1*tmax,-1,-0.15),"\\tau","rR",-1.6); + gr->Puts(mglPoint(0.9*tmax,0,-0.1),"\\rho","rR",-1.6); + gr->Min.z = 0; + gr->Axis("_xyz"); + gr->Min.z = -0.65; + gr->Org = mglPoint(tmin,0,-0.65); gr->Axis("_xy"); +*/ + return 0; + + + + + + + + mglParse par; par.AllowSetSize = true; FILE *fp=fopen("test.mgl","rt"); - par.Execute(gr,fp); + par.Execute(gr,fp,true); fclose(fp); /* gr->SetDrawReg(2,2,1); gr->Rotate(40,60); @@ -227,84 +357,95 @@ void smgl_map(mglGraph *gr) // example of mapping gr->Map(a, b, "brgk", 0, false); } //----------------------------------------------------------------------------- +void smgl_color_schemes(mglGraph *gr) // Color table +{ + mglData a(256,2); a.Fill(-1,1); + gr->SubPlot(2,10,0,0.2); gr->Dens(a,"kw"); + gr->Puts(mglPoint(-1.4, -0.3), "kw", "C", -8); + gr->SubPlot(2,10,1,0.2); gr->Dens(a,"wk"); + gr->Puts(mglPoint(-1.4, -0.3), "wk", "C", -8); + gr->SubPlot(2,10,2,0.2); gr->Dens(a,"kHCcw"); + gr->Puts(mglPoint(-1.4, -0.3), "kHCcw", "C", -8); + gr->SubPlot(2,10,3,0.2); gr->Dens(a,"kBbcw"); + gr->Puts(mglPoint(-1.4, -0.3), "kBbcw", "C", -8); + gr->SubPlot(2,10,4,0.2); gr->Dens(a,"kRryw"); + gr->Puts(mglPoint(-1.4, -0.3), "kRryw", "C", -8); + gr->SubPlot(2,10,5,0.2); gr->Dens(a,"kGgew"); + gr->Puts(mglPoint(-1.4, -0.3), "kGgew", "C", -8); + gr->SubPlot(2,10,6,0.2); gr->Dens(a,"BbwrR"); + gr->Puts(mglPoint(-1.4, -0.3), "BbwrR", "C", -8); + gr->SubPlot(2,10,7,0.2); gr->Dens(a,"BbwgG"); + gr->Puts(mglPoint(-1.4, -0.3), "BbwgG", "C", -8); + gr->SubPlot(2,10,8,0.2); gr->Dens(a,"GgwmM"); + gr->Puts(mglPoint(-1.4, -0.3), "GgwmM", "C", -8); + gr->SubPlot(2,10,9,0.2); gr->Dens(a,"UuwqR"); + gr->Puts(mglPoint(-1.4, -0.3), "UuwqR", "C", -8); + gr->SubPlot(2,10,10,0.2); gr->Dens(a,"QqwcC"); + gr->Puts(mglPoint(-1.4, -0.3), "QqwcC", "C", -8); + gr->SubPlot(2,10,11,0.2); gr->Dens(a,"CcwyY"); + gr->Puts(mglPoint(-1.4, -0.3), "CcwyY", "C", -8); + gr->SubPlot(2,10,12,0.2); gr->Dens(a,"bcwyr"); + gr->Puts(mglPoint(-1.4, -0.3), "bcwyr", "C", -8); + gr->SubPlot(2,10,13,0.2); gr->Dens(a,"bwr"); + gr->Puts(mglPoint(-1.4, -0.3), "bwr", "C", -8); + gr->SubPlot(2,10,14,0.2); gr->Dens(a,"BbcyrR"); + gr->Puts(mglPoint(-1.4, -0.3), "BbcyrR", "C", -8); + gr->SubPlot(2,10,15,0.2); gr->Dens(a,"UbcyqR"); + gr->Puts(mglPoint(-1.4, -0.3), "UbcyqR", "C", -8); + gr->SubPlot(2,10,16,0.2); gr->Dens(a,"BbcwyrR"); + gr->Puts(mglPoint(-1.4, -0.3), "BbcwyrR", "C", -8); + gr->SubPlot(2,10,17,0.2); gr->Dens(a,"bcyr"); + gr->Puts(mglPoint(-1.4, -0.3), "bcyr", "C", -8); + gr->SubPlot(2,10,18,0.2); gr->Dens(a,"BbcyrR|"); + gr->Puts(mglPoint(-1.4, -0.3), "BbcyrR|", "C", -8); + gr->SubPlot(2,10,19,0.2); gr->Dens(a,"bgr"); + gr->Puts(mglPoint(-1.4, -0.3), "bgr", "C", -8); +} +//----------------------------------------------------------------------------- void smgl_colors(mglGraph *gr) // Color table { - gr->Face(mglPoint(-1, -1), mglPoint(-1, -0.7), mglPoint(-0.6,-1), mglPoint(-0.6,-0.7), "L#"); - gr->Puts(mglPoint(-0.8,-0.9, 0.01), "L", "C:w", -1.4); - gr->Face(mglPoint(-0.6,-1), mglPoint(-0.6,-0.7), mglPoint(-0.2,-1), mglPoint(-0.2,-0.7), "E#"); - gr->Puts(mglPoint(-0.4,-0.9, 0.01), "E", "C:w", -1.4); - gr->Face(mglPoint(-0.2,-1), mglPoint(-0.2,-0.7), mglPoint(0.2,-1), mglPoint(0.2,-0.7), "N#"); - gr->Puts(mglPoint(0, -0.9, 0.01), "N", "C:w", -1.4); - gr->Face(mglPoint(0.2,-1), mglPoint(0.2,-0.7), mglPoint(0.6,-1), mglPoint(0.6,-0.7), "U#"); - gr->Puts(mglPoint(0.4,-0.9, 0.01), "U", "C:w", -1.4); - gr->Face(mglPoint(0.6,-1), mglPoint(0.6,-0.7), mglPoint(1, -1), mglPoint(1, -0.7), "Q#"); - gr->Puts(mglPoint(0.8,-0.9, 0.01), "Q", "C:w", -1.4); + //#LENUQ + gr->FaceZ(-1, -1, 0, 0.4, 0.3, "L#"); gr->Puts(mglPoint(-0.8,-0.9), "L", "C:w", -1.4); + gr->FaceZ(-0.6, -1, 0, 0.4, 0.3, "E#"); gr->Puts(mglPoint(-0.4,-0.9), "E", "C:w", -1.4); + gr->FaceZ(-0.2, -1, 0, 0.4, 0.3, "N#"); gr->Puts(mglPoint(0, -0.9), "N", "C:w", -1.4); + gr->FaceZ(0.2, -1, 0, 0.4, 0.3, "U#"); gr->Puts(mglPoint(0.4,-0.9), "U", "C:w", -1.4); + gr->FaceZ(0.6, -1, 0, 0.4, 0.3, "Q#"); gr->Puts(mglPoint(0.8,-0.9), "Q", "C:w", -1.4); //#lenuq - gr->Face(mglPoint(-1, -0.7), mglPoint(-1, -0.4), mglPoint(-0.6,-0.7), mglPoint(-0.6,-0.4), "l#"); - gr->Puts(mglPoint(-0.8,-0.6, 0.01), "l", "C:k", -1.4); - gr->Face(mglPoint(-0.6,-0.7), mglPoint(-0.6,-0.4), mglPoint(-0.2,-0.7), mglPoint(-0.2,-0.4), "e#"); - gr->Puts(mglPoint(-0.4,-0.6, 0.01), "e", "C:k", -1.4); - gr->Face(mglPoint(-0.2,-0.7), mglPoint(-0.2,-0.4), mglPoint(0.2,-0.7), mglPoint(0.2,-0.4), "n#"); - gr->Puts(mglPoint(0, -0.6, 0.01), "n", "C:k", -1.4); - gr->Face(mglPoint(0.2,-0.7), mglPoint(0.2,-0.4), mglPoint(0.6,-0.7), mglPoint(0.6,-0.4), "u#"); - gr->Puts(mglPoint(0.4,-0.6, 0.01), "u", "C:k", -1.4); - gr->Face(mglPoint(0.6,-0.7), mglPoint(0.6,-0.4), mglPoint(1, -0.7), mglPoint(1, -0.4), "q#"); - gr->Puts(mglPoint(0.8,-0.6, 0.01), "q", "C:k", -1.4); + gr->FaceZ(-1, -0.7, 0, 0.4, 0.3, "l#"); gr->Puts(mglPoint(-0.8,-0.6), "l", "C:k", -1.4); + gr->FaceZ(-0.6, -0.7, 0, 0.4, 0.3, "e#"); gr->Puts(mglPoint(-0.4,-0.6), "e", "C:k", -1.4); + gr->FaceZ(-0.2, -0.7, 0, 0.4, 0.3, "n#"); gr->Puts(mglPoint(0, -0.6), "n", "C:k", -1.4); + gr->FaceZ(0.2, -0.7, 0, 0.4, 0.3, "u#"); gr->Puts(mglPoint(0.4,-0.6), "u", "C:k", -1.4); + gr->FaceZ(0.6, -0.7, 0, 0.4, 0.3, "q#"); gr->Puts(mglPoint(0.8,-0.6), "q", "C:k", -1.4); //#CMYkP - gr->Face(mglPoint(-1, -0.4), mglPoint(-1, -0.1), mglPoint(-0.6,-0.4), mglPoint(-0.6,-0.1), "C#"); - gr->Puts(mglPoint(-0.8,-0.3, 0.01), "C", "C:w", -1.4); - gr->Face(mglPoint(-0.6,-0.4), mglPoint(-0.6,-0.1), mglPoint(-0.2,-0.4), mglPoint(-0.2,-0.1), "M#"); - gr->Puts(mglPoint(-0.4,-0.3, 0.01), "M", "C:w", -1.4); - gr->Face(mglPoint(-0.2,-0.4), mglPoint(-0.2,-0.1), mglPoint(0.2,-0.4), mglPoint(0.2,-0.1), "Y#"); - gr->Puts(mglPoint(0, -0.3, 0.01), "Y", "C:w", -1.4); - gr->Face(mglPoint(0.2,-0.4), mglPoint(0.2,-0.1), mglPoint(0.6,-0.4), mglPoint(0.6,-0.1), "k#"); - gr->Puts(mglPoint(0.4,-0.3, 0.01), "k", "C:w", -1.4); - gr->Face(mglPoint(0.6,-0.4), mglPoint(0.6,-0.1), mglPoint(1, -0.4), mglPoint(1, -0.1), "P#"); - gr->Puts(mglPoint(0.8,-0.3, 0.01), "P", "C:w", -1.4); + gr->FaceZ(-1, -0.4, 0, 0.4, 0.3, "C#"); gr->Puts(mglPoint(-0.8,-0.3), "C", "C:w", -1.4); + gr->FaceZ(-0.6, -0.4, 0, 0.4, 0.3, "M#"); gr->Puts(mglPoint(-0.4,-0.3), "M", "C:w", -1.4); + gr->FaceZ(-0.2, -0.4, 0, 0.4, 0.3, "Y#"); gr->Puts(mglPoint(0, -0.3), "Y", "C:w", -1.4); + gr->FaceZ(0.2, -0.4, 0, 0.4, 0.3, "k#"); gr->Puts(mglPoint(0.4,-0.3), "k", "C:w", -1.4); + gr->FaceZ(0.6, -0.4, 0, 0.4, 0.3, "P#"); gr->Puts(mglPoint(0.8,-0.3), "P", "C:w", -1.4); //#cmywp - gr->Face(mglPoint(-1, -0.1), mglPoint(-1, 0.2), mglPoint(-0.6,-0.1), mglPoint(-0.6, 0.2), "c#"); - gr->Puts(mglPoint(-0.8, 0, 0.01), "c", "C:k", -1.4); - gr->Face(mglPoint(-0.6,-0.1), mglPoint(-0.6, 0.2), mglPoint(-0.2,-0.1), mglPoint(-0.2, 0.2), "m#"); - gr->Puts(mglPoint(-0.4, 0, 0.01), "m", "C:k", -1.4); - gr->Face(mglPoint(-0.2,-0.1), mglPoint(-0.2, 0.2), mglPoint(0.2,-0.1), mglPoint(0.2, 0.2), "y#"); - gr->Puts(mglPoint(0, 0, 0.01), "y", "C:k", -1.4); - gr->Face(mglPoint(0.2,-0.1), mglPoint(0.2, 0.2), mglPoint(0.6,-0.1), mglPoint(0.6, 0.2), "w#"); - gr->Puts(mglPoint(0.4, 0, 0.01), "w", "C:k", -1.4); - gr->Face(mglPoint(0.6,-0.1), mglPoint(0.6, 0.2), mglPoint(1, -0.1), mglPoint(1, 0.2), "p#"); - gr->Puts(mglPoint(0.8, 0, 0.01), "p", "C:k", -1.4); + gr->FaceZ(-1, -0.1, 0, 0.4, 0.3, "c#"); gr->Puts(mglPoint(-0.8, 0), "c", "C:k", -1.4); + gr->FaceZ(-0.6, -0.1, 0, 0.4, 0.3, "m#"); gr->Puts(mglPoint(-0.4, 0), "m", "C:k", -1.4); + gr->FaceZ(-0.2, -0.1, 0, 0.4, 0.3, "y#"); gr->Puts(mglPoint(0, 0), "y", "C:k", -1.4); + gr->FaceZ(0.2, -0.1, 0, 0.4, 0.3, "w#"); gr->Puts(mglPoint(0.4, 0), "w", "C:k", -1.4); + gr->FaceZ(0.6, -0.1, 0, 0.4, 0.3, "p#"); gr->Puts(mglPoint(0.8, 0), "p", "C:k", -1.4); //#BGRHW - gr->Face(mglPoint(-1, 0.2), mglPoint(-1, 0.5), mglPoint(-0.6, 0.2), mglPoint(-0.6, 0.5), "B#"); - gr->Puts(mglPoint(-0.8, 0.3, 0.01), "B", "C:w", -1.4); - gr->Face(mglPoint(-0.6, 0.2), mglPoint(-0.6, 0.5), mglPoint(-0.2, 0.2), mglPoint(-0.2, 0.5), "G#"); - gr->Puts(mglPoint(-0.4, 0.3, 0.01), "G", "C:w", -1.4); - gr->Face(mglPoint(-0.2, 0.2), mglPoint(-0.2, 0.5), mglPoint(0.2, 0.2), mglPoint(0.2, 0.5), "R#"); - gr->Puts(mglPoint(0, 0.3, 0.01), "R", "C:w", -1.4); - gr->Face(mglPoint(0.2, 0.2), mglPoint(0.2, 0.5), mglPoint(0.6, 0.2), mglPoint(0.6, 0.5), "H#"); - gr->Puts(mglPoint(0.4, 0.3, 0.01), "H", "C:w", -1.4); - gr->Face(mglPoint(0.6, 0.2), mglPoint(0.6, 0.5), mglPoint(1, 0.2), mglPoint(1, 0.5), "W#"); - gr->Puts(mglPoint(0.8, 0.3, 0.01), "W", "C:w", -1.4); + gr->FaceZ(-1, 0.2, 0, 0.4, 0.3, "B#"); gr->Puts(mglPoint(-0.8, 0.3), "B", "C:w", -1.4); + gr->FaceZ(-0.6, 0.2, 0, 0.4, 0.3, "G#"); gr->Puts(mglPoint(-0.4, 0.3), "G", "C:w", -1.4); + gr->FaceZ(-0.2, 0.2, 0, 0.4, 0.3, "R#"); gr->Puts(mglPoint(0, 0.3), "R", "C:w", -1.4); + gr->FaceZ(0.2, 0.2, 0, 0.4, 0.3, "H#"); gr->Puts(mglPoint(0.4, 0.3), "H", "C:w", -1.4); + gr->FaceZ(0.6, 0.2, 0, 0.4, 0.3, "W#"); gr->Puts(mglPoint(0.8, 0.3), "W", "C:w", -1.4); //#bgrhw - gr->Face(mglPoint(-1, 0.5), mglPoint(-1, 0.8), mglPoint(-0.6, 0.5), mglPoint(-0.6, 0.8), "b#"); - gr->Puts(mglPoint(-0.8, 0.6, 0.01), "b", "C:k", -1.4); - gr->Face(mglPoint(-0.6, 0.5), mglPoint(-0.6, 0.8), mglPoint(-0.2, 0.5), mglPoint(-0.2, 0.8), "g#"); - gr->Puts(mglPoint(-0.4, 0.6, 0.01), "g", "C:k", -1.4); - gr->Face(mglPoint(-0.2, 0.5), mglPoint(-0.2, 0.8), mglPoint(0.2, 0.5), mglPoint(0.2, 0.8), "r#"); - gr->Puts(mglPoint(0, 0.6, 0.01), "r", "C:k", -1.4); - gr->Face(mglPoint(0.2, 0.5), mglPoint(0.2, 0.8), mglPoint(0.6, 0.5), mglPoint(0.6, 0.8), "h#"); - gr->Puts(mglPoint(0.4, 0.6, 0.01), "h", "C:k", -1.4); - gr->Face(mglPoint(0.6, 0.5), mglPoint(0.6, 0.8), mglPoint(1, 0.5), mglPoint(1, 0.8), "w#"); - gr->Puts(mglPoint(0.8, 0.6, 0.01), "w", "C:k", -1.4); + gr->FaceZ(-1, 0.5, 0, 0.4, 0.3, "b#"); gr->Puts(mglPoint(-0.8, 0.6), "b", "C:k", -1.4); + gr->FaceZ(-0.6, 0.5, 0, 0.4, 0.3, "g#"); gr->Puts(mglPoint(-0.4, 0.6), "g", "C:k", -1.4); + gr->FaceZ(-0.2, 0.5, 0, 0.4, 0.3, "r#"); gr->Puts(mglPoint(0, 0.6), "r", "C:k", -1.4); + gr->FaceZ(0.2, 0.5, 0, 0.4, 0.3, "h#"); gr->Puts(mglPoint(0.4, 0.6), "h", "C:k", -1.4); + gr->FaceZ(0.6, 0.5, 0, 0.4, 0.3, "w#"); gr->Puts(mglPoint(0.8, 0.6), "w", "C:k", -1.4); //#brighted - gr->Face(mglPoint(-1, 0.8), mglPoint(-1, 1.1), mglPoint(-0.6, 0.8), mglPoint(-0.6, 1.1), "r1#"); - gr->Puts(mglPoint(-0.8, 0.9, 0.01), "r1", "C:w", -1.4); - gr->Face(mglPoint(-0.6, 0.8), mglPoint(-0.6, 1.1), mglPoint(-0.2, 0.8), mglPoint(-0.2, 1.1), "r3#"); - gr->Puts(mglPoint(-0.4, 0.9, 0.01), "r3", "C:w", -1.4); - gr->Face(mglPoint(-0.2, 0.8), mglPoint(-0.2, 1.1), mglPoint(0.2, 0.8), mglPoint(0.2, 1.1), "r5#"); - gr->Puts(mglPoint(0, 0.9, 0.01), "r5", "C:k", -1.4); - gr->Face(mglPoint(0.2, 0.8), mglPoint(0.2, 1.1), mglPoint(0.6, 0.8), mglPoint(0.6, 1.1), "r7#"); - gr->Puts(mglPoint(0.4, 0.9, 0.01), "r7", "C:k", -1.4); - gr->Face(mglPoint(0.6, 0.8), mglPoint(0.6, 1.1), mglPoint(1, 0.8), mglPoint(1, 1.1), "r9#"); - gr->Puts(mglPoint(0.8, 0.9, 0.01), "r9", "C:k", -1.4); + gr->FaceZ(-1, 0.8, 0, 0.4, 0.3, "r1#"); gr->Puts(mglPoint(-0.8, 0.9), "r1", "C:w", -1.4); + gr->FaceZ(-0.6, 0.8, 0, 0.4, 0.3, "r3#"); gr->Puts(mglPoint(-0.4, 0.9), "r3", "C:w", -1.4); + gr->FaceZ(-0.2, 0.8, 0, 0.4, 0.3, "r5#"); gr->Puts(mglPoint(0, 0.9), "r5", "C:k", -1.4); + gr->FaceZ(0.2, 0.8, 0, 0.4, 0.3, "r7#"); gr->Puts(mglPoint(0.4, 0.9), "r7", "C:k", -1.4); + gr->FaceZ(0.6, 0.8, 0, 0.4, 0.3, "r9#"); gr->Puts(mglPoint(0.8, 0.9), "r9", "C:k", -1.4); } //----------------------------------------------------------------------------- void smgl_qo2d(mglGraph *gr) @@ -536,7 +677,7 @@ void smgl_sample8(mglGraph *gr) // 1d plot mglData x(50); x.Modify("cos(pi*2*x-pi)"); gr->Plot(x,y0,"Y+"); - gr->Plot2(y1,"q|"); + gr->Plot(y1.SubData(-1,0),y1.SubData(-1,1),"q|"); gr->SubPlot(2,2,2); gr->Rotate(60,40); mglData z(50); z.Modify("2*x-1"); @@ -544,7 +685,7 @@ void smgl_sample8(mglGraph *gr) // 1d plot mglData y2(10,3); y2.Modify("cos(pi*(2*x-1-y))"); y2.Modify("2*x-1",2); - gr->Plot3(y2,"bo "); + gr->Plot(y2.SubData(-1,0),y2.SubData(-1,1),y2.SubData(-1,2),"bo "); gr->SubPlot(2,2,3); gr->Rotate(60,40); gr->Bars(x,y0,z,"ri"); gr->Box(); @@ -588,23 +729,42 @@ void smgl_sample6(mglGraph *gr) // differentiate void smgl_sample5(mglGraph *gr) // pen styles { if(type==5) gr->Puts(mglPoint(0,1.2),"line styles not supported","rL"); - gr->Line(mglPoint(0,1,0),mglPoint(0.3,1,0),"k-"); gr->Puts(mglPoint(0.4,1),"Solid '-'","rL"); - gr->Line(mglPoint(0,0.7,0),mglPoint(0.3,0.7,0),"k|"); gr->Puts(mglPoint(0.4,0.7),"Dash '|'","rL"); - gr->Line(mglPoint(0,0.4,0),mglPoint(0.3,0.4,0),"k;"); gr->Puts(mglPoint(0.4,0.4),"Small dash ';'","rL"); - gr->Line(mglPoint(0,0.1,0),mglPoint(0.3,0.1,0),"kj"); gr->Puts(mglPoint(0.4,0.1),"Dash-dot 'j'","rL"); - gr->Line(mglPoint(0,-0.2,0),mglPoint(0.3,-0.2,0),"ki"); gr->Puts(mglPoint(0.4,-0.2),"Small dash-dot 'i'","rL"); - gr->Line(mglPoint(0,-0.5,0),mglPoint(0.3,-0.5,0),"k:"); gr->Puts(mglPoint(0.4,-0.5),"Dots ':'","rL"); - gr->Line(mglPoint(0,-0.8,0),mglPoint(0.3,-0.8,0),"k "); gr->Puts(mglPoint(0.4,-0.8),"None ' '","rL"); + mreal d,x1,x2,x0,y=0.95; + d=0.3, x0=0.2, x1=0.5, x2=0.6; + gr->Line(mglPoint(x0,1-0*d),mglPoint(x1,1-0*d),"k-"); gr->Puts(mglPoint(x2,y-0*d),"Solid '-'","rL"); + gr->Line(mglPoint(x0,1-1*d),mglPoint(x1,1-1*d),"k|"); gr->Puts(mglPoint(x2,y-1*d),"Long Dash '|'","rL"); + gr->Line(mglPoint(x0,1-2*d),mglPoint(x1,1-2*d),"k;"); gr->Puts(mglPoint(x2,y-2*d),"Dash ';'","rL"); + gr->Line(mglPoint(x0,1-3*d),mglPoint(x1,1-3*d),"k="); gr->Puts(mglPoint(x2,y-3*d),"Small dash '='","rL"); + gr->Line(mglPoint(x0,1-4*d),mglPoint(x1,1-4*d),"kj"); gr->Puts(mglPoint(x2,y-4*d),"Dash-dot 'j'","rL"); + gr->Line(mglPoint(x0,1-5*d),mglPoint(x1,1-5*d),"ki"); gr->Puts(mglPoint(x2,y-5*d),"Small dash-dot 'i'","rL"); + gr->Line(mglPoint(x0,1-6*d),mglPoint(x1,1-6*d),"k:"); gr->Puts(mglPoint(x2,y-6*d),"Dots ':'","rL"); + gr->Line(mglPoint(x0,1-7*d),mglPoint(x1,1-7*d),"k "); gr->Puts(mglPoint(x2,y-7*d),"None ' '","rL"); + + d=0.25; x1=-1; x0=-0.8; y = -0.05; + gr->Mark(mglPoint(x1,5*d),'.'); gr->Puts(mglPoint(x0,y+5*d),"'.'","rL"); + gr->Mark(mglPoint(x1,4*d),'+'); gr->Puts(mglPoint(x0,y+4*d),"'+'","rL"); + gr->Mark(mglPoint(x1,3*d),'x'); gr->Puts(mglPoint(x0,y+3*d),"'x'","rL"); + gr->Mark(mglPoint(x1,2*d),'*'); gr->Puts(mglPoint(x0,y+2*d),"'*'","rL"); + gr->Mark(mglPoint(x1,d),'s'); gr->Puts(mglPoint(x0,y+d),"'s'","rL"); + gr->Mark(mglPoint(x1,0),'d'); gr->Puts(mglPoint(x0,y),"'d'","rL"); + gr->Mark(mglPoint(x1,-d,0),'o'); gr->Puts(mglPoint(x0,y-d),"'o'","rL"); + gr->Mark(mglPoint(x1,-2*d,0),'^'); gr->Puts(mglPoint(x0,y-2*d),"'\\^'","rL"); + gr->Mark(mglPoint(x1,-3*d,0),'v'); gr->Puts(mglPoint(x0,y-3*d),"'v'","rL"); + gr->Mark(mglPoint(x1,-4*d,0),'<'); gr->Puts(mglPoint(x0,y-4*d),"'<'","rL"); + gr->Mark(mglPoint(x1,-5*d,0),'>'); gr->Puts(mglPoint(x0,y-5*d),"'>'","rL"); - gr->Mark(mglPoint(-1,1.2,0),'.'); gr->Puts(mglPoint(-0.7,1.2),"'.'","rL"); - gr->Mark(mglPoint(-1,0.9,0),'+'); gr->Puts(mglPoint(-0.7,0.9),"'+'","rL"); - gr->Mark(mglPoint(-1,0.6,0),'x'); gr->Puts(mglPoint(-0.7,0.6),"'x'","rL"); - gr->Mark(mglPoint(-1,0.3,0),'*'); gr->Puts(mglPoint(-0.7,0.3),"'*'","rL"); - gr->Mark(mglPoint(-1,0.0,0),'s'); gr->Puts(mglPoint(-0.7,0.0),"'s'","rL"); - gr->Mark(mglPoint(-1,-0.3,0),'d'); gr->Puts(mglPoint(-0.7,-0.3),"'d'","rL"); - gr->Mark(mglPoint(-1,-0.6,0),'o'); gr->Puts(mglPoint(-0.7,-0.6),"'o'","rL"); - gr->Mark(mglPoint(-1,-0.9,0),'^'); gr->Puts(mglPoint(-0.7,-0.9),"'\\^'","rL"); - gr->Mark(mglPoint(-1,-1.2,0),'v'); gr->Puts(mglPoint(-0.7,-1.2),"'v'","rL"); + d=0.25; x1=-0.5; x0=-0.3; y = -0.05; + gr->Mark(mglPoint(x1,5*d),'C'); gr->Puts(mglPoint(x0,y+5*d),"'\\#.'","rL"); + gr->Mark(mglPoint(x1,4*d),'P'); gr->Puts(mglPoint(x0,y+4*d),"'\\#+'","rL"); + gr->Mark(mglPoint(x1,3*d),'X'); gr->Puts(mglPoint(x0,y+3*d),"'\\#x'","rL"); + gr->Mark(mglPoint(x1,2*d),'Y'); gr->Puts(mglPoint(x0,y+2*d),"'\\#*'","rL"); + gr->Mark(mglPoint(x1,d),'S'); gr->Puts(mglPoint(x0,y+d),"'\\#s'","rL"); + gr->Mark(mglPoint(x1,0),'D'); gr->Puts(mglPoint(x0,y),"'\\#d'","rL"); + gr->Mark(mglPoint(x1,-d,0),'O'); gr->Puts(mglPoint(x0,y-d),"'\\#o'","rL"); + gr->Mark(mglPoint(x1,-2*d,0),'T'); gr->Puts(mglPoint(x0,y-2*d),"'\\#\\^'","rL"); + gr->Mark(mglPoint(x1,-3*d,0),'V'); gr->Puts(mglPoint(x0,y-3*d),"'\\#v'","rL"); + gr->Mark(mglPoint(x1,-4*d,0),'L'); gr->Puts(mglPoint(x0,y-4*d),"'\\#<'","rL"); + gr->Mark(mglPoint(x1,-5*d,0),'R'); gr->Puts(mglPoint(x0,y-5*d),"'\\#>'","rL"); } //----------------------------------------------------------------------------- void smgl_sample4(mglGraph *gr) // font features @@ -707,7 +867,7 @@ void smgl_sample1(mglGraph *gr) // transformation gr->SubPlot(2,2,0); // just new axis without rotation and aspects gr->Box(); gr->Text(mglPoint(-1,1.1,1),"Just box","rL"); - gr->InPlot(0.2,0.5,0.7,1); + gr->InPlot(0.2,0.5,0.7,1,false); gr->Box(); gr->Text(mglPoint(0,1.2,1),"InPlot example"); gr->SubPlot(2,2,1); // new axis with aspect and rotation @@ -762,6 +922,12 @@ void smgl_area(mglGraph *gr) gr->Org=mglPoint(); gr->Box(); gr->Area(y); } //----------------------------------------------------------------------------- +void smgl_area_2(mglGraph *gr) +{ + mglData y; mgls_prepare1d(&y); + gr->Org=mglPoint(); gr->Box(); gr->Area(y,"cbgGyr"); +} +//----------------------------------------------------------------------------- void smgl_stem(mglGraph *gr) { mglData y; mgls_prepare1d(&y); @@ -774,6 +940,24 @@ void smgl_step(mglGraph *gr) gr->Box(); gr->Step(y); } //----------------------------------------------------------------------------- +void smgl_bars_2(mglGraph *gr) +{ + mglData ys(10,3); ys.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd"); + gr->Org=mglPoint(); gr->Box(); gr->Bars(ys,"cbgGyr"); +} +//----------------------------------------------------------------------------- +void smgl_bars_a(mglGraph *gr) +{ + mglData ys(10,3); ys.Modify("0.3*sin(pi*(2*x+y/2))+0.1*rnd"); + gr->Org=mglPoint(); gr->Box(); gr->Bars(ys,"a"); +} +//----------------------------------------------------------------------------- +void smgl_bars_f(mglGraph *gr) +{ + mglData ys(10,2); ys.Modify("0.24*sin(pi*(2*x+y/2))+0.06*rnd"); + gr->Org=mglPoint(); gr->Box(); gr->Bars(ys,"f"); +} +//----------------------------------------------------------------------------- void smgl_bars(mglGraph *gr) { mglData ys(10,3); ys.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd"); @@ -807,6 +991,13 @@ void smgl_region(mglGraph *gr) gr->Plot(y1,"k2"); gr->Plot(y2,"k2"); } //----------------------------------------------------------------------------- +void smgl_region_2(mglGraph *gr) +{ + mglData y1,y2; mgls_prepare1d(0, &y1, &y2); + gr->Box(); gr->Region(y2,y1,"yr"); + gr->Plot(y1,"k2"); gr->Plot(y2,"k2"); +} +//----------------------------------------------------------------------------- void smgl_mark(mglGraph *gr) { mglData y,y1; mgls_prepare1d(&y,&y1); @@ -875,6 +1066,14 @@ void smgl_chart(mglGraph *gr) gr->Box(); gr->Chart(ch,"#"); } //----------------------------------------------------------------------------- +void smgl_ring_chart(mglGraph *gr) +{ + mglData ch(7,2); for(int i=0;i<7*2;i++) ch.a[i]=mgl_rnd()+0.1; + gr->Light(true); gr->Rotate(40,60); gr->VertexColor(false); + gr->SetFunc("(y+2)/3*cos(pi*x)","(y+2)/3*sin(pi*x)",""); + gr->Box(); gr->Chart(ch,"bgr cmy#"); +} +//----------------------------------------------------------------------------- void smgl_pie_chart(mglGraph *gr) { mglData ch(7,2); for(int i=0;i<7*2;i++) ch.a[i]=mgl_rnd()+0.1; @@ -897,6 +1096,13 @@ void mgls_prepare2d(mglData *a, mglData *b=0, mglData *v=0) } } //----------------------------------------------------------------------------- +void smgl_grad(mglGraph *gr) +{ + mglData a; mgls_prepare2d(&a); + gr->Box(); gr->Grad(a); + gr->Alpha(true); gr->Dens(a); +} +//----------------------------------------------------------------------------- void smgl_contt(mglGraph *gr) { mglData a; mgls_prepare2d(&a); @@ -935,6 +1141,16 @@ void smgl_surf(mglGraph *gr) gr->Box(); gr->Surf(a); } //----------------------------------------------------------------------------- +void smgl_stereo(mglGraph *gr) +{ + mglData a; mgls_prepare2d(&a); + gr->Light(true); + gr->SubPlot(2,1,0); gr->Rotate(40,60+3); + gr->Box(); gr->Surf(a); + gr->SubPlot(2,1,1); gr->Rotate(40,60-3); + gr->Box(); gr->Surf(a); +} +//----------------------------------------------------------------------------- void smgl_tile(mglGraph *gr) { mglData a; mgls_prepare2d(&a); @@ -1677,7 +1893,7 @@ int main(int argc,char **argv) else gr->SetSize(width,height); if(dotest) - { test(gr); gr->WritePNG("test.png","",false); return 0; } + { test(gr); gr->WriteEPS("test.eps"); gr->WritePNG("test.png","",false); return 0; } if(srnd) mgl_srnd(1); gr->VertexColor(false); gr->TextureColor(true); gr->Compression(false); @@ -1693,7 +1909,11 @@ int main(int argc,char **argv) int i=0; for(i=0;samp[i].name[0];i++); // determine the number of samples s = (mglSample *) bsearch(&tst, samp, i, sizeof(mglSample), mgl_cmd_smp); - if(s) { s->func(gr); save(gr, s->name, suf); } + if(s) + { + gr->DefaultPlotParam(); gr->Clf(); + s->func(gr); save(gr, s->name, suf); + } else printf("no sample %s\n",name); } printf("\n"); return 0; @@ -1702,15 +1922,20 @@ int main(int argc,char **argv) mglSample samp[] = { {"2_axis", smgl_2_axis}, {"area", smgl_area}, + {"area_2", smgl_area_2}, {"axial", smgl_axial}, {"barh", smgl_barh}, {"bars", smgl_bars}, + {"bars_2", smgl_bars_2}, + {"bars_a", smgl_bars_a}, + {"bars_f", smgl_bars_f}, {"belt", smgl_belt}, {"boxplot", smgl_boxplot}, {"boxs", smgl_boxs}, {"chart", smgl_chart}, {"cloud", smgl_cloud}, {"cloudp", smgl_cloudp}, + {"color_schemes", smgl_color_schemes}, {"colors", smgl_colors}, {"column", smgl_column}, {"cont", smgl_cont}, @@ -1739,6 +1964,7 @@ mglSample samp[] = { {"flow3", smgl_flow3}, {"flow_dens", smgl_flow_dens}, {"fonts", smgl_fonts}, + {"grad", smgl_grad}, {"legend", smgl_legend}, {"loglog", smgl_loglog}, {"map", smgl_map}, @@ -1757,6 +1983,8 @@ mglSample samp[] = { {"qo2d", smgl_qo2d}, {"radar", smgl_radar}, {"region", smgl_region}, + {"region_2", smgl_region_2}, + {"ring_chart", smgl_ring_chart}, {"sample1", smgl_sample1}, {"sample2", smgl_sample2}, {"sample3", smgl_sample3}, @@ -1776,6 +2004,7 @@ mglSample samp[] = { {"sew", smgl_sew}, {"stem", smgl_stem}, {"step", smgl_step}, + {"stereo", smgl_stereo}, {"stfa", smgl_stfa}, {"stick", smgl_stick}, {"surf", smgl_surf}, diff --git a/examples/qt_example.cpp b/examples/qt_example.cpp index 6bc5dc1..7233ef8 100644 --- a/examples/qt_example.cpp +++ b/examples/qt_example.cpp @@ -27,8 +27,32 @@ int sample_2(mglGraph *gr, void *); int sample_3(mglGraph *gr, void *); int sample_d(mglGraph *gr, void *); //----------------------------------------------------------------------------- +#include +#include +mglPoint pnt; // some global variable for changable data +void *mgl_qt_tmp(void *) { mglQtRun(); return 0; } +//----------------------------------------------------------------------------- int main(int argc,char **argv) { +#ifdef PTHREAD_SAMPLE + mglGraphQT gr; + gr.Window(argc,argv,NULL,"test",0,0); // create window + gr.ClfOnUpdate = false; + static pthread_t tmp; + pthread_create(&tmp, 0, mgl_qt_tmp, 0); + pthread_detach(tmp); // run window handling in the separate thread + for(int i=0;i<10;i++) // do calculation + { + sleep(2); // which can be very long + pnt = mglPoint(2*mgl_rnd()-1,2*mgl_rnd()-1); + gr.Clf(); // make new drawing + gr.Line(mglPoint(),pnt,"Ar2"); + char str[10] = "i=0"; str[3] = '0'+i; + gr.Text(mglPoint(),""); + gr.Update(); // update window + } + return 0; // finish calculations and close the window +#else mglGraphQT gr; char key = 0; if(argc>1 && argv[1][0]!='-') key = argv[1][0]; @@ -43,5 +67,6 @@ int main(int argc,char **argv) default: gr.Window(argc,argv,sample,"Example of molecules"); break; } return mglQtRun(); +#endif } //----------------------------------------------------------------------------- diff --git a/examples/test.mgl b/examples/test.mgl index 3dfe8d9..9fca172 100644 --- a/examples/test.mgl +++ b/examples/test.mgl @@ -1 +1,4 @@ -text 0.5 0.5 'A\int 0\nA\int 0' 'A' +define $b -1 +for $z -1 1 0.1 +line 0 0 $b $z 'b' +next diff --git a/examples/wnd_samples.cpp b/examples/wnd_samples.cpp index 97c3af1..ff0971c 100644 --- a/examples/wnd_samples.cpp +++ b/examples/wnd_samples.cpp @@ -220,7 +220,7 @@ int sample_2(mglGraph *gr, void *) gr->Box(); gr->Axis(); gr->Text(mglPoint(0,1.2,1),"Density plot"); gr->Dens(a,"BbcyrR"); - gr->InPlot(0.6,1,0.6,1); // new axis in upper right corner + gr->InPlot(0.6,1,0.6,1,false); // new axis in upper right corner gr->Box(); gr->Axis(); gr->Text(mglPoint(0,1.2,1),"... with bicolor"); gr->Dens(a,"BbwrR"); diff --git a/examples/wx_example.cpp b/examples/wx_example.cpp index f3269bc..393366f 100644 --- a/examples/wx_example.cpp +++ b/examples/wx_example.cpp @@ -17,6 +17,60 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -int main(void){ -return 0; -} +#include +#include +//----------------------------------------------------------------------------- +#ifdef ENABLE_MGLGRAPHWX +int test(mglGraph *gr, void *); +int sample(mglGraph *gr, void *); +int sample_1(mglGraph *gr, void *); +int sample_2(mglGraph *gr, void *); +int sample_3(mglGraph *gr, void *); +int sample_d(mglGraph *gr, void *); +//----------------------------------------------------------------------------- +#include +#include +mglPoint pnt; // some global variable for changable data +void *mgl_wx_tmp(void *) { mglWxRun(); return 0; } +//----------------------------------------------------------------------------- +int main(int argc,char **argv) +{ +#ifdef PTHREAD_SAMPLE + mglGraphWX gr; + gr.Window(argc,argv,NULL,"test",0,0); // create window + gr.ClfOnUpdate = false; + static pthread_t tmp; + pthread_create(&tmp, 0, mgl_qt_tmp, 0); + pthread_detach(tmp); // run window handling in the separate thread + for(int i=0;i<10;i++) // do calculation + { + sleep(2); // which can be very long + pnt = mglPoint(2*mgl_rnd()-1,2*mgl_rnd()-1); + gr.Clf(); // make new drawing + gr.Line(mglPoint(),pnt,"Ar2"); + char str[10] = "i=0"; str[3] = '0'+i; + gr.Text(mglPoint(),""); + gr.Update(); // update window + } + return 0; // finish calculations and close the window +#else + mglGraphWX gr; + char key = 0; + if(argc>1 && argv[1][0]!='-') key = argv[1][0]; + else printf("You may specify argument '1', '2', '3' or 'd' for viewing examples of 1d, 2d, 3d or dual plotting\n"); + switch(key) + { + case '1': gr.Window(argc,argv,sample_1,"1D plots"); break; + case '2': gr.Window(argc,argv,sample_2,"2D plots"); break; + case '3': gr.Window(argc,argv,sample_3,"3D plots"); break; + case 'd': gr.Window(argc,argv,sample_d,"Dual plots"); break; + case 't': gr.Window(argc,argv,test,"Testing"); break; + default: gr.Window(argc,argv,sample,"Example of molecules"); break; + } + return mglWxRun(); +#endif +} +//----------------------------------------------------------------------------- +#else +int main(int argc,char **argv) { return 0; } +#endif \ No newline at end of file diff --git a/fonts/STIX.vfm b/fonts/STIX.vfm new file mode 100644 index 0000000000000000000000000000000000000000..b07ac2d57df2883cb589c33b3d4f8981942836c1 GIT binary patch literal 931857 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 z zVmkvY-P&E)Nb;Zi{A{Y^r47n3N~)8Qd9Sz$K6Dfc>3-M-Y}#>{qd^Mq@BGdT=~*A3C$-yqRn*;=zXdHmGsWti5EZmyy>xP3vOc>Bj>HyV?Hmt z;VBUyV(3_IzFH^&jRh7^ODMw(4<4r*Z7!MD_ttN2JA_%UbhwV{{}aC^zLDcN)BSWA zy2x)0bfn}31{@Jd*T;))9W8n8~b}#6)z^Lr*2&> z6rCSelcKRn9oMAqlhHI@>5Ml+$ejMBcc)Oc@;qC2O{2UX$U17lTwZJy#vl zgbVP8W{SVg-Y)c-hFvaemk*TCM3?V&pz~;-t_FMBEt=U4Mdyv%?hMCvu|JCU!A%R5>2zs_)7r! zvi?&SVnBY0=zc!A*%o3({zzQsn_O|d&%f33GXqBLf0e%w4d-eG{`RgWr6Vm$LEmmF!O%bOjq*HZF2>>i=8J zbIG<4u_mlO&-x+NOssg`Kpk@NyF?>M54XGbrzCBwWbL;b#djM=w5ZdY>*BkVyw4Q_(YiZuK zVvRkR@~?k(rSf*PWwQj7e`k1Q8aMD7*z0Y-s_Gzbt8OK^_wWD;4mHX4B2eP`zrZ0B zlhmUv&#Udpm64+)xSo1Plr%ALtV7nZZpl{?11DUi{pnrZn?(#8xFL5ALV0YZkiIhQ ztC3~5V>7oom1<%JYq&!HN!u-}fl=I;iLEc-7NGs;cad^&buq8CtXI*j=8F!YzIX?b z2EDgpcAon%{LzWg=~z&a@165aAUSI{jI$(GvMYa2zYC^IC228v@bYR<)@GC{N{xof zVvAR#be|O*6RB0^P|%9BE2W`eD$`-io_h7%>-JRaQEO2rOc&WcV}podOOP$XTz$BB z+TC>*irn1R9t`Aywtn0JunE(N7`%K>;>!;VuGzSrI%g!N+19mse8|axh^gsG;|>vA zTou8j^0i_Rn|Ysfa;=V&&<#j0!rLEd-O38w5&R^nr=SZHacv zW^3RUa-?tg&o6IUndUW*A&s-9^L5&a_J_atEqGHEE=z;L?tK~BHPdKdt}_my82b6( z`h$>x#+lRubo`|etiEY0{eg&$YNZTaV19`1WTFwD_}d#5U2Ox@H$!GA<~E`!xrEej zY}`FAWoZy`|21;{UXJ7PKj9VSVNc(7tXa^?UX&PVE}>OW zI@$UPew(67=l%~$TX9uCs@rooXoOlRLd-WoUz1F~GBa3Gs+m)_WJ+_CY<_d7v)+SQ zW!{etXo_5W1D1*gN`$@y&LP(>8v9zzHl3_A5Jc*{=0A%_$`W_RsEHrBfgZ2jc#_lf zq6?0CQ-gxLlW8`+x&G_VA zkpZ37?EW3)$q26N;Ap%Y2};BOhu=QTBLn$PEf1#VXIGju zf6+qEcL9LWM3&Coxlzc|oIUYKx2n-Vg_&C~T%9emmjmpRYoiyd>x1j<5ye>cgA)@aP}tGO2wsUq(}jdOleQz7Y$Zn-#@3+LOqB2GLhRBITGp*DC)&C4kugRUHn(qKoq0UJ@1X}B-K1Ld(B-? zHZ;;9|Kiyr-sUfN?oQ3aicN;QF2$Z~GEBFt` z_>pD`K%v^3nLygtQxbBRmBnm;3@}PBB43mXUggFlaCF;Mz^#j@rAyyDr&j7f@q{qY zc<5wvq}&rIEFQ^mwXs-#ot~%QxnP+Vru<{i%L$UKc@LyZI+eAPqFOR()C=#(oc|6x zSWKes9a3<%uWSFYQ55s&coRdT^~i{PUF+AwRC+#8BKQ0lf_B!@+=JpB(}2CxZE|BW9!o;y$_kNF1J&6NYd`RHB5v0nBDAaeO!u$wbI6KCsnQBVj_vxyuVmg{*`t8BR znDVi-L}cLtU+GNiqP)*wc+QD2RwSg9MKQYYWmGX{dsfs6z#pJEBVD1O{5SNMECD&D z&EqU%Q#5RzW0BSEf!7z_Q{epm;{6PZU^ZYOKxOB`7c)&CGP=TWGl&R z^3RURwaKB!bLS_6s6la)M4+>x$^~h!Dmsr8_ZEoPL^8?7A~GZeUL6^emmJQcBgeZRlW^Nbbm?vs&MRBLtRUw=YZd5} z&qiX6p0mGsb5*xjy%8L70n8tt@Qs~M5_p1d#Tl`WRR2;2LcXm*kBjj<8F-NEvEe#Z z{5tBA^e9@}2a*9Lky#p^s)ZS(1^KoG5=@zas+g+!%Dyyixk?(<^E9a(Yc?h?V#8kO zt}dU~<=~M|n{X4rQ!OCaF$jLb4irqyAm2GaecCJe<7?>FZNwZaZY$2{ckbzy@`Gvs z%p`jE;pgB$gSdhVXU_B?J5W*ov|7Mz zHGU9hot_6Xt=1MzU<1J4zvRCd4Jm#`k{o?U~^W9dXq@g+9%HJmNK)-b;*{f3sEEBTQJdAql8e`NrGe{vYO0635ZYCpC;=p5!Jdvl1Rul|38xqUi z`3yO?7=H{LT6Wvj?qM7By`FJ3zXAKO>26xdIC@abumD$#{Yq_ACf1f{eIcWMXM#6! z=7kzdcLu%AM5KO5(^VnkxPt2tKT3&0m*SZ4;Je;$>+Dn`$0&HW>a)g@+vmCkjMw+& z14Z%Yp3y+ln0d>M<~O#vDtyc1MnXWS&tc)&T*`S;syEhvo8|qN0cO`R%S#8dI)UYP z7N10#r=4CCE6LKos%sQDo<<*kzEpP8!m@F{X?O4SGZw=2ZtsU4-8r{g-t018AV8~j z4?z)e5Emmmm!>DRQ;nNnKIKQ--R$4RoMn8%!=$Eiu(*jMXGqU!;a1W84%eq>>3&+= zr>N56EZsJij~B~3cQn3lpw6ud-@lWLXy774mf=#SU63@#0SWywwmx!b+UPJcc; zDA_#klr)Pj%EDI3Y8_rMTv5S1?4)k4N&NlzkMky?SyzHFTUT-+S;6x;3G)7)kqbNZ zw^3o+qt?zPxV*08f)lG&?ZRzJ%Z&eq|II3CS`<(?J$Q;IGxazvWwe}_@>?bW=rni5|k*OY+Bi+4II+Gz<)4{|Y5l?UtC zxsdC#$3%XkEE;DSXEtEW9C`0jAlKUMJz>P~m#G+T0$=Xc3u3LGimek?&=Kz%4pNOL z;ej?e$tG%MFT1CvArxw^b5$Li)&V7XeagG~TJdkO?O8Vf_F z>LtB`m8PU#KYzwo#HJ!;6yeFR5a>C~DpZ$#L#LD10yOCp!+jP!q#;fEqLDnK`rPc?;}_Q;}J z1Z&GS$sNdpGZPJEnxtU`&P~K`8H6x-Q4GR2=QFx2%zG#+weg?n9w^et*06OnWrQ@G zBrA(<3Kb({^)11VDI0$q8eAyop63S{Jgfp52kihYVEg0yxC(G$f-<)7k`8O1yU0|g zvK^oyt4{$)tMo}+hyAcgYx`TP=bnY+rG208v`R+xxzj~>Y%eHy3X1Kcf7O8(Q><;C zDZDl4)};CDQ|4UII+Q5l5>~Uh?NlIfdkOtoAy8PyPK)X@(J?vdj+G5FNyJZZ4x00R zgTg*(nq@X_{I*z*eG<1^a5$^F?^ zjteKt{VLHEh`);C@Gmi^nG{Hx12WTHagGcIrsO|N-7HzeU3VnDn)&0O!9_hrm@GQuGx?W9F!|HL!>YEo zX`=g*#Ait*^*?1<6De15z`SXgvwwEWb9KXtM{GZx*$d{sdJqbot10^M@D}hc2adll zc&-Mrq5*2qsx%N!xj=9-6`;mcc9mmrYme_RbUys}!f*ev8-e9^-9`I(M~Zot&?l;SN6+ek&dZ0B zca`{)6uv)6G*ePB28SdMAyY>NZ+jhsl0-q`9H40wZN z*pqIWuT-#u_n>2I(P@snA>e1>{=*;NZ7xnKvBlkKU*%Wgu$u8i_9yXeb9t16bf12# zRc>v-An78MYpmToKr+oVe6s&NT1Z94)(A*os8#v)gwocU=|{CDjiQmqNqeh|i^*7j zSvO{pULw5g?8;k_gt5vW1j$G90DWOpA+%Ly@{YarirYt-u_JWp$%P&s4cnO|-mTL9 z(H0W;RRc2@QBi%E7|Hway^~W2_0{)8SpcY~p0>%06! z_PVValZVr&iRj*~%lPg3V^pbBUa#jJgHp!3$UNvz6|WFAQk>nrkZRRuqsG}oG;ci% z-Y92RHtGDgEP@$`acW);JnHfXN|sd&V$5NuA%-CJf;~C6r<*afH(BWG4!q=dL!77` zj{tf0a#3EQ@LA*CC@18{&#%ad&}7=3gO+d8e|6V5YA4#tG3n_i8Qf+^e(jj;ip@6G zcOH><mHxdF^ zw6FC8C?;qKb%00Ov*GFWm`!Qtzl@pcFVYS#iekRApR(P2;sGpHo*1y!X{UqEkL2~L z7ON#C($DvNViJdyexHv~)WbwX8VL7M+#fG8;E-1%0PVv0jp?56;2VwJfCUe{Ab&NC z(6&`b=s$EODB}+!FS;anVd9H86h7xl@WftpPx5AD@vZsETO~3B2X6J^+eYCvvnLXh zIHQ}U>IDm{F4lHDh~cD~rs+yD4=D0&LF(6$mnO@B<7vV{Xb=3}tDY3EeBa&Yv&X9p zXZ`MpaqyBH!%ob$95NNh+f19ppujKl?HL4sibB~|b?Ozl*l{VN?QE@4PJ)%L>62Dh z#?;IsnhVc8sQxnNdH2jMqIIvmCE|sgY`QalV5AgmPHF(IWC{TtTIB9Unf5H``+a3sd+N=@ev;>*U)Fd zH%VD^Yg15~s^>wi3=(&^`M*JVJNBcDx`&sS2^Y#*vJnVx;)}(FB-bBvO+zDf|9xiK z%zf`aAgzAjPg}@9hz2HFVuou2mvJaF^1^u$%!E=AT$~qDJ?(k&RGYQ&G{|&yaFC%X z^um7XLqhH(z+p8;b|!MO!OKp*0W3Ch6ev^1O`Ew{OT(bG|A*H{9GChHcO-rM1k7&Udm=Z3BW?a&u|kd?=iUP#qe;-C9=lMv#LyVNp|Kd`sU<- zXnn{(fNzq{$6hog6qk8Zmg#VVD(rNSzRS%R1ca~v1y|=)16e4U&N>Awvv2pi@HD-{ zE$H*|WTihFD*M-I$P`^Wb_v?_4nchm7L$@`Q)o(4Qe}+@aGi8HY{0NcSt$8!`xTnS zi9BimYiv8e{@rgsgz}>3Ihke*{f!^bgStkpN>vPKefz3Y-&G)eE1~0Uo~3==9w@L1 z`w;E%Wb94+2ub;1hsy5E2Le-}_7+o|L)vxonu8zE92Af%S9L4Wy?6~8h&YN6zG7oI z%ikZDc1+QU49sjBuqot*NZsD==hDIbCv76{XLut@8*^N(WLK6v?nXu($f?$uGr zU8}=yd7|W+jqz`iuYY4Ph25D(U2T~xo4Im(08u)|DlZKt5Yo&(=OU`kn2M(z5E~uB9p8GAfSV1%h0t5lOfBhHyZtD4R~kamrPVo5vzL$v8sy_+ zF-7S8wyNxr6ex(|IaQi8HBAPfI4HZTjrvID{?@-$nj*%z8L8z;!ow z`N_kPH1%{e7^K{93U{xdW0Ay<6^{jNRV(3&w6n4nx1`{tPhEdsoFk>aIo6WP9niC| zNrGSNwZh6P6O3g4I~dt(kT=l(qV7Plli@16-R>h>hGC%m2I%V+TKNDB(6s04ZhXwEbBK0XqSsQ@ZjHwA_}DeN4RXN$y-j5^jrMWXv~cJE)Q~&C|&;+J#pR zL)Qh!S+E}XoBm7v&$UfuxAJJRb4gF~0F{#K_2wn&BAA$G5Zs+FLNXy{*~W6LQ5V2wcAfXP7IO!H@FeFQ%Se(QrTW%Mdw9_DnL)&vdns5S2{PQ zyV>3u-1JK?#LQ5^_@zv@kmIsKJ+1On2t|=i`@syTQS@>CQW}@h>=IZEozP6yb+m32 ze$%i*G>wbo{@dDXwb>^3N4jJ%90#!M%jG_+xbI%abB5e~?Jnmo_i{dp-v7H1%vQL^ zF&4Frbg4B6;HGZ%v16ndYkX%{^ovbtp6cQ*2WwC$3@>Z$kE19R&wj)eO{1Y zR#?oL*pD*d#)kC25R<^W0>dgn4z|T((1byIo8>5-jCjK$R=3^mm9y#I4Z@id_4W0| z#TH@eOpoQZY23qcQYbTwk1x&wN?Uv2JJG+&ArE8&ig>4 z;|r{=7K_xQtX&Aqq?eoDBR=7?@WIh>Y(ie&5pIxD>_-P0a4ggWX7Fb*2iJPZE=D{{ z6zNXB-LzfJQ5$8K@weH+%Z5 zc9P1I<(84vTtw}o9GvZR<9q6#IIb5p_CJ^ zPY-RZ-P+L0`(B^nmDKuk;oZP_npZcoZBbG9>p-$D#H+_)q}EEw-yhryQNcI$hvXB2 zE}LK30(%zpcfIP_W4aX1^L9|#WJ&RWqlQ8ar()q{1$Y8|o6Vf1C7lne;rQnM{t9)Xl&UXO~&E z{6QmFren0FDL^{Y)xV2H<=KDMTZ?JcZLM<6s^^)3^6Ijm4uUPb9>p7wFChb))DIh7 z0G*ot0HtNynAA}d0Fq+1J{(3JmJYC-Bz=&(Jm56H7Y1);KCSPKm6{JY$$m1p)M^tI z#G*sK_ah_HykI?PV!0ZC?ky)}s)1UqLcwU0`5o01`B!4b94Tbb>?orzD!?{Xz1IUj zvp8ks;_M)I_#cc1uBU%`BrXTrwZeM1bg{Z(V4HhESHW0BMhG&so5d)}15acD2~~T~ z`L6O~5IZNsKM2Ls>Y+y!-dl*5K^yC|Jau3?-Fp+y4kh>qCTzB7HD5dHg(% zW9i}hHe1a8cDMbPXI{qqD`7?J@$eR@oO=xC?gUnSVD{Z&{S@7enMm1Vx5)w zceVb@GfiN<#&@mD^xlI_H|DTCjjGvq9V|4P4OsgcATsgopM1rb`nmM#aC?V2$@tII zXh$FN<1Mj1fP4v3V@`10=c>Gqm)cV(;a9p+_SY zd2$I?aW80C$I`MSj$i_B$M-H88IwPb2?^ue`wyitZ=Z!(T9B_Bi%`^mYts`iNvm9i zWIdEq8kzEs+_LW+eo%Tser?|AFCr15sz-pMP+;%;e**aAH!4~yQ6cTnZOS{&0aAIh z0{vu$iMn7n*;bt9u!`CMcmy1Xl4j{=hJO^3hh3_hrn`E>i>+-ZOV=K`!t4TbyOez!x6 zUo`#Q$j%A`Ccx9gb!jNl@P6^T+Osiax9VpfK^{F~P}sq)8ApRX$0)Tbd=;Gjxdm<~ zB=P{cZ1Lzf9L&UWHFR2?wlp*5j+XcGEeiBH{cxyg7L5)XyAn?tCT0tF`-0m!<(8I5 zOTHcYU;X}>Dd`;Gwf5_-5HnkEV~50{9(Ys)LvHrs;3?!sYE#Wz_=D_|P1y{`6YlA7 zQdS}ClUI{QTJQD%`r>n{?{G_rY5uf_yzB^&apPVVnb$dswo9&S8MQ@3T?Q7nt1`u% zgCXeshsl7XFD@U)&6W?T3!~NGi>A-KnWA&4bq+rxN|u0JvqCM9&J{f3)x)Drzf7R* zi$WXhFja3UO61VeeX2`WyVR?Y`9_Yr%MmP zKn{46u9J^>fWG*IT`DubL{vz!9mW;dJ4F-Q?g@#=h9TMDn@QFJ2|5#>+}pfa$&<*I z8QU<(Hjm;6Q%F9;aT?ETcmiN92b`X4*vmZj<|I*M9yIn^KzB^p7)y_Fnf7LmTDLUF+0T zh7yuXO6 zHk9ePgzNY9iMu)3oEF`g(K#35IQZBfB)-1Q7>d~0aXY!F9UHXoP!n|eu+3<@@{nKQV)k~6shxj^G=sZ99jc@MK-#9J&^Z8T{rPGc zsP8%=#Tun)8+G!esW5YZ1xzVOEg#F=FgyCx%%afOQqq8EMzlnmdGq_BXdN4)d;Uz@c3Pcf2|T_su9cm_@rQyP6HR zx!D5yqO)0I#A+Qdl&W2`R%FyAo4{@MCML8nX}|BbUq`_8C^gxPmtm)Cp|pH3W%%_v zEfw~g19ubj_A10(S_6i2&>0Lb$@yIh=p+mNPQVRiKj)GGW(^S%PL9ToQsF!RIDf9= z;s6sPq;X@n^Hzvd@73YsDDofvPUQky#l z`}eH%9Vvjqh}EWd^L;z6=ncq*FtuN$^{ARBQL{{r;pzVwPK$2mPBz0QHjXqOj<9=Z zb~8!@(q&}@hX;0GX_qZh4rRh}1$4Uo z4ytpAcc;ryzR&aONB>sQLydw~wV&_fmisDIdxP2hM#8prZoF29{je6`T@owMPwUVB z-Ngh^t2ID7Ys9py)z?}0Xdd_P`i=tEclNAic4I5R`&~T-5s*8YeR_WDXuTFEs??G1 zoW0Sp)fb;20?*0VJ2S zP_sD*$;5sH>=NsTkVfP2puI(a7s*C{uvpt|p*5>2d;~-jEyJ-}h5- zDLwej!E(*qR=$zx5`Qi9@SQ|7pk^@FWvK z`@E8=-oh^5M0JupxGd(pyy_r&k{yS-`_6WBv;Eo`c`|KmOL4mV`2_*=M& z+lu^8m~9#tnICHux1@3eSPtWyVe?Ta2z?dYr4>pK5P|Ct^&B~zqs`75qj~{~uTv(n zsmLufn|SV`?JA=X##0&b_gt7iLjSd4o3xN`l^Eb$s-MX{g&T%UKkCX_Kly z@(F$5+CTsvmUFQ@$0o~<*~Scw1N0Z`9T!+zwV-BAR&!Qy!Iz}f03-^@O#o?kJ<{&S zZ9Ts3UetfzAT`-aQRojKB)3CyfZ$jIofZw%8v{xm?E3i#V5!Q-ZGrO1dI>SY!jTNp zGZ9w4&gBbd9~1X2ZG5*EgD8-V%^^eoCuiWUn+FB(MEgxUfLWfp$N>BW-w?p}Z1&~y zf?+C8%=$eCdc(ZO4a92QOwH~*zrT)>*?T&m`*Pma`GuPe(W-i89`yDTCCSODa@F{oBZsD?q&yFbG=E? z0Jyg|zsr2QBgslYsf@<|%4vDUhjO^{g(;c$S0p&B=ZVlgAt|(&1$U~^upyw{P2lY5 z?|sVl9WcF~UPEcL$flo)kRATvy2~WXP)A%b=Dx*xEa~|Z%%;y>6GdI;?QHLHY@<3{ zCdC#C4B)swP2>9GZy*sb7-ZVQ2iIqIOtYjwA!z>sD76I$Fm@v>Tp#2@rUzbo0so{R zFFzpVk=?Sp@9#PMF|V}8EquuYr7SZj40N15_AkgKRqm2?Yl}Pv2(O!4e(mR+`5~@z zKgrC58EqFrZ&~jdH2c;2kPfFpD8wvcT}^K$6Uze=1ACM2If)&9?lriQNBz>P-UKo3 z{rWbN8p^yeHzHLWh+b$0$S(XY5knkmAa4#NkVA-d-n0-q4qb%eYHWJ>RSBd{?gOab zhRkPY$X8g5L|mK0x%(MZv9$U{8H&DK!_mOwc%VoX+cjizwi;|2iyp3vOw+VR=)r_l zu)Jh=6G(mVZ<|?gr1z7v;ZpQbRWa}SV!~TL1gf2GroGnIcHRsf&KQ)kn*EhS!)#`` zUEoMox9w@-MF1UycVSS5mx116x0%_;Z+#A_i?WUnGtG12S*5hCW>|`wF@D(RR?&L6 z#8q)c2*Pb^G%cjT(b44?Q!Y-|fH?X&55xM>acKxtB7_jNEZawCjD=G7IfN|VaX({? z>~r6MTfIwEv}|7PNV3>E4m@c5AiVhfyO@rPsY8+n;NR<*-@Hat6ru?Wfh1D4$o#+{ z<9t^Gw|Kyy1e{65>TwoGWw|rYWZ0e4QYzCV^l8 z(z^L$8KO4ZX%mun8JG~{`8;HbtPN(f=bfo0@XT}O5tD8lgWd{&{S1@>?!qYqpmVWl z%H~+Kl~6S^OOcKkyjKo?z9fgSd1*BuD;XM2%7o%81F z#cNxD%nUyTH>K)bo@>uB;CsB@eA%-ngNL=}1XH73Ng_u)8LqECABUaIR{V7E4o&$dXt&FbYFg(()&WS6D_ z&4%ga7yJ6O*%yb*!2RqmWE>_OhO*~x2t}M){bxk}7^?Y-Hlx?{6_pF9lI+w()WEyc zwu*(_KxUonP}~P6gU9+fsth)%w&-wG5RpT5TBX6vS#2 z$~4wr)nc7c>b`s4+KPP?_r&~=-I4G3N%2C8i6 z&-R{x9yA@^0Y#KAGHw(JiH)*;x{=Wn8rvG_*5BGS6!U#3~+u)Sb2fjh<7QguHb^uDdLdg1*7bka_(n$i;R*%&zy_f~ED z7m@iq#r10y@akpKGWe(aerMiZ`@pi#dXXfbW*dD5mryW@tbR&Oo9iNy{){~$;7+V? z#Gj-mFQtrwNPn72+&DnpTY`ovn5_Jb2J$zP!|q8^pIJON*9GtG=u;y~3KMF7hfm0< zUl%mH^N6EglFE=`0PoBGr6_M9_gV9(1X@hI|Ng6G3#^cN1xIFv-NTJl-n^Z%G5X-H^vCSi6Iw%HmTj1GAE2yWx=+l2Q-8UB1edK)LRuh5sz+wXzP@%5Q3)g=kRzGwAVas!&zBzs^v6iT>PGJCX z(*2T&&G+T$)m7fw?g{I|Rpq+*=bD!VCB`wt$yK~6^Al$jeYS4(6F9H-WnBFU32!olz@xycdfg0FIZaO$M~$^#zWAb@(s*Mh zc33Eozuv?@I6TpQZyp$W-y10s{V~)tCAo|G$Z-O;@s%s

wg=L?m|3kbdVB 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

eW&oV5wtp-fQJS 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%0DhTy_ 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∾yEl89L`YbVLY;1Hnp4a_7qjVY0bEaJLE=YeZ!Yo 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

rZ&6MOf67U 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

Zbi6L@(CB6PX@qzz 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ď)p!t*wC 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οsiriqL!BVg&dF2Z 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

M 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

4GrbK&Sv;8F``#H93!flz;3;^ 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 KffcEUKqUZHa&tuh literal 0 HcmV?d00001 diff --git a/fonts/STIX_bi.vfm b/fonts/STIX_bi.vfm new file mode 100644 index 0000000000000000000000000000000000000000..9ce6241f175bdca76dd15410989aed4a9aa91f8c GIT binary patch literal 467229 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

-P10yXC4W7`g)6rX)(H*D~ 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 *g~KpGwL-}fR%7IR=oW$F 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%0DbtVcIn{d4={dRBl@hIazWO6(}Kriwv1TrmBAc2 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 z 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 literal 0 HcmV?d00001 diff --git a/fonts/STIX_i.vfm b/fonts/STIX_i.vfm new file mode 100644 index 0000000000000000000000000000000000000000..ea51c6ca2599cfb7c0fe9d10551119cc2817a0a1 GIT binary patch literal 471933 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�KIsw5nqpfVY>wu_ts`%3vvLl)R9j%SCwv7T%(Ptg$s z?^xlWp^CfSOl|8ZRO+vPz1ulX>RJQe!nZu>y6${gni4=0M*VssX|=YDRA-s*7eFdP z`hvwD@|{wB{j=1cunv~w(lKzk?1AeUt-NK<9XOJ1M3F2SPZtNkZl^F9K7#8 zzM>m5+s~e!pUxThK$X-Zee!JoqCwVt<^?cl?h~9Lksn)Pn?nmjdlhClB_=%+Gu!o=!&pl`Wxb=R!^_rvud}A?UqgAei=!UoXj1m(&SC{`w@c0#7nSVM(>a^Fel8M_B%OaKmAQUvKtpr%>9vD`B60c zkGL1iT<|yKkGDj&jSm!0z;C(S7a)nuQ)gzVt@oDfxe03*Pd$=V)8ZJ!?lj1<_;lCx zcXYFhxjO_-6Ml%P`4l00KWxh{4kbr0@L--O=1hw}3vZ`89tP?_pgg&YGLyyTM&|5` zvz1VVXJ!T>M3Peg`4i9fY$;b{zv?YO(0RrvlGGx?gmpv0l4xvP7h#=x)2x1@v;W)c z*tx2JoSJ)%u`uOw#CqG?^JVpP#k8Y4huy=!j>8KZT-Y!<(mPt0T+XyR{i}mzUiGV* zg%0HIau`_Zq|$u?bZueE7246h5kG#Fh{4KiUb$`E@SdDRot!Y7-ejJh>?s@Z#ox{9 zjo$fnrrbU47(icP;Qn$qfqXZ_L2}o8ZoD0f;?8I7#)|s}QuC&7vk4vC=?i`WvoQHZ@UUEM_-HxOe#S#+JIq{Y8{Rb3A2I6q(etZZ0}sDb zqG*7+YMaDxdgYv<(6Y2oFMsS`!qCN-yWNEtW&~_HRnIV<>!-AMYb>O5McPM2-vVG^ zP?v8Y#t1aH$i-`daWmKS1sj7w5}q|uogWd`-2y;1VVl0v)e8+Y?G08wrbWY?ezI?J z=3ax{F}0;?e0^fSG^%lf-i3upi;E|>e;*B(eb3EwR=s7MTryACjrC;say#cu@Kxj1 zGqwQ$pOXLR^TmMMr`dD=qB?=}t~BtfFtz=$({J;wSmq{J9K;`|S=9-$45#W8Yxpqe z{$*fk9*jcNdw|{c6Q^71n@>tsC2|QFYPe9m?jhTf?i5S2SJ$n#ty*_}nX_=&K;Uy% zhJR!^8-^LN^A8+2n|A--A1NYfMDw=cvftK26u_~J+$uD)^iWvzsqD)C0WCq&zV?)F z-nnz@Qx%}C_{}Ayl3T;~?%b^S!^S~!>&G4-wrWHuI)=IRIJycITXBSkx{F&k{eH9H zzTW0}{du2$`wo76`u^LzH~;$d{rdF%OP@ZJz*sgct;uO&&E4_lG%O;T;|K_k8GkXPZ1ia;`01I_8GOE0wKzEVmrjAiUWz zH%&S$=I(8Lv3(Q2i^mw=;|OFHrQV7Cmo>j}+{LNAo!XxGAuo8RTkAMtIa_+IH^xbf z!G3#{%Ytj+$mG_s=-wPJ3+~qm^L)MVdD`kc^u4_A(W*cgTrapNoBU$z&WMqR){yia z_oEk2{dGTm{e6G1aOC!T?`PxI;~vGO$8qR*>NxOyZ?7?`V-Nq-#rg~R)!f?o)jabt z^DRd|ZkF!Pv0c~u^&02xndkPk|KFCw@2JD?sKbAw*3<8(!>{wk|JaWCU+0bguioTr zF1fnzY8I(klg(K*dm`;T(&EBD|Dez7#Zx1y;k|L`xMWfCm|I6@%rT1ZI*PpgcsfIf zM*d^?wx)1y7uHVd2#IPd9%22^11@eI0j}1uS#g9->*#nvn7`E8ueo#{7eZBB7#%_e zjZhPEXz2=fOwJ0b(xu&GwKb3H8X148lgc{sBi21Pm;OF)AGgl~r9VReM`ep1_V}Ky zc|0Bc*toQtptjN8z+$qKVGnH0@v6X(6%h)D?Ufk$;zU&2`8xBvxX&|x=kIa5H)8xeY$ZogrN1OtJAfe@ zE{R7CW}^@h*ObwXqV0;8VUC9|{DQ1`SDW>C@bss4x_N2_jzuW1=A9vOM;fvi04ydo zBGg41!DtjPYQue(I@lg3q(U%j%z0j{L!&)+JzINk@(i5dK?lH|6tZT5ye8hB_ay!N`$*rD;pCAq9%__%!Xyu)Md>( z8Uc~zenv@z9KQcJ3`s|rnz%vzZNmZYy6Ssr#Sy-<7q`Z%^}Shh9d>e`h7LQA#~F*q z6_qEVr#umQ&e<@tqj9ukwp2<4=DiC`qdtx+%OB?+u0QuvP-;cM{e)5rtDY3R_|0o8 z#t=2Ap;`7kWj4yjGJ2kxveCRA{rO5sXf*mQX6L zTfk0T+nFc|oaFc&V8o|Z3zMz!O-A1ni3wK;lO4lqOfv>DD z?5m_}_{kzyLO&LS`H(0Fk!F5E_QG)09Iu)h{u7%eR|_Mp_`^=ZUEl73r)%R4Jk6 zSCz{;xf;D{1gjAkAv+u5D>IJJMDWXzHaX%9-IZ?rFi2=x@y|*8vs}QV%yGgjxE$+&$={lp%`}F%!9>2;*#StF#vybqt$iYs)@R~q*#L3CdaF1t8{BbCcVm<$3%PuOpZ5+)J`|I zjvC8xs_rNEiqV3m(tq+_<%B^RydBu)gx-^2UkJLO)c56VVqizPIQMv#|>63iq$4Y zA_^2ELKHfRPxI`D&3u>(L3V8fKZWS*38`*I3YIa9n8qX1s4m8hmf5~ijDj(#Zxn4r z5BfX#S7j8UWD7~)A{=D|uU8rsLcgaG{Os;$CX|X0xVMj1+vFke@7Zv)Q2~4kc`=H` zAmC&Y>&nYDEH1{}*4b0&B1B^f;bTAL_Q4UaD~(~Sc3Ejqh?{%aB#f46rBNZkAO|rs z>BS^?A;ctnjTrDb;>`X;A1wlIM^{{ZP|9T7@k%h5gQ1qU4@w!4G52p6bkx~>`;aLe zxp4c2Km;UwHkT{Om2+`b0{v&sS!_fY~PoT5S57QlbjlnK zO?vV*Av)mDxg2)1w>|iD(3RHQ`eG!zwBosaacl2CLT<(oWUOs~0n3|i-Y?$k_{{g? zjpLY8p`JN((%^2qS#eFmGnPb1ZH#fpU6(?u{wrI~J?8Ub<#+jr5kJ~WEZyWXQ^%^Q1@lUp~n;nIp@k(P`5!1U0icCUJ+&8?T( zfK6kq@d}9!oA#6;L@ecmQW0h`{}LgTt(gQn25b!Dyg3pcw`|d01W8luwmV-(UJ~bH1bshRack7W8@EQs_*vXqmp-2wJz;wMOf6%>g;Q(i zm5+QfcedBbrK9VvpBtBMSGIe>t({*H)EZqCi^clY6G}157&-$ncObU3AL@LZ38j=5 z1f4;UCG-HpG2legCW{jaM70;eXBGlgXL7E@0|f$dcuRNg|j;Qn~( zaaA5cmr>`dD(bGg%dg3N(;DR^w>}voJGr$M+|1u=`GOVn-#Yxn#i-#YBK4*RXce(SK` zI_y8Z4s#isW$xfirC6Q}??Y38(PG^+_}tPa9}1A>bnCNib-~8(GXt$ntxbV|X~(1e z{g(B=W&Lki|6A7omi7P9Wj$tCK8)3k8Is4%nW<^bAI?ZkE*;~lSVvZN=P}o4PlrA^ zbM=%nU<`31Uv&+6_Zs>JUz*QkZp}5nUp7M~jN;Z|pYv@oZ-!2F$*r;a!?D?3GhE>p zD{dWqjgg(xibvQJ{7&5Z(eF2#Gh;EMcGS#RTz}P-S-gG~yZ`Ea^s7wxtIYU*-2SbP z-FI>9VmgcKuVVeX*#E8$zN(G?^fJu+yE^&Dy8pYK@YQbU=$y6s;#L;gi`#Qdu|K-h|h5e5(jBV1%+{M2^m(S+L5 zH6IW2#B6sSVLSG8=+3YojWhJ4b^vd3Hr{RU&iQ-Et-~)d97NNK56);$Zml+TS#yO! zNiH3WF2~q|ZE}VA$aIGRIT)VB)_ffbBO-3SjvU*_F%E|nnPcPD4p;IY(B}V7Z!7;7 zwl)7tn>8$7_V<!m#X0BgkzUQfYtTR@pIB9mAd%gIgI&=~x8o$YQtf8rP-AMJLJ6`5k?R4}=Il z$MV+;-sh)2V{YMLL&on4X(J6T*fwNz7Am8^a3JKGHE0@zv(TD`QkXY$+ZeKa>olr| zg8?#vHyy16rSROXKU0|l7huMU>n8D;Coe*wGyP<$rSJ3FLFdOwppWyI?uaRy^|jYs9IUN|E5`!p6{Mi(U9H(1bsom;^3{{tD?f zlGQ!Ey*nQXFLLyu#SBPMpN?_r$!4f-uyO?6W6mn~Sg4(tJiUG8TFx~8wHfLko~FN^ zsegEKUJn>^+AF`k^5C9DUwL-R#g!}n7qTXE++P`#pZ83;Wm(`e-{b=6LawY z6_qsB%#6|4V`)uIMXN}@>EqhCG**so#jTqr2ITL({mEW|wB}l&EV=c;QPQ;Jh!TQ{ zvgFnc(KU|Z()5_xzAud^BjesUH3CeItGG1R(mXd#jpl8P>L#bYxj6PeRLEO(t=sia zg`a-!%`HY+`=?s>9}84O3`1GO;fAi^3|ixuKK-1PY<*2#i}~W={7kPhjetvshi2H{ zviY}c{wuQ$`BBmdr4 z+2o4xlTKJzOLwlLZ8?1w(i?HH*Ou#AEWOnt+_+(np@ur zy=&`GyGs+;#jPLt#cmeYP1oBzufOio!>;^?J^Ycy(32;->R2R4Lpv&S-& z!i#cCLwGZEmY~$l-Ia-! z%0NB);L(gGa1L8M{oYBp_VNs6iyxY*S?Sih`+H-HZCs(%)_E5E%rFq%Iq}jy zzeMVa_Idi2I|J|`YJpbh%Q^;>$}@xh(YC8!zBSbuyQd|04~HQ~zPTqJO$Yxvta(GX z!Z!b2QMK!LWy4Pvy@Ok$F2O!w+i>;xL@7o=6t2#BfBKygn<;J*&;-yzd z7cFa^s}&yYtCH=m9G#-k1d0M`Ze80;Za~)Oh=Sx6b05BwId}ts4A3XY1?P2IgGb-& z01qGfREK;nR(9*%)9{I14o|=hm znD@NskHP1qvG65}L8&-%l$?BS1}=?f8||Ig@a6znERWC^@2=$Tuy(QGs6L>!wyIyg zbkf7EZw-sFDXN1_q7>Rci~r_qd=`SGHr2Fwar~s8_N!bygV7A0}qH{l=rYy+hf17F$LG#G&l9~xT$@%eY}5m zwLSTOMJK(uG=s05>#(`^7(cW1!J}CTY=c|ZcH8112ODE|ZY$&KhDKhB#ACWJ;2K^* z%LJ*k8SL!{(zk<#*vv|_U;Qp-v2l8QjN!@<#er6frkfjDVW6Am2;=y7hfeV6*n~EX z@ClCe`PD}1#|+gmSz^zY54DtYq%wtZXG5;2B_hHc!!!on%y;U$!k=%zkyKRjbCDQh zR0bvZy8XV1@MHH#srJh;Vw)U@R$j4Ahn!m?v$!#)ND%-CLEmTkn(G&3~ z3YKbYx=P`7b!vf*bAnVTna}BWRGR||1yXsN(~-5aj?8eVHlURvTLfD9ocp5Kw{_zk zq^ga)(%GVpG4yp7v(Oz#+_el>L-mz6X&pB!+>4!5x`&4H?vxGRTwV2zul@M<;j>P_ z-E|up!!NJt`_VbJD*9a1vAQ?q(&(046n>21=Bze{TmQjRl>fX*ixy8qcEO!w2h2Wf zI3wt*)-Gdc!DbgpoCm&VF&5v{ueC z7CfAJbbiORe4O1700{Qpp0;a7WOG3yZjBl^M?TvY?^?93(xWdeURTyU_ai(y_k+RE z^x{y&{X@agV#7BFAq$Vjm=4qtV~hLzD}A~ics+nKjOd|7?HI9Zw&w7sq9qm{y=%SV zvc(mVZ=_q}yw5h-QeFke4km*SH~t1>*=BlL?$FV?Baq}J*hj4NBNh%w&zA2jo;S^VAnKfjvE(aY0a zV4Y_6Xl|Rcz_>?xbeik2;fJQ16^~}1)MMDbPHuM>Aq!>l0rb3T1aF6mx5J+}{(=0Ke{O-N)#(W+;^N`F(4)R`0{1 zPVi9e4tcUW)X8KQH~1L(Bs{ALE*0veKUNv^_A5Qw``_0Q+60XrXg&<#(K){G>3Dq{ zt2XN)zGoRRWU8&06|VAR2pQ&lW${M8m=tR)1+5zUg4{m;6n8&8eoX%r(g6tRvyN8n zeT})Foe|}f5I&o$0k+0h!YLa^$9YpuoN$F(8tKyXTcF6c9o&QIE8Tik6GINQYjTzN zIKrd(ioXVr<|}R=IweI)lJJMaaQc1eY{ySAhNrA|ZqC4xzIdUz^1cze*~tjH%Z!-J zNU_Mo4q*_pIdI#-hMsBUC^T%tU1)G>1>3=gVmA*&@!Xe~j|Q#Y8$AO*8@=6!|B6hG z@rUR9&R-*DT=XC8K8Vk~ybbtKn-kDy?RZtc&h|^O=Ws+ZWKE;3gd{j7d5aO_K1}%8 zr*EU9;eq8*nq6Ue7=34R-`_XY|M;eQOUk#T{3n!@*FD18Fg(uTa5mx5m&4(NPnzLy z!mW|P)?@m8wx4O5vEhpbC>FP7#OQ0-;tmN{>DI^L@Hpnt2$M5^Kbm7hrtL@X9!Oc- zdT-C;irzhtviRcgI2sB0zLEY)Z=||wxr<&Z_>bRIY>;j0hF}|E^Wa?D;v6QjkM!u@ z!f=>h$5$8*>9#to$NMIH--Pd*@NF~v7naa(o8kXgN!heA7Xw4tRT~$rY`7Lz9o!n; zAi8L6i+8(luX6Fqh1=}9wPm*u>}gkQtT`v`uY*UU7P)SdHNQ8zaLuDJ5P4lDyV-?% z+J$@Ag?rXwwsNTtE7$r>*SRL`Z`1YjbqSv}AO2;yeEHBXa@mGQudDQ5@(qUm2zHBY z?l-#KZ)6*eMN2L<0n|Sf?ey?ytR=X+n#2B~#r;O7`h$vFV-DBMqd6yQn|OD>(XD|YIIeGA+P}jz_^y{+_4lNo=bHKLexGpbV{<=`ZE;`UN{{ySb>`%31oq!_ z_uJSOcO;%lx5ja^|H^je{d%VN>3p)?>^~1x9@-QFe(2wt&Rf%YYdZhrn$F)JChYnO z6K0K-s2B#!cIFHVHl^=chm>K$5MJgHChWQL*WkOuf`v!#F8n6D%Ri$qVdl}lg$Xl1 z*RL>P*1Y)3WY@1SVcS=ju&u&_J;Q{J@L~!RW_|njlYNE>+x|FA*joct4RrMyudoTT zlrT!y_2m2VOi!4lgi*Tp-@`A>=?=4$FiNuD;g?2w!Yn0>676r{mqxn6FZuVe6Ib}9 zk*+XHo>CV(bB0@*(m6bFci1c2nR5!@l>Ucdu_pdMg~j?y)>0nL!!g1J`Fpbos9=y zbHT4btF3bcYmDIMBrz`A(CTB3hXMTDv89;AC)49dV#q$%_$(yx`Ma;PIoYOLrz9)h zyvYD^lrLAJzGN`B>{f6!(@0u84;Z1g?5YHC&KxRo=fjGl*y|II-W9H6vWx}EMUju< z(H!~4Xdxo?|aBNFI$Cik#9GYuts zw-#r7u6is{dY_@355Su)JhW=p#Y-Qyn`_F=wwuRJoWGya6ZrPAz3}}jJ=%xOwJ=Y; z-xwJ8x!-V1y_)ws^y=e^-5$rkdM(e@)8tkUF)qu33-`=xb)x7wnRMP+8Z_D?lSsZZ5TVoY-h zjO&VME{09fU3oRBk&S~(3tMJ_@uCS{h%DTy29T<{AuAh|CRH<$Gxu27dkMAl&KlPe zPZfA^6?mVxHC^=Q;L)rqU(@fEHO6*gon<&RcWgHrlUWd6VA$}*@7r+e+^xFQ&WgUq zDdl?BEWPS)|60xT8scWnOMktT>B2ghm<58l=5LUiM{UfjcY=_`p-R=Nsoe*sW#ZjF zpp@^jVeYxIg*W1#W!gX4GX{WIX8-dr;0f;aI`9(~YI&(kDRh#I=xba$C1QBAOFF%@ z^rFHGZBrZohF-)_Y`n#n%-Zj)R4YUWQz-H_lM&-2zk01v=;h{LIx4`zDOBD*h4w#Q zfj>tw#CZJmU^~A(-u<|Z={4X0bPp=IJ+Nx;4?Wi64F6t>v;U2?IK#6R=U6AKc`C04 zpl4mN@XZ6z_viPmxkk-nEzahF=FJ1UC;M27Gd%hl1J568ac2AG(b+%t%ect5*W$d# z+MC6<>G+nfwK#Pg9KVIXpV|}d&*8r&c4#O;;DMICuXoLO+GM*P*z${_vq193ubReCJH&;PW)4S#d7p5@UGC z_Zn!WNhUF>2|s@xxYLOeXrHja=&NTm9>sy6!?43h${(v>PFMHSMR~U7~6VWDerXO zW&?QIv;K>-^DkwD#dFFCr`&d6a#PJRCe%k?JJNpp zsaepWXC_4-=b(|yU4vS34e3ECSyOW~n@v?y*XWNjVwvrH{+j1LE9soR$5A2fKH;J? zr)GrW5Dcw8S;M{YxJXuvI$qGq+vKF^+T9ac`3D^4Iqr^choKc(Rl^AS^u;XHCP?N{ zb{TolH!oSyzO4!+AS&lurCK^TfT9M3Z45%?BnniZ5C1K6{6dS-DHe^DxR`?Nkw&%Z z_9oNnDkWp!O_udkYoK?Zc=Yap4D_t z(U|q=^;KoVR}Tyiw?3K&lAA~G_w)PF93VbzKbmWNpA)x6ePlka=ze%0dHCUhnCshIyjEHny!_Cq1S(9$P9>E)bw^sfG{;?cYMzv}niz9$xy zEq*v4QPQKk`=4UXd-|{X)DLy@G;911xpljq-;ZuyRk64=M^v2?x8|6v>A0e|UHxCh zcZc9v<*)M;opsr4Rrej-8ifz*-?rf!3&_Hjo36yL!i|H%idu3(&TF#9pS;7+2S0ZN zb~vMz^>RKkO|yXTdN}1q_KjG21@%K7-w4WQ4V7vwxn(Ro-yoR$qJg;F_pjrnojAi$D8o9>D3b(QVYDcQk(!oN(2wBAJSlk+^5Ezp;S+%sc7D$B zOMg?ap+ztbEb@~Fe^AdT`$^vR?`?!)EM^-A5y>H%+tY%73YZ^^o({LZF|hM2Y>6?P zXPM9I^yl+V_Q^L?{liFsuUUQlijMW4+ns^Z?INFCV?(jVShM3AJGcCt(GQDm+h7dWT}G-T_KNzsjN!%~ zm`Qvp$Um5h9BcYH%1^ObiI&LRTOZaKTSx8-jz*3_^KJStrQFxoHwd`7vtFuPi{(>e z>s-OZ#_-b1P)HN3K&f4I#sVT zqq;TMA~4c#qTte-hR+u-{n_cMX~%SNV!?#l)xvF?Y`B-%EgtRdMb~!Cz1GQU_aIx< zT;9sIxZIv2-I_zxCR@BKN>`;@Uta7hw)mm%ZLp2?NDlq~)R{ZyB%7DUQ2J%?(pV5- zpLlfFko)4%xnAMcxh~<+Isf`yw$nAmz{h>5#le+1T`lJ6MEf*Y!@tz9qeJA7W5y;F zPe0#>!jX(qQKsmMVy6DGrl>t%~;WX4Fh&hf++*KvURcsG%Fv=QZ~Fp zqi$qgS}&NqXH4-bS>@#+w#<7cJFT6uy0We#A>aporByRBl@jpN`tuA5{PeGLFQ5-? zuad$A2@FT_BroV5XSQP9raXJTUE}pJ7gzmt1-!0+*A?&&InRpyk>lX+^BBZ6@W+mW zztdyj!+d%H|CamUPvJ&jz*dYJ=%;(_)!SZn=DyRFzB`Q7c};fW82vD(Lm%pmzttIk ztIz#bSNmk}RYXeLi$>z;Sy?U{?m$?@qt(wotof?`_2SX17dR?wzNvq`c=YA~U}eqQ z<=-W6n052-C#&%lzS7~*zC&6_z?S{>hsI09&YT7Jl+K0zR^ExSGvDuLy5o~@+yu^t zD~Rb1(q7Bc?y6mJd*RW|Q9@^1tLnAEqq_s-&9>|9$MFi`(YxpMOjhG57LA7pk4C@9 zvQF0g%cUti(tEBv?l3Q_-Y)%x=|GcY3mif~m% z6Mf#i{O+$Tmklr4rxvrT0wU2lz9UFt#k#xx%PZmJ7_kc%Acz73mGXD>vgaBv(aMJ7 z)-&c~cr@Z+bd7x2G|pnxGMtP58qpQf!X!3_;z5`8ksoob?P5}`^m!=KPI|szx(5dBcIK1%SLN!b>VhhnBvx54!gmJKHB4;jykq%)VEEy zszJ57G`ebLb=_Bu1n>%!h?AxZFBY+B1fFi?$O6~bE%%Z7Og>NPf z=%X??fj+X&TRsGI+a;DrvqIgtfoyPf`P#1^-FpBRZ~g%MoEB;dqc%7`)SXfdmU zFRU2Di@upaD^&cqGKMz?lCh<-UL`;G4lXOx$jvz-)_C=(ozO85i>;B91D;mlT6jMkhVo`qr4V+$P^b z-i*x)pL3L1#f94kkLING$%b#LR2DC7mugPYmx362E zhE}Lhwfd$N+D=D((<;}85trb6-m_sFA>P|0=+HnTt*as8z*mE&A|W`b7!nV1EC>;k~0gP(9LrOpWGaAV#Y za;U~bY#^a^1^#+H=YD>RM{9TETIHIatg#LreR34%xQ0p3wY*t%WLz#Pj`|mr z!f;U>u%H#TdrtXNna@8rjMAo)6`4!?eLTb~O;eB6J&f3aHb^n4yf6H6F;s{}te$c^ z+#l7t40tI*9ky(i-S9X#Ne10Bm^{Fh@U*gCcy!D6vU%@}4Yjv^{?^am`uRV#evTNc zJL-^dwQxN4r{>B)(6Zr(M7p==ns*8Fo>cbsN;^yjxbSN3SKs4Os-VIIdl zS@Ta3v@>g(N26;Jj?uE>9956!#XOqMzjGTl9FOpF4IWKT!!fL{6MBj|{1UO@xh_6G zRCi@@J^IA0Ig4c|Z?r{4C| ze@=S}Lzfgx@#4ryb_O5!u;G}DcrSxTbAt9UY&b64Iq_($i-adFws_;n(~)kCJdchW zTht519b9QiFl%uJb6`yF#z}STT&MORfbeKe;=hLt&vwG2aXx63#fE49+25+`su96$ z@Y1-Beeh`SzwV2#H-kpqXYuIf{fz76>*DM9wtt`PUz7_={yy5jX3zF7M%v$63-O2J zNEQtwd|37g>x=aRbBqZ5+2##NyTKY0iUEv_MrLfe@^xHP>T{Y){?6_5KWu&eU$n2E zP53`(*B`#7VY-gW$ihp=E9@qKd-Y|Q3H}Gix;3{5CleX9+-zIB* zV({%Tc=Un(^`%W8D&><$(7`pnVXz~YF!o74Bn5LZ4ow37!5fK-ek~kw`qQt$t#k0< z<79l07#D%};N}@=ZPTFJN+?i=l9U2ICS1H9#A84nM|Gf{uu2H1jV7glj|1KC7!LQ9 zwL+~hx?+NoC%haJj^;(bCp&Qti<#0lc?Evj%&jqc8X55~o95L*5B+gWSEok)ps&L1FgMQlln(Q7GZ@C{u>HE~@6+W# z_CI z=w`6f(kNCZPt3FVESM|J%h)hRa#t@LYYG?!i5f&~IG0j829I94D>>tXQm}9m>o!RU z*f@EI^PuvfQo5=f|BOx7+6FwEM@rHsctcPNRR8HwQzx zSzE<`P7du>ovV0s@??0l^B$Ic`0?s`tW~n2%_SR?5KuWRDI@PGtBukwgX{-%i<4Q2ORoLiCqowr;ZT?xL!9RS8@bC|>%L-j<0+V|&wfO7E)V4j;q1&JHL$ zr*N|9O&fkFh{+$euf_VWWgv;Cr>r~n(@!sE_4Jels!Ewdo1Gz5&8qs9E~}OoW0<@{ z%if`mVPl9%PMBtF8o9C%j47Hq=4cL`llCCp^FbqpI0KMr1B;nDCkdEzi_IF4hR(xY(>tdQB7uLvcu+{L50 z+%cw6q0~q9qOOy!&*0XWaET%J;icgjo4z0Yz5QtKA4SZnf#siXV8UAqlkj~utDCR8 zTl9JJ@orvLZ@`;2vtq^n2(-dHP-IK}s9`!OUaFjOQHF5CH1jLaip6F96{62D%mVem zvy35E5LDs8a!iR|R1)FRwpP^A4^&Yrr{M3r;ya+K$d77Y*3Bgy;psr(U})v5ZJ2A%3tNY=shM1-5nKGU&f%ZW^zi7W7b2R? zh*W?F5NkO0U6BjQhPR!kGq`oOQ#Kp{8fI?o<7k}IbWfMfm#cVm<2H*&?^+|FcytP} zzVbM$@cQP_{vB@T&Von79B6xga_Yw69)m}Jp0s_Ncr@%e{ocb$Fjc4zJ2+;(A5(gC z*D#8*=3K%39y}V6Q&HzEZvDB|4<3!i`n;WJ4*NJKZjJI}KCWmC4?+CX;?gYSkE?8P zthIS?f|Mqje*fJ$|M-*ZZv6?^_?8#fXY{Hq{u|^V-b#_!*ax7$195HMq);#l4&D{J z3K)DBlkm=A1bG$(txoob`LEE{NW;1jxYqGCUer_S%On-q>q5(ydQ5of%;r zvlbV%_7^pChc$i6!?KELkc2rs=jl!$rs@%8;W4f_MO`XDnNBdfYm+q=s6t~Xt#@6># zbsTo$`}IuU-8^M@giFU>>EAqB`K@?qA5-z@U2!#h|Lbu%<6$z7u6(0-C+O_;{C@QApt8jibk;#-i(B{Wd0f%mL1v3PtlQxrv$n<2igEb2 z`p<0OhWOiBd|QieYw1`#wt)#b=^tO`z46P)r&%!aR9vqBHE7$L^T{C#tE6JHhE5`FR zY&Zu^9)m|;t@ztGcpC?APl#+ThW6BXTO!u;d%&V_btr zbEfq2u;f^-30+Fz(G3$uw#l0J{LVbO`}dRW=XAZp>-y_Hy^X53QS~;e{>MgDbAZ&A z0IQb*!Iqu)zC6iybji|?3zU6o3(VKri+2#fBcwFIi z{e7R_M)2DR{ugu=zOB)>HTt$j|4Un=Z*%f5(N%@6qjV*)s|gGbtZngiQR^}3)_8BQ ztIM|dzN)J$>CtE*o%f%$RmCzKRjBK>=k>6s*47-aIE8^Y?BPxL2YY;D!<+6_@#xi_ z-?ugQw&wmMt+}^#@U{;AjjaO&VL`dV6+Ks$-=pagKvuI z)4bq~IVNr4eOlZa6)aTH2bV_fLUo~dX;rJZe#52N=k402{fiInrI8qiv)A#Bbn&6J zJ;eIi+^fhX?T*!djl7iIxQLRUhj^bZv8AuSX|}^(Ft9CNk}Sm#8fd=)tzd9C!vJF0 z&#j=o4cxs{|?&`75+y@_CpAa_y48MwtD*jJw3j{*uIf4poIMx(l1PRrJD|1+{ZdDeyMxA6noakgKtd@kjJ1Shz*=^Zy zd`8tMytL}7Wp~BdZ49_I*>Kb+7>vri^vb#q{9oD?-MO-|ZVb0EB zi{C8WN4hm$=3v>aHpkFkoF_wE5>GY0VjOuYenN007K!TvNA8?|JT8z=9G(5k`nYh^ zwQqClI@IvGalR3ZA+_cy%QF{h>0=4C^pW~8Q2xil(c2nkv8moGX5msqOu|n;k;|1$ zaX3i$nX&6k^m)^MN&LC^ytIQ zjo9#Q)9=Eq;SbWtygamixczkHDfL4PvvK)5#J*S)IHu+As=zU%d!!pA+*ps*URVxh-iQ4qn zX2Q2b8$f}KgO=;&E+cd@^oJ8Dd_Fc}2V+1SZ2IZ5If*{&A~Wy@^9^eW^voDVBs@sB z@ZK@S8$QKPPDAzjLr|0iQt_~-zlVJP{Vry)YC5+~!S+a_TKM8Roo%?P zSjXU{cUR?YS65kASKZ5|Dy#QL@o26Ubxd~RxEgahG{d27o_Q}v)5VG;D}}MfpBv5~ z!lsre8c@qGYwQL=Sz$P8)B%)upOy?g5h}TJHFkzJ+Eh(-yziMtDkPQZByn0r9sWos zkPZ5gL@dpj=JQ_==E^YAcCXP?9HY1s>IkaV66DJ2p zrnz*e0|~(*Z}~alql*n^*b8`Ti%ZurmJQDekKxvJjw&~i-uY(vyjoD-D;s{;V;&xT z*keB1bsQfm5{w^$g87suow57Q;dyuSu6uPrP43BYX@962bq8xl1!P;6$`OL#B7{vf;F@`=i|=w3SGqNBA6D9nEq?G;k96zi?}SIA9o1)R4tMf?4IaI! z@-yto5j?+bC!DU}DLtBw$;lSq7;}H5OS9IBZN#1mI*DUw%RX`G`h6XDlZ$;-+jMYi z94{X8;?_LR`|JGgI{%i=wOd^nD4zIemJPpM%MO?3e@?WQ9UNU4=ag<;=V4oX^|2&9 zTIbhp&G)1Ge~Vqd_%fYOc(jgNH67J)RL#r-?&r@BUP`o-cwM~{^_VU1j}-LI!*>2m(Q9dnH4>DylUh0iwf&7n#_*QxTmkv9V*58gZyqrwM+FpInJbLzheekmtU9Ou=o*{PTUBiac z6VwNfW{}=%*y1;<@FU&&%VXrtDTsXeuS#C(A$WL<@X%ukp*B25mWLYPz=qZ>THN07aomj_Bwrk(wk3#+`3K;fz|0Ee0q{hzdT8%@g(UCs+2f?rDWl2 zrL*Gpx$`MXm${ft37=f-T&_mjxDMl~(D~=-9sYRb_SfC=x?5g%%fH9n(w^>?_NRBZ zut_bK0f*P%MZ>1NY`9z+kRPytzVDDXheXwfC>hUff z-Q=Mi+&Wt=ZrxN(9NSk1=h%mBG8`#oTJe7r)(l*RbW{rJwoe_Q(l1c<|F?E9;d5KaRnzlP$;T ztU6_%*0AQgMmiOb#;Of`h1-U+L3&Tz+CzPYb#?!HJK3sORdwuTD zn)^cuy}R_?mub7^rL}!DJ2~(4{B>yD%#y!GE7zV)zx%Y$HOCxWfWwqI>)aDj<8#a8s?KLrvW{3PS zS#yr+ly8qMb?c-TkH%PIv$;Sw76DG;6jfJ zN<}Uk(N(G+exa8&-_>tlJUW*&HawRwye{>vH(Kn>@fi7%Bphbg8(aEoLbMtM*G16S9 zE6_?=CNLRDxdYj2&qH00v!Ippf?+ZUvxFaD)}-ke+^RT{_*~9Agr8Lij3Vb}^W*Pr zV4O84nd}2eaC>qfyA*<>+cvxvmmYc6c@bH^&yTYo@8qesrS!Ix-j>qaQhHlTZ%gTI zDg93^CEVH_k7nN)4T`f@@Oq66Z}3WPgGY1d#xZPhtU$U>>DG9uVsh(w%X0C~RiSFv z$%gOfO=^QjV>})D!ehffXU(Wq;n66Tu)o;io3>l&(p)?cv+-hco$!`8?qS1oU3`A) zt@A@mWN&Bjp+DDYnRv9XS6!c+H@xh989e&-@9TJVTsfb&W&5^l|65wN|7DFRyu9$@ zMT6-)`~qHv4QIXh9z41$+S9P+sH`pL;L)i6W8C1aF<4rG=MmWZ+D=sH8r3y;RD zo9l?ins>dMi$^!b@+%vT7eDL4=FwbpelJ_s={_B5!8SbC#pkC`3kwS-jiLL}XqX;- z@MvGJ*TM2pU6$~?|2mC0UD#OsN8JrS=b;`Kzlo`}~I@z3-` zVD$O!Nid54+!fC{cH)dDJ*7+EYSEV+objrs^zKr5U($kKH0lmjh2vyA>)DbcCc{1P z=ufuZ8T%(T{NnKr9(^;O^|0pXljb939_^O?u;vJ)cb*3#-N3Z_Y>niC;knTXL&=;Yi<-(3VL3xbF)ln=Ops@q>x)pS%3yo(NfUoYA=q9{tG* zKa5&iACmI9_CI`*k`VC8_CJV_GCoua77klVRRzg4>N>au_>X_0CZ#}j=L=q0t$sS+A7%pGZDyOZP1#A= zXmIOK`}C);gGa;e$?tZJ$y+8e`Q1cjzndR`;dc`#zuO;r&;Gl;E}8>w^YFSD$;Wa# zX#DGS`QLh7a>Y^LX%QW_kjn_SLr+!`N`LMhpR|Wvzqb?G5Zr&lmTGgygnsh#&w34P z*}S|-_kuzF*Eaiee)H}GW;6b|zoVbWl_Vp^NaDq;;+>KaRMh!EtN12t4Dt4D!*3yF zXGT06f_8hLAY%ag(qr0s0mCcvtp;yEYGnsjGa#VQbFz1~8=KC6zK<2Fd&`Y=y3RM0`%E&p&D17o5 zuWe_YY?K<65KtRU$^bf!FNfSQJLHZ(bja!bFy23ZzeDcOBo@DmHr7m?byU-T{O?5+ zq($jeK{};dL_iv(TRax@G?q+`-ZcaMhABc!`VjPCA^areFV{?5IBZ0CK>&i>fh zXZyV3`FuQY5Nd{z+9BTt;{IglirGeF1nm+nB8%6aDQ*bmTZGSH?&@XKai#Zwf$gJ; zh7e6q+=6zu323ae1m#t1qBgZxS*RDUW6%V3jvf zL)W^IL)I!K{?6M*-B_b(42C{azkAR+RmGm<F)XqAAOQTphS)*|R8IR2BrtQ^(SyQ+Nry(k?X#YaK@(~S>ieIqus2FmVJ zY)=j3?#7?OR`OuXuuXH?h^cLDtT1l4Eic5Co{G0&#W$Rj5Si}+2+rlAj?!kV3pE6_ z=yMft8s0ktPtZdlgV01`$+6qsc*~Lv^bb&gSROUyleaw#&=$Y-z8jnMyVSi>4Y2K| zts6!?w9Gp#DoTb#9EB_oM+AD1*L?lKuZ++_Sk#)x7!r#TgZ;cIWtvqXzjTiI7c8IZ zg<^x|IA{Xb%SQx0U{LdM!rAG*c+qH)&`T*nAcq{y=kCMeYX;f!KqLNthDwu z@O%>HJ+^09IntR^`|EeITGG>y1V$!auqwM>q>k(@f9yvUPwpJ#@ip`)f=jIVx%m5L zicnM^MnjLm`DUK`ML2nefPI)BzOhek~DqY6H&cw^)mL|a86;o(w~p4WSFdy zn%^3MU6!j_OJ#4K(U!!OT88^o{foN&I-WDaMGJ_MWAn43Qz_VSf@oew-)d>v=NkDN z>*3wD*GkRQ!WrbaAMu|Yc?(M&xwIi^wwph0yu@=jD}UkDhJQ*NK2N_dxU>Ckjg49A zm@-bF`xtlfNIFNoAP@OP-B#2HBZFXZ_*e|AO7DupUykGnY8JJ8HnuL=zn<#-FqbQ1xQ{%MeC>O|P=Vl`2*o3*8UK&hzOD7jA*f{Q zfz|s`iR|6EW-BZ;f@*y}&+?YJ+RjCIPr)r3Ck`w=7-(Z>=L z0DgQ^xRiA0#B!%WeTiQmJhPiw){bmZtm{7Ow`2tFc^B9&H>t));X4Y8Ew6IXfu%g{ zV63Jju+7X!*VVB_B6)GU%f$3cKKia4p|aXWLc{wynRhz~>s*toiY~R0)VRDsi238F*$P8ZB!UjCrZYW=IXt; zXb-VTPu{~qSb?K$vzXX?9nPnA!>b}M3OQCj>P_Bb)nyn1^QiBHM% z6;+_QL|#Ff1G3vDv{YU_hhTsM{D5vSZ)Zk7iR=?058$VE>~uqcOiU(TTYo<&(M~TP z5>lYw(1&iq?Bdbu$yPKl-1pkKrC_Z>avq8%5cK>#>$_nR3)a0)-mnMDgT7D4nRJakbmd%t(IKWFg9Xcf&&8Qlp&%M@ zs;xS-Ir@sX`LLu+Y_66=RYShufz8dT6*%Iud%4b5~Hr`WWZcW&?J^)Zm&37l1C}m!><&^5A~=q7m0)68 zmYIcf!=qT^i`&tzERDD$yN?5E=@WnU^em&7>WEGB<=`VL=5Yf$HS3K|Ka~y!$Hl1s zW}kkvq-p#~lpy9(oDJRxHFL=hDi6an*%=#BMb0?ZOtoAFr&b`0SZ*i;oTgeHNOl-O z;m&TJRA4D^d3<6V(v1+2oZ%4XFYG4tk<8t38GZYqcsk#$XUc5!^)|->^x%xHi75=Ek+k^2%{2iS!SZ)rQx|;~ zGbGss9xkAY4N((%-L#QCA-{*s@}>KWlt=yhP3zC>s(Xja9R&fnJ;@p20eC6$^h45t zcAb>wzN=&SlyE}oDCgsP^p=zmn>-;9)aXgml!{-qLNQRf+yM(9Y;w;X3b+X!>9+vTyv$9nF9wXMUb4D?0*1AA?2Q}m|s zTD0}yoddiV$$fem-uyquqaAY3JLW}HD9ms5Aj9MT9k21O)XwwYV|wXYdwG0bX$avg z`*Y7A;RVZ(a&zP&=E+maF!-=M>~c_+hjCc;9)k%DrDgrOI+mF5EQ#YP+|appb<9qr zp0TZB6X5>B@61|w;qHSzNGoRqbZo8stpE5p3gL4Jw|)=Dlv0TZy2i2dKMnbK(cIq^T3 zk!t%DEwL82UhJX;u=CSR9yNy(NWbGt`sN30hsXB+IX><@U_VaT&%!?~^(~zeJaW>X zES=M$awPw8FD*Jq!X1{DVMoWvg6jkC`%4wyI}Z45i0_`#&7sB3Zure%$<1Ns4YYi# ziF>;VvfaeJ(^S6GM6_E{zT3pT*96&vwN^||KhhuUJr0qhQXoFp!)ve8!JY8C2)NGx z{3aFdGqwa)e`H&_UE14wWWHH_d?x8q*3@yKE6MHkS?8W4T8hQIKgiF-8@!1~lU}&m zk;wx_$Vq}bpA6J~Q~&n<8L$i(K@?x*(Vli2gu%uU5+@1%Cb3Nf(^0@<58R5=`aFh! z+yulPKS5PcrslpYzTV$EUujF2)sY9kj7(C*rEKb*ebXzs#-1HDSx{ZmjZ?`1Gx``@qdWtQTrfVkPaUi!hm>iuQu`JvqLbST zde=VJPvPARlMydk(M6uIrk|ZTJqi(7dEDtQ`X<0KHV&+AUSCvy6I|*hCrkYNQ_2rL z*JMGodt5GMy?j>)v+#6@okh@&K!?C zwjKq@(-SVIKm70(L803O_|({exT685>H_Yp}T z=m8>fROTCJ`2bDT7C}SjWPH4-H~D$zg)yJWoQ_R;L$acqu=S6@G!~Z)j!Jo7mS0_c zFt2Zw{GBEypYR|Wy-d1hLLWyL1=+FOP2N^Y-C!60EM&h!7m+b369tu=e7<4eZ=*vPm3$IF=FInxM`Z)RAtFR+hr{smW&hbvZObQ z|CX^62a)8mwf5)Vfs*N#j(c*m*W!X-HyiZmmm#%cy@A1SJw zI7&-K9|ZE;JA-^q(tHy^dy@p}?#!#EcODdg>n@@iRX2%-`fv>BKTJCr>7JZ`?I33p z4z*XL_YNBJsdgUDpp$ib647JP?qne@GQRN~zX7Y2{>c9Oz6(8J4x-RNGBe!RpP2MR zRJ=G^L5N%EzfFM!!o^A@EI>fEGzCqhK;WO~FvA?i&36GS2qT}DfKbxJGCae1uO^Rx zP9=s;wVt!l6cY}EYUQQ!gTD~!9csg_KMsuh@xRpHGme^PkDPNPU4t^h6n#-U9NY@$ zH`q#pSNFBt@!Pr3#niVjp7>eS(g;bsjIXvTuG8T^;VqKqo$LsOGcblQ~0**1-@N1CcC zyt)@Upqtp!T*J-2pp>Tl@!aGa&VcLYn01|S4bH)!1}Jqxh=3K5>{4|hAu7g1H$>{5 z@^EKIqZWlW1R?FQSd^i`Yxu(P|RYlV4y#J=j)c zhDOG1XlXY5pp(pWc86y?XX78e+p5Rp)_Fb?Zq>a9e%yn5*&AUxI;AvkjlNWKM@5pd zp=Py|y35yLPs0SBaIE!HXqhM@>V$WT$zvEtW}RwRX20c^ircRR)^uMEA_~lN zamk@SiVz#_;h;?UI~RMnq+uNdaX3$fvSpT<8wRa44nlVzIh2wHEvnR)W4meFOZFGO z4)17W7U~bi&of&o%%>vOR>L-?3Ky{uAPL_bX2h7yI8kTF zbTW}ndxx9qX2Uh_k0@AD*Rsmn0|-Fu zYk;JSG^{K7n_AQo9n?=+=5b)*;@n?i;X4ue+(h}MOUpx78urp+D%XvE~6CP&g4vdueKS5x4uOI~?jaNSP_r)_X};{Ro@KSR(LKeK30b_!zk<`pIB; z3F7Acx|OJTi`!4hknh3HYAMnrj&iwjDRSj_dtdyrDVhdl$Z+FujfLU{V+2Ui5)6_xjI!K~Xi%$>;xBkZ9G%^xLt>jlS%5?0CoUN`i3WHo zIQVYQm7_T-aJuqXlnnJbDzKTvc#a{mE6J0ei}eBR4|>Vs?$q+(y!bjL>Q@fU^I~Dn z8$gW{S;61WR@DlAu~EBQR7@v*X7VU1DAgsgod0-AfOdc8)crN**!JT`Er!;>$IK(C z>oY8gt)(x%A68xe6(%>J>O$Lv+-&WER?akU09}QT4oWN51Ue#EFdeA(ZL0tm&zxU? zk_C@ula;Ub8%0FpkW$X2y_(2PDQxFTl5;A1I#db3aV%NydMR_LD4zpoPgJraVrW=e6h=VCt73~%CmAr1UXZ4w z3P@E^TfIJ)zS9LIx}g~LvWlzUbBTkE*ktt*aD&A?cj7gsvCzNLA{F$i(ATL!q<;vV zB$jg~)+i$IBe~?{%^eWkh7uWbH6LmQM^?b~fw=cZ-UcUf2JvQe^Nnsrx`K$o-A{PzqcB%AMow;a z%QqXY+oVJ=7?#IgHT1k^h!E!K(DDm7uNUhww|eelE;hLJVvjr8cIgLMvknTdzD7pP z>}2UK@@hd_tDvqVio4*o5funzKO`nPHB`|=zCtJW=d2FT07{i6jxYbYlTT|DHxKk6 z@X0cV;(195D*Q(7;Y5bG>;+lJi0}@(pU{Zy-OgJT2Yny7*mWm##f5r-T+knTD~VYJ zS8{#iwcYE&7q1m!MQfvy2v!Tze5&6>eU4a$dIe^Y-t(y6;Wy}T+Ky*OyF7yqd>@KF zgV-Hg-_notC0ig~N!;UqTL!G-eG_IaOOmseb$6C#Z+v=js)J3GF5of4<@PF`VC&g5 zN-692m4cYWd~$930$}6%9TVq|jlBt?Wqvxi6y};@A0``Ab0Pk|jg%kKJ>q1Q2 zETRo2Cfrq)9vF;T~W$(0M;5?VT^lDLG~UDpvjt|5a$SXzz` zhO@{Dv1oLy8I2(W;!hr-(X9gGFuB`;vS{;f1o@yvgBRTB26%J(%~AL%SfiD@|FJI= zck69hTpEDyTel=a2R&zW`kB6?MyGN#$qPKuR_#-SnW#bAedam<-L)kS&;ug`jfv3t zVxT;T^SAemqq36`GhO5`c%QrOy7)k+@!ZQMa;vIAHL)W-o?yiFEu*BU54}Q_B<2z9!S{>Cb=v=dQ3e5J5yl8ITIW{fqrX$cafud6e z#6tje<6dBRJ+o7-m`vK8#mTW=&v62!h;iu{#ePq%S}@*%Z?Ce2-MMK*$`zbCHpN7@ zATh^L=dnczaRCT-inl#MkYi1emtolf_QO{|0Kv$k*@vvg&2>sSOND2~v5jQ-{vblS z1KLU6&CFdIl#urD4R}~u<(>~dA#iBpm6wqO_sb!d^O4HX(ME{@;2Z|1JtLxbHK^RzZ@SO9y)wePa$D>__A|Fk zf;{Q)&5XLZ@lM*VKC2FTwhKC(=G|hf%{W)`)jCLC))+&PU`a*T1(p`9h=q*bN2-_lb*3dJCN1+EtXSU$?~9xOh}qqnOVuDk(+z@nc#t#8C;cNJ)Sn9X~+k z-W#i^_J!n8vabG}1^PdC-GVT&Hm#oQ3)PN3PpC!a0O8`xpLU7`-H!ZG5|wH7jq-Ah z=Vgb4Bo{Cyzi4LlrSDzZBj^p@WL!vJ41@VO?}@c?e4BAPhiBP;D=W=pv6N)7ft&`0 zz^6OS=1&*q^|v+&ZGRVDEJ8Miv$3Kk668U_Yku;1jSDw-rB=)vL{xYzhld)Z9+P_| ztA4=}groc4W7}AsVjr3=LW;$cw?W1&yT^Musz;{JA++>RRaNFkYg_TTccKmQw6+y? zHStd~IGNk|U#itnb}*F!dKm-vKU4<7)u9a(IPAy`Fi`q2t9dINzJ<#&ac~Gh-PdpE)yq z&r>KGA7J@D&5flvaI<*?VZy#Il_PWgF~xCLbS8ebdAdiY0jK1d6ZE+n5D@noQF8O? z#k-wss(tlz?*4KEy=l3iY9++JI|W>y0;Zc?2vNxEKqUrP01?UXp8n?5#C2I|+SCgk7FK4Zq) z2J%QCLLizWt4@3^JdukKww^Dn4ACt68EtP`>ENEQhL zVKOV+<5|aqejX+CkHk|%%Ky5j9{IV5{<;k@IZnrIw`f__Jbq;Vo!%Nmd@ufH>!%Le zmx30MpAlz4=2UkP@^##ih-+eSNdf(l!AGhslPtYvG0L->u{6eZy$E{^c>~ttW>P-+zarc^&!g z{*g&SzyxH+oqr>NH>)mxK2M^j7&fr@m$OxntGKvm*-sq!cHhqSAdIHi!N?#-Kg_~> zzPoD)fsv;tOkh2$|C79SUf@(}@+)C>c7o)mBYpk+)37WONX}vHQP3$SSy+#{dl}08 zZLj{*r?bhhJFnwyr?=+V!Q5V|i3o-L5={C^xa%5_h(xjrO8NyY3utt@?G~*Uh$1&L z>&Wp;Pr^Vm+D*f@H0G(M?ruEjyi$BK_I?YST>Z<@NRz#2K$mi{d#2NdOLtNL&8fhl zz~F_tliclw6|a;>y+Gf3X5aGB#}uQ@SiYUzGOS44mU*SSBhp)VZtPCRs1(oi!(&b( zc0c!l;zQZoJxV_Q_TkYzuXV~ad!^Z44T4(#kme`Yq@uFQPb=c?oI}RV%vO9AEa&Oy zpB>2sOvx4svN~6+&6T2E1Rz&gglmEV;5<)St1fpiv(2+qDy`Er!BY|*Qbv~ zJ#jJbB>nXxrT$#5XB_xNg!P__28S7Q?rAM(lDc*jH>V+vKv&k|*jjeZb8Z6`(9_Y1 zU+@br*yERo#~#ovooZ(fjYi&9u zQA4&{M%+`8w(p6om@5yJoS?7KQ~DrA(mqYG80FJk3*v=vfcEKM*+fc{UcvkVcS{;i zbIvhngiRRD+81)oqvK#W;y5^xn1IwG0Po?=I5zH|nN{+m&M%1w^LeG&cG62%G)b#| zj3q2hxZsN#dg8h2mXIcV*qO=&2F>qP1c2;fS<|S7HM>t|Jm7-e&Mt#QaeT3)a8G(H zh)(NY&YPk&PP!r7b5zB8!y>xmRny*?WyUs@Sn!=`n$B}B$X=4IIcq8ib0y7LlQnhl zh3`C$`d`aGBsBdzAW^Z zPwuL+&eVq~sb-|ooats>U>(Zp+m`P*D%JU7bw#q1@vz&U=$8H0DO&1svZ#Nrn>dgt zQ*b5n>&#Q*GgS)TyW8f7iYQciFQfio2LsuwIVP?q!r}A2LX!C);BIM zV_1T(Kzs+PyKRkT9Chp&#QQQu;b%_7^ z#1{*g1AI04Q$$V?1H63}9Qj-#s5hH4u!}^0_^~EG2zf0Bd|zr?5E=J#1dlX+p$hUW zBIYmrBb3aTw(G1-(&P_7u@RC2HDCN9MGgftwu9|-=7n8?_yRrE3qR6(eQ10d z@oxL765D_mG>^uJ6%z(&Fq>Au-pM)leR=MX!~73H!M$adYw)2TajnEC)btm8h;7I; zYia?)KV)m2wu^M)zx(`N<6>-vmx}h}Dr=Q8N7G7EHqXQ5k|G^!T|yzbIBPtFc$uA3 zb_3|iNX9Br@Ym824$3dUw#na(QY{ zFezKWwK20iSk5JP_%HD$!s8)pNE7{+uH9sFhcJQ@52G9bmsA`RZrPQYt5xLOk=GH{ z1wryTo8q);Hv4|mci?TiIaB+TtAH2A`v#{6P~;CZ(5oD|eHY`x^|H07=gge@ZWS)a z@&1Y@G*W_b?uYwV8Ez!ykG%FL&-186x1)Z2?RyraLF1-D`C9~2zL|(+!=Y@y+9b9; zhB-jV-Bo}L5+qA0ai$c|EV5W$@9G|mhHHy{M~}9zCTlu1(Fr4-v>K)RS%9qpHbMIc zG_ujkKJ6$%?^*dfxr>!Oq=0?#pFjtOfj9i7V!@^khHJ-rW<$F8$aD{W$BJ?Fxe-TiE^E_L3GOqkRoC(yuR`U^PcNot<%P80!?^|o zjT0V5XFO`O)YPT`Jr!LkR$cEUZYQ0$EIUtj=a}t{3(O6Drr+(x(;aB8Zy%NY#ctx9 zr{j}C?D%v*LG$8nT%vgmEEgj$P^|}Ca{jvnwyv=|rf_YDBi(}6??91Jx9k|bpo^r! z_3q;H%osL2t;|Y;!nc~RAazQ43k}D*q)w>5kbc3Dp+(I5V0F?&RUF}ZSJSCg@#^i! z3$AI~6MYAyR!5^wMX{wJvR3YiEY>YM*HD*Tg2q>Qt4DTP?h*-JBX$144k1(Jr6V-$dsKm1!n@B|r4QQof(HRlYS4X1ZNepKFfUv_n`qK^WjQ zqw5WLr3^etv)uav`?2A(P(T##Ts4}8cC6asc7J*CZA-!1$FYB0yHV>?TUC8rAGYeP z-lMgJf`7I3g@@dG3deU6x1)C9Lh-fn_L0AyciD1mwbA+X>h+VshL1qUGm_2mP5l|_ z3N)O!GwKSLv{^0$Tn7_U0>q&b9|`=~)ET=d8rl2Qanq1glTTiIRIDo}Yeg9_Ia=x` z^RuVn5bkKot;AP@u5lE{+OixcgLFhc)(G%eV@V8_q{6`236A*ZO+4&WV)UP0<2uNw z7)8F=xE;T71q#zx>+6Ra!pd5Jr2;wa6Du!HW1cHPlZ zJ5hnp1Wb@6=y_T^i>u87F13t{OO3=RF4l8pWRgs@R!rmQ3bg~hXBJ)o6uq_5B{dF%We3u#rhhgfYXj$Jf`z8(wN)YTNzo| zecgf$`%x~0l@>U1o9er?fS11Hv|gE7W#sT8N(-UU2|a5%-Ud#?gU?9H%Wu={gx|d@ zz4`~$9r2(+7){XQ8eSUa)NWOC6=Det+WV>F_;Fxl2qii4O9P^qIoY=Yc%CRZVs zGHWj$H&{My6}$@fWfhPhdnA=M^dnfYQso$4>Tb`RDE~Y|#WQAA6VT8`UrZn-598JT zXZTH5`_I3A0pSkDt6?urLCFGn%ar*VQg^U?32gEz*FLO46$S&T~_<5ueflD!!?00uL*czG!@wr+gJkRrNj+(U_Nx5o4 z?~!L%C%%Wainqe~IX*uaqo8x^*uxTP&K^5mor5mWm&ri0h`^hE1M~Ygx`YD+)x(j7 z=+q~k-d|^T;F!uTB-&C^cTth{ykAkO8`!Ca@WM)z!!mAQ`{}{oDD$^(AV^5m5({!E z5n?P5bc+52<&t$YYQrO2nAo!`f_q)7t{17uDUe;$(%*3GJ18>OAx+tXfAOm!+Sp%< z5mhAsDI<%!m;}PK1G0BW$Q7KxXVM-By zOZM9;;iqP4!0U}L&wAG~L!cAEZ>pWK#zUjj<7W9`CHJo<*0iQ4Xdwi4OH~FkJUE=I z?!8|m+11BC3U6{aP}IM%7UD_pbXheQv~;h|k-HD}RMQs1ll}S@r^WV0FT!ejh$|Z zs>;3Gq-R0Iu@va*ie+Z)Tj}{3uhg28E#q=dQyPyp`m*Y&W z-fmStcnIwyHR=G|CXL>L&e#9V^Wj6Pgd_XwAOoS+_+j4~u4XIdrof^B7vCXO$%5HF zWPJo=w(ksRX-8DPretwC+;xLCEF#LDPxo;&|4JBivl+YIfywz~l$!-pZ_`M2M(?I> zZSAWtZwPwSK)7eV8v2L_5&c*J@AO{(skGOW|7Y^M`_M?D=)QC(c=BZ`n%%~5c>?Sl8LE{>H0Q8Lu&hLT~P1boJUHhwUbG(a8tpthJb%bc_9KrOzoE9mE z#2hm>eCz_H`I=n!m{@=M1*Oh$K03Oz*cauo{jxJ!UpL=La@jsMTFV>z1Wu#YLvW<| z-Q0gyq#TcX*t})6jEltF6&f!8zU0|^U{i)M_u*>$Xh%r*`TEe-#F_atLxyLec#83% zuZWqrCDQ|saZcaxudhjuP$`VU3Cc4Dru?#-aNFf`Y8$TKfHp{K*`V&2Z!cy;M)Jo> z^e$MTnw1u9uNg)gQU-Od@%FA}eXSYSIUeWP&bg&GyUtwVRCF@{N^z>#e0n1) zyA@BdF?^*iEa!Uu?w*kz(*GvuaF$jN<4BneLksI7ZHD~{mY!PD2y^_AkL*^Io!{SV z62^x&<|V60XO8$_=WefCk*4|nd~gAUAYI}lZOdgYb<3p0*>Fa}I_W1lP)h=LeyRd% z`c8gYn;Eqa@?y(l{2n#5n>t-NStr2IZ>_Zp!(o>@{&xD=*>bO9Ywu z=!y5EhsMH5K*qpHw_PAV&l3hx0R-E8qc@wU(_Z=s!N@?BO5*!0U7<+(Z;a<|%7R7~ zR9GBs@k`)vvy(%1Db z1s%b2SMKVV77_oD$=A~`CX{%skqV--P>jf=*^shb33HtQDx7+97Q_N5FiORdh4B09xKj+28T;OWzK1s%N`_6(&vK*< z-e|RQh$q^cDRkWdt+zC&TMQh|J^9wcN1bX(K9tIp+ zyJechJ^)Kh;SS6+Ez}1z;>j(qrYpKgNzHQ&bG`;DQHLW#_hE&)=8k*!l06IVh|knL zerN}?3BPRhFrU|ya0L3k;TNPFsQnu|)uIPbQ0j@K>F5!slEw0#x99|yhZ#bt$MfyASh|D^!4~i_@o>d**oj+LPEARE72{r{4O95z9G=&}lbFUTlI_g*K z>z9K$C$E-|PxU~}&0f^vR2Rfr+UDd$g)(oOQ_&;*D-nBTrFj98$hQ%@KG{xSG)}Q; z*W>I)^X`6DQoQCPkDQuQ!nnxnahd4%6Kfz$1<}mz_U&XlRetuk^R+=I6y&Ri6Kw1w zX8O_aleEOO;BbM*uv*VUUCUzKw4V!d4@TCvG|hE0;!tVF1*SCca1AjtDw{2%+70{Z z79d{|=cRXCrtqyRhZ0yI#UT<@w1@^WaC|xpelNuj%JFd7R7eoGdOFaRLp+KH&)^X0 zhJR?z_vF92saY@V;6Sr~Va&2|r1Gd`R{==A-Q7f4N&)Ws#NmZChmA2=o8 zb(9l>7`?gyN3oFMX$sN(@|X}_ckuI`SSPe-iZ9jFZ)R#tT;p4yd}q~ia%p}5E56!^ zbt_`JFIi}$4WS7dh}A3u+pi8Oe@uJmmu}km8Jx;o z?Tn1e-BY{TX&3VPl;ImlD)9~n;8!nW=ELPmm}*lLT)6DB;d1y%`pT=7WGOFgd-P@y zd(|2|={MTlq=v)5w37adJg~Pq)~a3Oa8?XEg9(~S>nt~(8AE-?E^le*eD%F$dAtZn z57(}nZgQ+)n@0Nxi;cJg3?coOCqit<9$m{jFCd)1ITksCl5sFhBc!S{GJ9^(akWze zt>h=eoZY$`D-xf!RIr?jKl-Z{f6@-syx~HXMnL-EmnCv-gA*@=&lPRe()Lz3YHjGG zI!sJ;Gvli%@7ogdztF+xi5~?FM1+;l%?$eNzdlC9@S-ydvr-% z73@w<)}@jHukskyKv03)RHHow?Ul9>n~u_v-E8hu?qYI9%02$e5-vOESP*sRc8=?M z!MgrZYRU70Pijc5w9^9J{xn+~lu6j=$$j2iHVnW6B1|Raq-kJ4y7o5yv$jEGKGlBp zCnxLlw4v%xZ?|tdZ%TI5+E4(#G5J=-Gg$Q}4S4jABrvA$`9*yTLR*_xIUk18!wp<} zpD(-_q~RM%%X+w#nDk9G-AYjV)Hzc6^sjD>NCm~+S6|vP%Gw?TcTT7xD}My~&;)Hv?Jh#?M1yEzZybhFeWZrs!iVDcl@RjPxyj6X)t;xYxi5b1 zh6-Xsf46ZatA+HoaO=F;KW9x`Vt@%6M;=bW=DpXJ^v^#|)l$G@?OL=Y8{hi{QmoH? z$w&$MjaJ~#p;AI6-Md;=O{1$ti0ENb6KVBbA(aybc;dFUBGc4*7j7Y>I@^yqjyB4K zTez`R0YbN^yS$5s?pKj`c)P2Jq_(AoSM?17b>U=|P5`cekbQNdWGA0W5_2cOb#cK# zT(_6Rp73z+V*b)yb48t+g$n?*7iIeb8#~F+N@_K-XLcCSs2V)tib$+;t#hJ9E3U*7 z5SPneJ5R*U(eb-tmQ)Q!&ZAU`-2~ETnkZG?qQr^yB(%&%Y|O~MhRFVahAb6-t2EA( z8E~uemgT||O4IXAi#hRkKO`wutyLOp*T?gXo>>;;nD9DchxHS_or}QE_r{-@nA3*u_ zS~u!ZprES>^%J-;!Ut*)*70&pY>L6n_JRIEAcon?JmnMjDFh>j&;0Ml!BW{KqN)8u zZI(!-^2>$pAn$kFn4ix-PmcZjGo>kS-ARc{q3`Y_&huYvjdzwzO19_>qoT13;jY7Q zx7AxcTMHE3z`~=L{KH+`DSG#` zYipo{weW`CoMJ=bg@LC9vQ=11N7v{xzvty_5c^<=kv@1kmpoBtzs_}L{tmR_9wtBW z9IYiOJE#isVx#le5?A_Hix;_$t0XJspgICIV)~Ld^vyy3Pb)3|zaKikTGGtOr~$&f zL18axt-Bh1q)TM|UxU+-CJ!H_?2^=jZE*i@T*`?Q7}K4y=*2m>T5j^7V5 z8-x7*N1d>C6F1pPn$<n`5cxBH_a4^e1UXHSg{n*&Jn z15G&Oe+QP3uJM!BoQi-V7Jb&D37$fAP;K3#)B1y-+?U6jtrkh-5QgAbgj03L?0V{W z5xBfRh<#gq;d&0@M=uHBvQIuT(nUX6H^@49q?5J%fTFJc$4SJw_0Se2g2sQd z9DKYj8b9M$?xG<+S1`k$794%&jFY@VUVj zZD(F!+QkuEiIvv7j72S`yb!vSVSNsh^B3-yhZD21LM>Ba z@>_X2IM01VDvJB0O|cd&VOzftaq6F1U{9gvr(q{0c4Pe76TPDMRV&GDqV=_Ecs-Y% zDn?%A#$J&sqr1X*x8GfI%VB#LZY_&t)5r_2CKHG0y@T5`k0#VxhXEuT*f7tb;CYJ<3FT+BHC4kOrYJU>uSO*W|Hu7{W%H4e6ai4tP%!OI1yxBWa>iZ zUaQ%D{lH;^T<5L?Zer0n>N~Y}l~9uw`J0H-qkS7`@V1%;H}s8;3X|LAZBO)X&g&ci%f3 zKF#D||2UFCM74 zoV-aeemCEucdwQT80L3dA#NDX6pJJJk?jQn9l z<+p_~O{>6|uViiOLdPreRx)atsP|OriB^qVfq#l9rH&l0h2*Ej@C=H`=qX&Q6247w zt9+c*S9%fmX~OJ&7+1s$IM$_zw`epT6JTRHet-l)=<1k0qoP+xprgJ-KfW| zJC7X|)^}aO0H$p6et4=i8wy+ds|t1BuXt@0BC~Wnr{+s1vTkYbwm(P=18M0Ap z>tz;BIVfO0e3zs6O8?)m?2P50VC_tGH88#XC04waPl5D%-NhaBlh-e-_(2hq2)gH> zu?@%C4?id%JTZlJt~Xu6H2lwz>=rY^F;&*z*R%#cLO6 z#3854m0&bZ7zDic7Z@qo{AST(ZC@X_C~BP+9R)WZoK_v%zuJ`tBoV?uRFiqGf5zlG zKkwg@&IwN}41Usw;U8VOK%HHGi=?__$2jI^aL`g95(%V!@6J%}R02KVw2Cum^FKvL z#U`Ofc)dnirLAH?Lr7b4Iz zXpGgt2SGu7URXK4AXQBIIW5uDAf)C4`9JwlgLv+3qTbmg&F+jWa2YCcyNJ#j5M_|y@2p6bL;F8!l_DnQ!}xu zPU1S5@3_e5%%nN;CF9oB5n&o_#{y+@v$)pKvf-SD>E6PT2Ze{RSbkT^A|f1%c?#TB zY|;_DfO^P>dbBtSGm+?SM9R6FJ91vZKW0aje=mqHpGfq?TuWef7kD#RcG_ z?<8T*$F8-ef`{mRm%hC}!Q4{4-|*T*eW2A%X^9y;x}PIjYwyyxiS(zyhq0R^J1t|? z0e8zgZd;`&q*I2zbE6fy_@XULbbt1BaUl14fAeTH%i3is?Ll9O%LcZ-c&p+TF}pHu z=wEh5qUo#JI~Re zs6&Vq1}ZYD%q#bN-YE)kB6Jtp-Be*x;hQBWm!(+WGmcun)pPJ6axXk<-dhZ5gm--`JhnENhStfB(a-+t=r<4XxKNKmYyLF8zG@@#My!RdZQty77nb0UM%jtUHQ`k%5o|X~$ zhK?$N<~*h$n!1HrmQxCHC?Wwl{>y>%Fd0Y&jlow5gq4DAk_d2`{QtE&4uUO5V<`|pvA zA1Kbv1M_#{Wq6A(Gt_ZQes(o+UMijryvxgh_KR6mdYp5an$E6LFFj>gXe`pK0XkhU zp~a=CLdmj@@SXS|Mc(xC59Y!}=%}@|LqeI5M2s-Tnw+DrxSuGj1HWL9BjwU7=SA$7 z%iy0xpS%Sl#zg_K?GCj zb~SLb|4wfE2Q$Mq*V_B~%2@2Tf|SDM+zh>fcdo&5QOW@7LuKz?(%S}gZ0v9Im>S|& z?>BQ+wkfzW8{0u}Iuv_HXq+@z;nczn;9o?ztAaZ{Iu;cFe7+quJbANx&U$6s?9dN*QzwhgMz0ULUHRHmOgp`kufP162 z7nD3hc~NXvzrY_`?F2n58@p+7*CQI3nQ1xqHhsz*R%eQ$;#6%Rc8o4N#l8_g$9%{Q zX5Sil0#-7Ei0hR~e*2?TD2<3G?!FhzLB}|NHv#C-)RdJ<^J&LO=R5}j0DktRPO?0$ zN6;QV7GnwmzTC%suII6f9Q1Lee!u6fQPYM|@;F z_RwaB$~b{0j)wRCv()TTQ7UU4pa?6#ZK?y|e(MJ)u%2{H(1B5;q~C$#8ZDb@lBN)} zPAj^a*jV826KEs#T)EkA7OQ>%k{V9Nfoubud8eKD#)zKGUP@^L&iHb!sf?=ejibMH zq5h%ue&9Tnu~YdaJ;-NjAA7OpvnJN+&|epgujRXi3vJ9<`prc-r5`%*w>oqM`lOQu zInQiNS3BN8tU!nvuN%mH#Un}mA<*wP_*i$^iz0Wb;ec5@eTdxZu8Wf2XjZeJSM{VX zHFD@|!IIrBAVV^P}eGWKSX5_wup_t5)kZb*SOvwhAG&TjW7lnKDM-RNAH13u1)7 zf*NZu9yv5>7+OFsli5uX-57RUQeVy5ZEO*VD){@E-YNY8nXhZa6Rp?{C^N&NuGCl$%$Z&R#rXdTi)3;fvHweLft#bw;%Rz|#V3*F`@;eo?9j>I^k zMZ4vZ6ju>Iz^8Di1WFs@8w%I2@(^KAJ}K_J7oqQ}CbB_s0+*pa2(V47M4j41D*x}P zTkIlK0qAR_==gq%e+J5*RR3z}lx}MzqCuz>pVUd+52N9B`rmKz?JGLg=#r|=NN^0| zY*%VMo4*=vbWsn-4I6AFR;0G11dDEbakN?pZRB#hy=CSmAi1kuC=|-SvVRw*CA2|A zs_1Y+>fBPpB5QH!*Obz6?5nldl@oL;j2W&d)CKof6Bo#PY4`2A)K&cK##Tb68ypS| zxr4qW%lcN0A%S;5@x+-(Ihcw`oKsVe@ay%wEj;Qb+^~(A2qu!)6Nsuez){+USnjSMgLmN(ZwIzV*A545TvO;b@m}*@ z_6Nnko_?-bn?>?va(>sQOXIOXRX_t2( zbN~#`T^yB22xTY^`W}q3u{oc@-zNDdt4C$4(8Op8HN&hsxY)V<&r`rCaRZ*hN0l~F ztc}H_Xf!F>DRHv145zPzn7*gkg2nAV4-2MiqlwU8b%6BGr)l<|_GDA7U$vD@u_2D< zHMq)F>lWj(^0CjMST$UWUD8qgO%K(`V5P+XO}hs>bB<^kH9i-j-!SBU+aET0Bi<_{ zKv&*+&%jux>F#=zw*V*YuPPR~*5>^-*fKN>%O#XSJXzK%byRVLSsFyteN_D)>Npzv z=h%r}X_O#VX+%ZlLqx>$N8;)9nj4e2ekPfJLWXRH!n3PhE+W}8)%tAQicL()gM`#+ z?G4P&d*hz5cSfe%7h{|Jk9oOL*Y^t(mCOPAz9}Wqt-h0DcmO|RoH62=&sJ`6PO){d zh&NBc_PWn^4h2m`7viUq54$2iVG};YoM`_zh6HmCS5GqC>wgcT&f6&+5;pUr(fym< zlE}A{HqXTxB&r?%G8mTq>qovt;!9Xx%75`s*M)7@5kz?c@H-4V^ikiOUlnrZSaL8= z3SboEzgIQaQS*qvjCLj0<_nH!VUOOO5uOe{|k>FQV( z?ZPiKOkX-O`d?CmQOY5lj3B+$yVPDGGJAvc)6{YpS|PuQ8rw+AH_1vD{gBiuWaE76 z1?Q5Lt@mw!onP+&O-sYQ`-X@p2>=-tp+xj)?-2zK zBEc`|0TA1nc$aA>rSX-Re51h1zI9`zJ>>cI&K*ymlOk$e3zVu?jgVWVR;7l&lR014 zcrRBN-AYQOtgfp))&Rg;{>`(PUQt{a05V)8R35Tji+f30rn8*H+kMp+q*@pvtf zjO1T>KeN)x&`{RH+CzCNPIYg_Q6fKJC%-#A`x|A5oS6n8>J8c(wRSH=dB97+X(X6&EM}$eKq#_NH3oc2g$?Llr5i6E#1R zXn!>RFZG5Na`%>&H9Jw7al`9I%X(o=%XBkebJ?J=Nnp#joLKJXQxf|pb)m5I?2O*t zn&UZ-ewvG(LrwPQ<2gUS9XuI_;CZP?=xH@vEE00?^!3j2;J+<7zq82SkJsh=Zt{f% zD_mN*7BRcz!5TR1-gk$tdawq_JLSbo)}Qv|edSFG92vIy5q;IF(>Wqs30x9Quh1}mdj{dq-rE-As0*dX9E+7M9DsU1C6;$~+& z)u?QsVn&1O^l)}}2maLit3<|vnE-%fP`&J{>{3fS0eUDWIIeM zHx#GqwQBZkQO41;vNPV+YF0r)nf_fvG=^`I9_wH2o12_(SCCAMeyYLuggH(D^N2H( ztulh;cr-wNWjEYqrqePnUCtPDPru#dhaCkwx4Fo<84V~cj(RFwKhQW=%sYgaem?D{ z&0=NJ`EACrN2xmD=*SNwXFVN3Y=rJPF$-(9pv;exREa#+izvNq+m)e+r~=}{NHZHXUbK4Bix6^UG?EStfHs(0-IUTV^H2^#C zClNcJXjzHs2z{@6VB_-ieJP$*%Hq(v+H6ip_n6+v3rg_in?>!bcf8qWgsR-Ytu$sd2zK{E^=An7 zyZNCPImyMGRAFOHAzXhemlbc~RwfT5_~x@6{1J9ion@k81&T9&>x8Fx038e;a_$Or z(~1t~|96`(xc){c`fGIAzRmNYrIAP+_P7j-!D`OU33@!;_Y5tsg5ql>#)JjaC;|p+ z>;3Y861;*818R`I8{pJtozxK11ysZd*9&H-xw%abHV5XZ_i6vL3V8mRouogszWDq@ z9PEDma}ke7zL<5$ntcv{)uA=)WNU$w$9jOv|F?xI%_6aDE#WWo60j8h1Fo{K?;;>_ zjD}nQbjikrp?x{muQS!x)&hfbq7b_n!SomopW_$sl~L<@JC)?_Zy|^}f*=+G@dCDP zF*DAl9*;zNDNmq~BpnExSX6-w{lWCP%3GZoyL6=Kx4$XeCkaoTSuHW=OV3MVs%qZ8 zTzYS+}AJ3WvB`|XD`bA74rfXm61ux98UHLffs*C%qJ!KmV=2paNHFY zprV-h`=hP6DBX_j*d1I}lk$988#w}qD94cg|IL7;_cCTU@*JaKu+5a=rRz%c7zDT! z#B2SOg|3bzWV?v!;OZ4zG4h>21aw!u1F|ykGX>SeB^{;=x)5Pw++7WjP(#RVpUSr| z7ELjq`s5nLCVZ9h0-*?JBRjp?VV%LBH)&(I#HyUKPNILaCNd{IGSGo3q$MhW^)>XHG#Z+8lb=){sXme2x?>zTkB#-ch9IQ&PP?xW z*N{LI(@AYQ+T(c6F<@@MsR{2OjNILbTC1ldI1sf~{o$rOtn&V?Yk#d?avb9|#h-%n zoHz;~4mZn!I&NX6UZfnGGxO2^>J+(!Mw>MX;dVHRpM=dFni*X!AA7T%%|o(p z-b7H>N=Zt8z8Xqvw!E9-?7N$4Q-pl&=U}pZ!lUGstm2#>o}F`w9nH$My*u+hMXTh| z$9JKI4722)R9*@fjT5H}Og+f0H{qI%lk)u4@o>uet8G2_ZsLfcCpI|UcF1Mx*+^K~b)`VKAGUx^srNBx|K zOt$w6kK~v{NM@Ft?{jp*K1e@<$tb(8;L3;@7X-o~2iBmDVg=JKuY98%c=!3MicUII zYP1_xAw+3rg(}QB%FTvS?NY7wJco}Y5g?dVtUQjEL^}A!_5X z)Qn|V*c~;-A7h$??|y!@7rARzmbRvV3>AdSSV3n&7j7aNb1Pw}N?;wMt?{FBx%IXN zNlzM_T^cOsD@8}O#@nC_rzRx?^Mt6y`+RoEybXto~59W?%ZzBa~ z2s3a0p_h~wX;xZvc*WOrW?PCFH+tUHf6~ES-YuF30i!$ zH2FAAqTF2lYnMtNLb{?q=t5z!9kW-lVfv=#==AxUkT(-VyMH`o7dZ;=>{xufHdN;r z|2k+&*aCr@xw?@C8Pnw2XPpnH=Tkn<61ev^L{7XN4tT1-E(eQNbc+(^QlLif&45yT zUZ~@twLraUB(N?&c*!3tIR{*d2+5_6r;-C+GLtJ;Uah5wsa935N8A`p($3-gx6mJ!^s@4}~57$tJ@k~(GW`$?P} z*`yG8$E4XEf~D6!7YWEBP2-HJ_3b6!-6hRDyXj(sdu_2sdTiB10|lve1z)Lso#VhB zo#VLJ3ug2P&ed=g-*>DvFNSAtu0DpA_?#XT@DlQru`e!-1TaQ+6Xat^!f-S9doM#? zM$(YYbg7tT-_7I3%Q@WD+;}~}q7rk}RcuH9HMa6l-QZG5$Ru?E^^da$Z z#d2M({(PgU0UCmIOqhy3YE-=eIVRM3-wN%cH?EC~y<;hRx@3&$j-{Yisar-u|7EKV|SQ&SlJ#b9yr?b*wa6je@oZkL}|~6Tk1Y ze=+mVBa|wg!Vz#cMBUq-OAsJrrOHv&V`8@v|GK$*@QEOP09};(O1yS;f+`TCyNYps z9RX$n(egj`O|P#hY3Iv-{Ee@*#m#}isw-3c*cu+}{&haBio5_8E}PUg-FINUmJSx{ z9bMhABz?-NO9D(ulH}l(|tO^s&M-M38Y9qtjm%u zpiCw*d>fUb8IV@kEexwpJhw0y#DrMbZtbSXddC*_n3x7XcyQjHG(c+PHWrrqqIgu0 zjgZ%xiY;voCEpf#a!4Hf#67rH5x^+oGZYvza^n+qCYjVoirU$TGB4%nO*3_2!Gnt9^2 z=Xu2*dHVY$%rVoHNX;JjiM4TF*lr0oGkxL4NOut(8C?uD`|#BIzT9O%h+NfKoh?+= z+$D5he|^8XkJ_!w?_g?axP<_pn2nBHlCrzpy2c~ci{@Ii zK?R*b9_!T(Q%TY3u5)4uMTO3a?Yb4>LUVA6YtEvm`q=Qqby9i;1B4YcJYw$O`_uz| zsmJvDdsyxensC}Nnf^3e?W#P=iMrfEe8#zyaXoQP7bL6Qh%dc-=MT`+Rz?RYSG_84 z*FD;_-pc&O=aVK@H}%tfX2q?qth$FG_YS5QZZNK4SzciQO{hnKu3_oG$B;gT)-fL2 zWWHAlW#~O;X@g-4fKif30%=1olX;pMto%meJ3{<*)}JR|F&EUMH9t~Hn(;*MF9kEkzo}K>2PAH9T}H9{ zP7HMu7MDCOD+QLRv~LWez1;IRglz2tNb@%~a0ugWg#Hb~D2`;yH|(UPb!RI1nq=#e zhiNpdy_gbg_Ah(kWw?1Hc;ro&3dH9GXQr_6)1?hyb;CY>y<|IBYmvS%V(P-8y!@&6 zf3Ph-*ksTub*nC4ofjb+e;fIY8uUM3(#+f|Z^tPj-z~H+1Bi$ot-1F};VblCU z`iViV)lE$w%?9{7ik*Vx5MdWmeWCjvMIrh;TQ951_77z#5@&M{%uD7nPb<#sdW>Q5 zebgzs&P8XYB%r6U=*OntJ{UWq)YMyPO2@iaUWbPywp>Jby1Iyles~KhkCL%w4=>Ee z@Tq?BGMC`~sBr{(GqNZ%x9>bXZdfuzAcvV+9zmyvJ9<&GGDce%k{SM~7yKTUGoUd~ zJM_kko~q8VU}cenJDOz)Kj&i4Y-gc>~7w# zdol0uj~PzL#q0N?!<@hi4qj19$1v2+bf_RwxU2thZF4T10JOfqU)}Dze_U^1f3LhE z#AkO!YTO_W@aU2@@}Fpb>N_*d|WTo#^ zpmeQ}h$QMV33jwQI}uLyrt>KdOd+7)p~n9#uy35GOAPwkGcm^YJ?Hh{gOK@OPraCem|*qL$iSm{qpN zo;9Da-8mHn2Q=%@;(6#V#+-8T|HdB;Z`?=l&@CdptmyQpaulgv``ymA273DK;)eey zmrnE63yL{gGPW=QoJ)=mM2;LUq(eunkkQE=&( z(PE#tU!D0raVedXB_`YzMMmbVaXDTSE?~b^$Ux%ww=RMLPWU;{lK4$KeEuh4?ljXG z+vgskv#Oq$qS7ZV_$>YXL@U+bvE-@OkXP!yIi{wB+!mEyJ-^4u z6qR`_%wkv+b!H$wZVJeynytOb+XgOa0XH`_HCz5x6FSoESreM?rhXL^ zS2g?$C}^y=U3xuT5hPjsV%7LRN~_!Xi&M0ALEvQS7K}7!bLXWJOTx#gO;w1|ddp&y z)KS61f`vr`sA=&VFm=*@-LcDIqq7g|uCy|51GO@d?Em_BloySV#hsRLW@eu4Aq~|o ze$>Q#c?PEsIq%=KMmD;=6j)~&Pno<{?Rf#=EXK`_Q>IE89V#q_=W-<0emrR%&ebZuVLyr^OHTsS zQ1nh`LV0qRSJe7vE59C+oaZdG0@VSw=Kre>pl_IV>lE!El5LucvBRWgn#XQF*% z!UcFG@N%|UfJ@jF1Tm5wL~IO|mtkU%zb$SQ33cG=)2F)4!miLczU#_7Z{BW3!Td!d z^<5qM!{uD%t@IZgZ*FZ2vtX7<>rEf%FZ{G3C9`Hs?3%+_?ZZ{m#sY52i*I-Q1B80r zU!M&|M;seKGq00$)G2e&%%M-J&O`sg)XP*z9qcUAF(z_bU)X^dkx zcEq^V%p9ZnNNT3T!=&H4-Y{e?txRsVq}Hm_62I3lZMSNPMspn7e9-8Zc*A&&?prd6Kk`-Z2W0c)XvvyySH-4MHA##WeJgZpE zOE|Hf4v^py>E+9iIuh>^nmTRD^c%hOP)65vd90j2jJ1?c&fk~|1^ro0iRNhoJS&5* z(pzKoSj>zuo>`#X^(J8@VR87o&}beUAT}@I4P+HM@6y4FN5TOIIJA6i+QE9-E)`S%mz0p;aVQR?Wus#`5$ZcGJ|P$p_|W3AU}6; z48Z?q4IK(9`JT8BoV6=paR)C??5yG&!0(u51u`}rfIl&AUTJZ8B1*{zVpA%McFJN# zz!+cDuHz)VwrQ1{~eCn^Nk%C+Fq1M=<-|E4AT$Fyih5!1R=%eC`$i+VkU?gM83^ z;L&o&VCk|fK|9G<&bxHGLj3y1GjZrt6nUn0+uO&-qo8eRFcmbjF=^3F)S86~R1{E{ zee{eda}6nL=&oI1L@|>k7`RZ}8hGe^f7Gg9>rML*^{8$j$;F!shrh8R=!L*YXBU|F z>RN2{n7oRrnVf7v1$b=ZPqOKks`lm*yKp{`z+3j=FBYyuMpwA0p?jWZjQ91RK+8ZO zIu~w?BLECof&;!hBU`n?Rl|Nh{EyHtg~*%~eg6K&aWo|+nGTGp3DjOSr%HAgAwSUT znejngkXF-)H8Ez-&wYn}lAD~lFP?2noKu1IV>#BLdvo@8+%4ub2k>C!0NxCj?jksG ze{_fQ{NP)~7GmalNUr%G3jO~qi14+XZ`_^E^0PV8XHG41A6-*?C=3_;k;NlP=wTc=p~z?_&69bRE+*5H^TbP)iz!&{V?53E{ADn1LLps(hXyE zTRxX!K#1_m+QH@noGIYHc(?SIvJd|D^j}x{6_W*u3eOXvKZa@AMTvp4`nmXecKdq= zQ)5EfK}{9HItpiTEoQm89#f?Pm>cZObka6hp`coI9|-1 zWyc%MU;Ji^kXS4DD8BScxGTy&IC+oM=%UekEJBXC_6aR-XIYi8c`KIo|5%nyithAh zeQu}aIRWS8YkPcvxYw@9VqiJdLMq%_0Hl**uRjUG0gzrCD%IaSfXVaRkFkz6?G2S= z>ai;dLN(a*XQJTeD)e{q#I||V(0dL{YOqqKc>!DX5vfSJnk?*L!0b1z(zl6ZZfBHL zDqTbQ)j_jAqiq;9SLMHUqL2Grr_Nk&BvA=p34=8AH`_nvsc}&a=&qs7N)uVb?@G^-+;X`& zf2mOCOfz$ter_Ktz^*9h19X*Hu&OlbYN z7#HTgT#H#5VfwKd-cbJAc-M`g(c)WMiF(Duz==tGvatG1k5c4qx$G|5+UF)O9a0z^ zxDBqOl$o~=hK&R&8hT%i{PCv?b^;$b5Vc0P)$yGRJw*C0Lf(qFJSKxUV}#oczu6d;$T|~q#B3S++I7Ob-wuX~|B&XQ74ggGR04{pVl@nCQZ#9`RLzBI`vs;U*>;qNMS43qMb7z;A^@2lB*pC zu^R+lR`(|xfL-xUFER`&n!jrz){}ie<(pq(QfOr_(oAFUu?N&>8dLzDcJ_I@Blurz z*B4D{HD1Ve-l3`n#nz+2r&pf@ zbYctE{W=rJ{3GN7Ia@^HS-R6wbe^$+8VC6&G0XcC{!%=O!o_}I{j1SxX6JtOC`pLa z>{1?b&k7#6H}rsKL9#XL`fIbmcU7S6s6TzNDsp~pPZ}#3MrYhxmm(Q*Wosmc7xWwK zwijPavx>O-cDD*{SMOF!Wi)%4g+K(;uz7vt(XSA=plp2GC}r(|7~8MPT9Fo>)aZu|O?1bv9^hJ9CdT#- z<@v42n_+Vj_3i-ukeSIfgmuEI#vCmOw}W8qrJ7G9zJu`>*j6`VE8_wmNf&=(r!6d( ze@h;s?&LJ7b#WBgtv^eq81>}TaNiLtnC5Db5fvucA@4G z1re{4t_lNGnlP8TD#%BA(Fl0IKgb}cTdW20Zc~wqjVmLB9s*3-C+vuorL%Xhe&5TQ zOP?w*#haYfWRg67E@?BK6QK{LVH}@rhgC3==77idtFF7SBKGIDPA>JQNhUInl&WuN zjn;jEO<0nw$@+nHeHY_AZEP=~gckwodn=P(&oQf&`P%p$Aie^ecbjxvWj9Pxi!W7h z79$qBXhhxNsnCsGOSHi!@L0W1%p>q+k)q#dpXi}=%Md|q>qJH& zFjDstU5ppBD(?f1Q}=($4cX2(YoLLI2+TWZhk|jS;Q?@l8F`)RE#RY~JN3A(tC7t? zjM46X()VOuP?`eG2wmgx#S3xgQid2$8}it_2s15^-sxN$Y@(V5i8~V&USq61f5~H% zC+ErF2{=tUMu9!e2qy}qYv9xQTN`+C?eRm#=5(HBc(4M3x@o5C@Y9%hI@X7DAT`J9 z6L>(kOrqQ2z#)6=*C2LE7bk`_vRaVp)U8|mLZ9Gr>@-Yb23>`z9(9zkko&l#E-#_j|35f2WAgvsNBn`B_E_oz0O^8%ZL$dDH@Z?yl=! zP>J6?r$B@0hHAOXVx4QD(s{`TDSw{WXpRgI}$7KR#X@huZI;Q2EDdz%eI=OSk=RWyuTNA zRDG!`+P)L}0BdY9a2O#G(+1OwwK)c+3UdYwb`Mni8o8_UND>lcPOFq9wfwOv*F=4? zIg*r&&|p$T{K$u#_hy1SA{sm&o4yFLu{|#Yf9VyGXCUv2si@S%*H+p*yK4*k{Px#s zA%fLz?yZrI*v)eL*~>m8sN9X>E<3Yj!`4eAYsS03)4wSSg`7_sOCb95X}F6_`*V!1 zL#mem<6r#cNXfP<8cJ?#NEP^DABT3?ysgmwl~{jCHB~WOF&1ZT=T{7jlaKUftN}&G z$5Y=YT~SA_MC?7Qi@k*lRh1BsJ#Rj}!<2l?VpVaK14Pl`w*>3L+I@COtk6s~ z$4ZbZ1YPd(LLTnLk%un920IqlFnUa))pLylSL zxq*5#N89;T9pr{|Fy)CbQ|&ZF!tG{R`ciDI-qq+$sOuH(-Bw02T-va%(Wr9y-yTT$ zc=ND+nsSP$J&v)g`*AeihAt*jOzL>FMapXnK6w!5_oG6iyv{(jvy9B@iHx4tNvo~B zCIk!Js}QO`C6U4`uyMB>gMiom{w6jRCvF!-tZ?)9AEdvd|EwLhywM(!+F7<`{y!Iy z#2C=#-lpm3EQ3nnq@SEm99rEjk4P@Y-I6Y9&p5Tt*77V~8SIkR!OiCI8*zxUMua=s zbnEezImL6+ZK4s8QR+6s2@UBIX>v6OB2Ufl_sZ4`BDQvn{BGtC#+m<7?it!**cF2E z#(BFgmNvag-DoQMI+q72`5(K!MyExaSm%|Pq}b(<%T6%-XHOY0CdFHQl<(gm+8L=C z^`1je#??_v?Cnz#Um%IsFz#9LMuYCjXj{WNFj+0Bykab_p1XH@b++)?VU=p;?_i&{ zNaYwpSH#74<)8BPAw8>`cfQ_Uvgb?s2F$l8u91gr{^te}S&>{uf>pG~GlSwVh8tXpr^;}mdSHp!W0VEW)m19j9gm(p~>09f8R28TQ%e~K~jZGTV6?* zb$67BMq=p;XaU=`?t@flw*6g_GNaZM-lO^YkB4tj z%G@|(!8&1l&tT2)L2+UZu{*IiWXDbkp|@45G+Fisu^UC=HiUXo=jd!{#%OLYl2vMV zuqo?l{#6xc&pJ`Xt=2wD)O)v%(jl1Op5eBLnp<8XRD?=1eRS@q{$1lMd}jCg^JF-O z1+HoGnfSDLm&{ggXcp(*!`N0$IWD_F&1PI13_1`>jKfn6ogR3bK_t#b7t*#oHw90Y zjDQ$B*r@SRvCh_m$+3SU?Q>Hvr4+{W#nkXm^}a>Saofm;BEsX9ky8ETiy`IvS>Mt- z1ABR>K61~hJ{(zS=^d*&M-VP<4SdS-)MAHt9RigH`;e%^6R5hP^x}$99p@zhJhJm~9(t_Lap^^eV z7t^sVvC;^2ex6;0IF2*-yeMX=x}!}Qm>1UeNyM)V@v-_Yc0D%&EAK-0MquQV5sA;= z7}589z~(Wb&P}BUK)sw?n<ol0SUVY8hKOcYC zYW5}(g5o5;-qrmfD8>6^{Ett7-STfv(y(l#leIhKshWhWT0k0!Xs?LQvC44}$-B9g z0(ujmozq9AbrvP97*lazEoK%oSCG^0j(IMR0rac0WnV<8f_T&Ie!r{HBF z?b6!fAYxbqOk)mWVFx^RF?VPBO5*gv?_Vc_^WXXu+od%uYoKT}f2ps^h6>6>(x$S5 zXcaRqZ6hjcdPr9AY&O zDndEn5$c|)%KE5U4AkCTz1G#~5zKs?yY~5CFf8nc^8K#I*BPtHH~A(gUMR#Qj$YJV z=`6l^7d=NPL#jtdK-N&)bY|K%f{KuTu{=pF8cMd-m1K>CTJXw~Nam3%b~xxP-!m)= z)@u)QVXAq+W+|+wOzdYLxYNz;*CH5pzW>Sn-&mrG%J_G@(wo{ zCfGF@cljMASh=4f_4O_8^pyCn<6dbpd&V;=Hts(zCSb3vbr;)b(8RI3d7E&MK(M{S zq)dg|Y0BT=b<@$@E7$b*(X{eu37*)DUzggtOO|x+B9o!CJ@j-@wgL~&*k<$&-Qks; zbA}Ly6vk-2R|d>w8OkO8h8g$%$W0XNa_}1=1IoVdcF+Ctr>k_5K6CijN~|lTNPX1d z)sVsxvCZ=;_E$H_qH0UlXp!(Kdot7uxi8mvGFacjA*P}|;oWBHiTl$L!88v5Hm~fuQNNA18Mpzpf^q**2B#=nHoye}?~xYcEjmT@Pnsj-P%F49mZ4J; z1Qv1mBb>bwnsL}vXE(jVf#{ZxU2OTHx3g5g=-PNvbl#V8f2~NVIhNkN98_ArA9%PK zi38Wp^Dx?FWO)ljV4=*a-~lORc_|&BCW?)h9+KBLba$=wWv;7?}vouXrSoB6d?md+z9Gw%8OJG^u|?LRe9 zsNPbsAgnddPH*>IDgDo6{wr`kN$WNQHRde|1zHb2NG7)OP79uKCjf!_hI>^{h|By~ zfTF@U&e!=-T4!Li3c}QwI`#g=YJ~2l^^X&LSYGpu*o537Xf1GzD8;7WL!p(W9odr- zoKRs(9pWD45e;AF>b6LF%H738!S7uDud|b8*@DkWnx$ zQ1BNAAiwezvFiJI_7~>vGlyz4vD&qY)~b7*)Us1*KE8po^}-n z5aNs)r<{mzKEDc0MuJ!XUq(yBOh}VT1L3}R@o_SHI=zPjN4+VnliCXvTZ5aD@gYmt zAsG+J_3}~}{_=hn`-<5>Yzm^QfM`+pL|;hj;g#6;c#r1-+uT0*^a?-ZiFE6^7BnpP1 z9xa9+SnG)Gus&(EJM%cSJ|DRN7@tJ)x`3jC>~EN|p63&kUHWa>u;TCgk2onH=LoWg zvsd%zF%^&+_|kceh?=Njm4oNU)Au$$MTDO)h;ou97TV%MZF~ zi;I@i6{#Gt!T%L^9VGQrZ;LC(k)!E%LRX1m);^53T*4xR4N5mVi;y8p;Xk zIc#3UTzv@%8wXN!>404-dyR15nv*EgO4^%o(PQ9m-ae60vj2Myx1+DaF6%6B0Ja;G zA8;vOEmZ3KQqEV#lO^a-*K-|$?n<#GSWP{t+BkMzM)8kxR^$=LHZZkWJQ%8T1wkK$ zJT{7PM+;C!ADZh7ZIQ=n`AxRLD447dtYaCAfqP$$Zb1Oq)!qQ$KbV!6yZQkRyWgL- zGP1y*>Jt4hJ}s-8fRl~G*UKY?=@qN2^Jx&z{MCq!G+)3p7rHe)SlOxlptMNtGimRQ zop%WekO`P3NZHeJ+peJY+gMF!+GgA`M%TZqsJHBNOlU9y!1VOd3UaG>UqFHJV0RAS z4a5h0DcHO5-|4_Ny@mSJ^|5%YEKKC(D$K2`c{pd{5|sR>*Pn?)jHcci>T#zc<@wi} z(m<68m5CAxPN(=XN#q2k?&3-->y}{xbJ{$Q=g=PMwK2ey^P`ik#3Fyos5hBewW5bk z79#UaJ}u_IoaTTo*6q}QcHyeL^G3jU!(D<4U$)BSxB%EFtGM88=gbm%V?Q_o|($%5SB3I5+ zt}})hlhW?%j8zyMlq$adlk*qH{IIXo55IySM6rb&@PlvH5Ii&IiSpX!jL-ZxR{Oqi z$i6S7uZBMz*<}R%V^+|A@tcsWA97}BBNt$ zT@&Iv{1&6*2zc*@y_D5fOj>JK0f2Ld)TQc;f(*z0I&Or2U&j2AqRynFiwP;K^*zw7 zdf(~6t5L+KBd>%6?tii~H}YI1ft!@Q#*7)sC=S0U>*=Fk57%NItjdZPG#1=#^m1cJc7Qz4q}dt~ zGolR6kcy6pNk`R)W0fm52z!Hj#+E11-MZ*wy#1qk&CA36NICJWjzPacr=EhrgUCUqyVr+35;EuBa&Mjf4yA;s8^_hx|Na)&*{ecosYRq#;pF}_DN6XfK_!HR zuhdPYL{r*GgiXPM#)!fizJ?gdFJZO}I;*-h`vzjm$@XEB{&CqDBA-D>w25SG{JndN;il+TMtGw7fU^sk-|P@^HuT=pVxVq~&p2n4)HT}2cO^S@qH@g#C(ocSs)kR5!CI&+_1 z!K6^tA*7u!0#3X18HRnri2pE)x~sEJQ~hOR-oquV_Avl&Fy)e(Zt&4dfCDn4WM7X9 zqhz^OEcqxs;U7tCHC>&mf9r93O2m>?Jpn#jsG8Vh*6$6iqQIKuuT2``a|-uAs&RP= znuNNuUS874WuAxr z$NMog`c%i&{4O`xjPbe!?W{z*OGrbpG?fy`}>Z;Sh)fzHONLw zN`)qAY-~N^ol|upKvL?!*B%vSAd5*25E3n?+F(3T8oVPs*`I@cZBz&`K@7p7(V;9(R zqqin~62cJJAzK^F*fG_5jm-~#sq6X|93NIC_NUmWiNjbNmBzn4*#Q%k@MRJLh0z&> zAyAgF{i0{^vNTyST&mvI?2D3eLW^PZXzrEji-Xa+)9bZ2F+<>kO-0qfP+}yFydwZN zNl~|mTz!XD_c__!TCG@yPT4ryO^R^Ky!seD#nHRGEa$0Ze<-t{lE^r)rGhCxcbwAT za#JO;Tcr2_jIOmcCQMN^uX~p!n_@!ZlBoxknajv(4G>nxqa|=BuPrEZ835&Re^duQ zmJ&$LtyuBteHSok-b3-#@4#B_J(t~H+$vzN8F))0b(=c>ivX|c-U-uzmMr!&!}%)aL!(e)&*qDjNf;=R%V>RXAW=_J z=3xeM^TObX>|q&WiYLf;sVTyPbG7xIPhpaE5ZUT^{fkHNY_E==*@BP~4%-6_G8Vz%FKeWDI1CAUQq7M?^n@JmU&Hhr>^kVHB z7?E~>a$eQAsrqL>H}?2yEyvQGbX-ZDxETki6Z_0jf;?bn?8G2o0E-!Guu=7Nz*5GQz=Lxu`ihybbe5;{H8@<^WO@gI+FmM7r+N8# ze%ay+!z+z+YxKY)3{h;j0yXw3;BK7&)O}uk&Stm9Qnw!HFUPiDX-cvyJ0A3F>E+%H2dJu z47#Qglndax^B+Er4i9r#bNl;?N5hNFnoX=ZS3J1}k48-hHK?-TQw_PVlRiDTVe^VF zn>x3-B;WJ0;*)F|j8x!&0@p$o&?6t-OCD|exN zVf>&*A|LrH#GzD+nZ>Pr#|U}{hS{BW!#IC@oghpeO79+Kl``G5B*OSfM7t{iZzWSzO+MLye+F_VE;#=NQrI0c^z682*r=dc`fJd0zS2*s(M7bB_9 zDRPLtm=vxgTEd1USNEuA&(_RxnEMoHP?7a#GJ5yASUseyv!oa)rP#bQYd9=emm!0{xKGQc1XJu(&Ti?6&HZC6RP^M<@G)TRXSW*?Zfui9*UF-pYn^S4EKo*Z>&7CQqk7ZNgq5~7mUktoLc@3o>3N2=Q>$)cv%q%HayxFcwFe)h35D7 za-6$n#Ls;72*c(6+U`BJ%P~q9A!4d|cZ5TyxS9}XyGF$!BOroh%BPF?ta1?p%cv#|{T}(wS-Jd>LJKgqkqC@sA zl>}EHPWhV0%jfaZ8F@2#b3E|*>Rn%cDC%vZ}V1=~G_PI`Fh zuErlGNocYb3pl!N3Q8TP(gdv#2||w%a>3`dz!PG)=Ymr3$xPpr`c!v0(yh-bo8}V5 z*~1q+GnbJ5OC5DrWak{bj3I+O4=9Cun7=`&pSzbvb0%s)H)B+XTYH7o!J|--{T*t+>D2ImnHnYjm2QS@5+tm~Ia$Ma*hOlP& z>eaQLua!RWlLPHXx^!hP+xi|N*sXo=(#oDYhH-lyFq^+?sQ!j%(tl2Q4VF%HYx( z#4v5gS}O`n+?sXYa~XWr=k$A4KKuCH>RFnLCX#Io2EI?+I=>5#&UXF#mFulv<9D{< z>#kW;#jV+vKiA2ccP0OLkFK5DhI=nu;+j+0 zJP~2_!~GQMBHRoYkGIvF|?gno|o=ZKYxhZ)N>mKRa`{`YAP58v;iK-`#Ik$~s zEN?*GUwC`cfv!C#2&U#;_^n73Q_{Z@@%QOGvm+kSz51&{6I?q1N zcT?k_wqN@ zy^^HsJ&Yh4U}r%oEN!7b0jOme^CO4l=P#bj={M3>tDop27ckej@Wx@S981IXNCTt# zul+7)pFw?aYC zk#e)*C30)((yst*gxmJ_^qY(I_z--?@Y4`|J~_>ZkMPAE=Kv%K=_m+IB<=CLKf5FGT_no#hKyA4>HE)hB17!ic4 z6sTRr1wmtrFCI9ObZJzv7;43~_;oqD&doWF(UopKv?gtgs82kappjOVeWsB#&CVkvT4y%n_Jp}lBJK-F(a!uTN(NN)M{!qS= zOLW@b?fr4pwVAJv<5B)pe&v9sW8~9lT9i)gMmWd$`YH`RG(1i9T<1J|{G0)B$aK!1 zZ24=XsRI++RD0qd1Jf)ZMT{aw* z#>3rzd?Q;YJ>2@%m>Qd+I@lyiU91M^Z_dVNAy{f-TUHmxzj`2x&NK2gwCKDa6VvzF zH8BX?phFMEp*ecqu8kpmJmUbQyf@?!E;6C+znjCx4WqmVL8~lO#aHE~LE!8g@l?aI z;T}xBxZ@!@>BXg017C;Dy@!8l>w`yM?n(-`uI+NhtgaZ_zt@)yZ+asQZr$8*ZL2j0 zcLjmt2d%WYj43p?rVR}{aqMkQZ-)o4t&#0s zojV&I&9dSiJlgSN2e+;(-(4i z=X?%ESjSM{)q_2nA{3MjU%Z&usi~HwIr!o#UYf&6`>^3%Lw}1$Gq&F~Y#dI;NR5E#9_x%PbyowR>dPc@A6r(qN}bx1P5LJM*r|z6?O1jC^aIC_}47 zEr-ydn~U)=-I_Xw93GuR^Y61S7PdBKO;aSDWQEzBYZ*h;{`E7T118xX{u`v;2&cHy z_C(W5e}i`R2{^@K(S*W_(^Bb<+nFJc{57KYGR%U*IfoJC)Ww2UpZ`C189}<2)Gqiz zOio4FwMi37T{FqJe{K$<9bQZNd8C|ZkWw*&M3TJK8 zywS4Zi)*a0#ZRsCR_W3lF2CMoi(m59R=IF!csrgY4zn+7eyTsPcr^O+5H2IOxVK;F z(%;89j!&K5gG;ybt^tqa*1l|*gNJgjF6tMy%tm&Fnc@5n^dIfbHaz-z@_s*m7tMJK zr{`z%C#OEXc=YwPo$SxsPiCl0aPR^SYmT`a=ae2j9~bS!&(2WeoiVZ0$w~_s=xoUw ze=~UW%3g+H%@g@h)JK?8# za|XBO!j=2elB;Q3`Qp&{`;J+jIEJ#}=U2KlvLqge*y7%PrLWKZXFHWoeH=O8x(<%U z8as1bzd4;+gB^x7KQ!*Dcr@lR!Od4Td}ZDq+#36adoZ@R)~y)n(K|kqh>e`YzB@qNZl$5|lM| zu5I9{veDlhwVr$WereZ@>vz&COUk2cagMdWM|!k_qm&KzYWBsWaZxyN$hNpfy^M5g z*O|)}KiRJ^(yh1V-YN!MLao-5JI^v=4D3|Q>Q-F47(!GE4|y7{yOf-qfmV&flhBer z`I=|lh~b+2S4amSq|XiywP*+c9U-hfJK#`RHzaO{^|2j%^4sJ8Z(E z54tj9LcOKn$US|FvEdsV;FS|S0)VZPdzq{`TQmFM(X~C>;@*A^C%fO234<-W^OSL< z?idE((Vybm`9&@Lo5qI4u2~AOoP~W38@{Qz)*LdhG-r7q6OVS^-x}L&ySE=3zI*@S z`yU@qaUb`p0Y@XZonyaV=k9qN=B2&AMH#=*rRF(voKavKK5x%65Y(Ufox8(*T$j2I z8;g`(7VoOrk}n+nIJh;JW;ur~-ZV6@(yb2C!=<7yir;6{64(2$H~MN&-V3@RsL$pU*XaB7te9!IJ~_&el^U?7H>N5O1EZ% zezL`PUDryF)(Dtk&Apmz@#xJ1Im(824L~d&t&(m$hj~tYJ(!=Dk*_Pinm_XQo;N|> z5_$z(ir#uFUf!+g0Wq6n;2dXotoZd@|+1nT_{A6wiH$`DoyUWQ6;l z&nt&Rs`OU`4WXYP3%JSe{59fRjdeO7#HYl)4fs);6VPYv_;c{^pl!b#+Y0x|hOBkH zJQeqrf;~4|j2QP}!p}Z^8yyV~Ebm#phjsYlX>cj#r=TiC^_tS_2NOYl-~*=v4KqCN z&%Zk+lmWvL0ZO=}C!ENHc5ZSjY}w%#K*jiB+xJFHWtS&jXm1X&(lKKO52mx`uLuWW zn&>mTH?zzDHF`?rFO;|#$0La1;?2%)n__tC&tn55{)}0iXl=*@;<~QLsz2(Rb4<(e zR|v60*j0PwGv=xug(T1z%@yD|YP%xY2i+~JY62Xq$y)77FK6uF3#;iP-5So(ehnMW zv03Nf(Tt?A4jb+vt;M4mwqhMNeAD=|;?a0`uIpjNHEw!vYy1}T#Lyh!`Rt0}h#S=U zurucfswv$;ZrJ;1Ti?46`FX>m;jh`&Vc|MJ!TGhF;+w~#hnK!JaI)Q=lyG`%oO>8z z!{IUCCLX<~?<3X&0Zxqtu?b}ba4j6!PS3-0N#e|-9d3h{zK4tdo^%c_nKR$__89)J zE37d*xqL6NzGhxJ0}#VK(9Z!p!=t}WHZ(_LTvtw4O3xarDJNf3{fIHdw+?k(-TP2V zGqjp6Ag!_XtUYBHr+lYk7L0xrX2EiS(*x4|u*q_8#KfgNZZ|wS(>TJT;YC^0`O@4u z#OVljvCfv9wb*U&=;^pJM>d?>?dt3wkB75;aqApM_;g(KI!wg?i-k;F53dRC81c1C z);z^Tcyx*b*6Owt>bFN`g<7V}F)rusOcKUTPSrUWol1iDZvCE$l!!!kZe3DAdDXR8;fuMoy@p$c?j z2OE2-e>{+kHeBa2c=Uc?+gI7}<4`@LxHaw4hdnv5_P5Olp9os97PVxs(`_qj{CO6C z_I*%EtSs@#vZoddI#q;S3Jh;!c&iy|XoWgFCKuZXa(3^g3)mPY+In%zvUs%ifW{i8 z-*&c(Ik&8r5%jSbTKV8nfcDLkMt3b$!0}daUUSh~>!cUAW(@cXWg>jEr`~IqCZpIG z!o|GafmZo_Y_NB;t2vajTj@KDG4ur(@HlfgT*()~_SyH*wcb;pl=onm{b^$uBF;59 zc69}9 zo_{`)LXMr~(?|(8@Qprw1Le)#=7fAm3Q7nRa+MH(z$fgTA0M2;*2z941TYZIzRe$; zvbn7>Qi`k|F)%)ir0&Z!z7w*ra5|=>kn7e(DeGdcinnm<+5*Qgu7_VUM`fSNM&{`5 zW@wFY>k$BYvUK5oZO5GJUf}gxTv}rb_px0B9^2a}1Hz**CU0wlNAIfD4j!!t1LL@( zecV;nc)u<~#(7+7&U)gd=FY%#$-SQSt z@qc-(D^tt-h)yD{l!Z#5Ue01xc>{??Wpn-|qAt}h%93IR=CnCW82C0x ztdd_e^&YYZ)0uYMoD3-Sdnjd(%c7LODtJ@!;}Q96;9yllZ)Q|!%bN4#*SmQ1zW7ot z(*;1cE0?-j%7$+Yj4{%qHx?*uSo8H{DH3dXslc)^9FaM&N;bt06n1TE`pF&e8YR&Z z)jO078;jOur2m#s05!;CN+_V>a!N4ZD76*2v++i&BDWlWloGI|>|Omz**I2|-n(NP z)|``Pmco{o)b)U;de985-1)&q1g8UB_`>2p)LdLqKp(k?UjB-3kW98r!T4@7QoZLM zfBX7%oMQOfW~3E9cmK_q`U{=Yp7-6M(x()$NxqM__p8)?*ZyfANuzB1k8kGJ+PxLQ(3<30!ac*-`x?P-mP`BC2L6>u3q`C&E z1bVoNW|rr?q}ugRCnwofV{^b=raxfM&k{FCCy{+N+gCh%r+uM#b_ z~rS z%!+wz_~p`DxrmudnZ>t|vDVo$k0}~9f&U+SZRB^&qiCX zT1T8@c~;x)$_pfFKml&DRKOs9tPviVqS0<`q1g%tr6S_^p2Sm`#m%{_@OJydWfV}z6#J<^|E!gOVh?-&|)Gj)% z$_VmR)KDsFRDT*>a4Udw%u3nW7${sC1C^hDweOb`$pf6)$I^SZbNMUPCZg2H1GT5)M~^u#?%P7R;G zXKh@%&)0rZN37d+7vFWSzmJn_n6@%83Ypycp#y4i>6i?O$+bQX>E0B1z+BqLmHR+nuZ>IlxH8?}=L!Zdesc=r(9(zG)&n7&id!q^F+=yJi5l<#urZCXX~b7TPmt9> zpwXl$8$-%n@IJzX-RKv()rn_rJ?<^`5IxV}8Rx(Ixps_NgrzDvdW~cR2WnVDsmT%l zw8jq>Ys*wh|E8^R|GL|jN~r@w@Y_4jo@bqqiqq!BAb2`LIyWA8JS-99Jqjv}K={Jg znj`YVcHyjb0T-5OXkROWEW{Lq=;Mkul(}_u+Qq|obKllZFD@OI`YBtS-q|a@f5lQO z4Sx$8QxkR@9Mea)bZbnnSerFJaBRh;F^^`IP2Mm)qSB?&BYl@m9`@YQr6+@3m+c4@ z@@qflgVRTnTMx!Nd|B{;9`d{|m{QW~zS$UNghdF+2rht}`=yz+eGejH_! zAG}VPE{z`fSvGm(jkcvrN0ogZWs}Erm9?c?55yWSYaV%X=hl&zkIJWhKEg2otBs3W zpIWxX+!|9huHx1o&jY77bWVps|MT_IoTs(wIg!TlDs6ktr2QO)#Z(oS2R;w;)I2_y z#xAN=4Er$hFfY}6YU-#RqvGD}4p$1UBvgs3j=y;o>s553SN_zeh~^70fnp(46hDQg zJlw!$HtfEeKZ&A6a|&^LV8~j8!`I;i*$5U9{>+E_SKuNMjeinsW6>Brq3GRR2n}0ZkqbX#>s@Ky#>-+|tfht(xizCtUYiwj%bhWd%bp-XmLdUink8X@T9c#7eyll;V{yu)Kuu-+J(zD;FXDx!Zc*)R$~B;vlNrA?R$vUimE4u>l>zC z#7#o{H$thKK_>~VVmfe3D5ZU#j1R4!dqXMx0hSf6Qs{6vh0#l)C6$Iyr%xt<3zLN; zi^VEyRY32_gcjo%&3KD8){Zhb?LycNht+x7 z0EJiF;+hq>AaJimU{h?&=W`>Hn*4ApDM>gDbFCC_RMMbZ$o3tPC+wPOD)UC&JA+aWIj}S z%=vul2~nXyfk!94j8*+OUVI@Q6g=0`W&+-m*Op=sBj`99*;m5z@r8$lViZV`L%$d2 z^M7-d-k%>^o6Q7x(ZY>VDG4s^Bdrtiz@1WOqH~TJ1E*pbA#7rd#pCtE2?lu_PD$WX z$gk$k8W$O?1c5B2GUZ)v&Bw)Klp+s&%fkptDLkm46qaqDhMStFp_B{ci*6P0Jv@IE z`@-$u*ov`rmO!@Vo#&t2S|yeDbJCGG27y{HN_lblD^p4LC7V*>ENZ`!I=55hDm)%K zI;y|pWz5{#&Kk% znvCv)9ZBfh7{2&9ov44YVAxC~6^P3g<#Lp%R}Dc*3sdFd1122V_HMs(xsb6mSn}F_`%S#xOJ499I3MHn`?Mv*_$gI zSTDvNN^Tt;s_4kZn?m??3}oEsm6Q>TIV;gQMJV;qqg%$1i`_Ww(i|=RlC3e~kQPqu z1HI{25RKS|_$}>=>#N(6W9@dw8pPtl*7PG!Zms19)0+E+o2O<*iD?sXMHPR-NTr z)y}C8MyNDTt?(VmtsgF-?Z5Z_wE$^ab3Z2L*1ijA#q}6w_II{cwnqqrLm?Knzc;Vg zpt=qxXRs}Hu3nhrVIw%%JuE22JEBh_x~+>z@RpI`R!7KUmqnR%l(jni2L^iRE=AKU zLx|O8Z$qhg3qAZPgeh%i5-~XBPq=vF9q9W?BlvS+zGoUk#imyp)PtH!jN(Q=q!7i8 zS0c=t;c}2zyTJt8+gGs3Kb#1cKG0o`cqJy-=3kOlty2K z`ZB^EjF6mMx-0xiacOwY6;F-MB~3|gba-%FpvZbQqC+#dg)Ik1@^=d-jQ6+T;KV%E z5FA+CS`&DZr`BG>e<7~hbIa1DCCYyYZpI91d<*aclh^;+;NfF$pgyq#4!I{4*kbfHo1Ny)1_k!6(Of(&7=P? ze#PASQa9r5h)?(X@5NJpeBYWunYaB&v&(AxJsl4Ne${bVbIGJx*UHE5^On_R8tQwU zTvZxtqcl3e;i3CUaPub+BoZFl(ji-q{C}`Kl7y>#>xtes^7A6Ey30YvcIQ}0Y)c=i7!Y)IX_a?h*Ttv`$*p~U=GMM0 zjn^ixpRb#FYL43!mqyXBap{LKOpGNFbKthR>BuJ-tt&Ju8^+BM^80I;MC5+~Yz_ni z(kDPX=h9e;1@jyExvkA2jO~Rgnx7)^hG>rMa8MljB#FM0CBp4%$hVP0@ZT7rJ_N8C z9!jS_0e;@ntz+}S@$r)&9(-eNqur68jbr3jLN_E9c&<69y(oo|Te-8*|@?>LgMwgf#d@SN);6fSeuZZ`fvnCWcpvK};Kr zm`=8@gqUEse*yZ|97P?)`@o~b!S_46<#_)crjrjk0AyziA0B4bA>SV>7RdA8kql1V;om6Q*p zA5lz!ip>7#af`$L$tq@?-?yIwhZcbWlF|Wa&AZ_v^{hBHt@+RIXz3kt>sSnDY*ze;A1=#;+>jP$7u6Hw-9aE(4UE)BQh&6*FoIw!Zr*k8j~OSr|>@9TGxe;mig zsUsr(T|D&xx7vscu?{*VU_XeIJ~l4>`F(5ePuDY=bDZYP5lm9+rod=v{XN}n^Sb-G z+dp@9DK6d8jFpAx%Hr1HbTBrXJdUz&>C$jce#$1-UC4Cng?RnN`5KKyx97&Kf8LvM zylKg!dtt(-irjkO>W^MO-|6 zl3l0-jd6<{*sKCW=f#rvN3TYK8_H@ zq!$`}10l5M%8tlsD4(%fsI2kLrOust=gQ|;d%%`B-l$el$tf=rlx0_8W zK~Ff{I6FPMAG!tid$;Bsl!enWVwO?ITTL!xcs!+J^b}sZw8=9*u+lU1a+9Y>UgM_5 z$c|G^{U^4}`^66Zy1ViEbZ_?auG^X`7wGHxoa^~bZq1*oYvpTtX}rPQnl(>dL#O*% zKB!5t;xzsL&xBNiPEvwWvEOUUpUiyvb3rTa+F22~MBhKqNsJLM&O&?2kVQvKF)G&= zs$2w7U7(YnP7xXkXh%UP?pe$~!{b=9R@{hw4X=b@YaZjxYfHBtTKOTZc<0DQa%=Q> zoMn?Y&c^WmV@lH+b$qtTPfjhwa&u?tldDT5Pu&>IBN{%7BPcON6?&|)SooO(lvCr& zu*q*ka;W)UiXKBpAOH;daN2Vt$g~NKLTKZfSm!Xig9!7;zd7 z7j-=JDFk2lVMfvDEOB8JQWJlpLOq|fq;xi2Nv+}JbsuH@y?8y^(yj4^a37l`=R!q^ zCAsw8%gkT95N6lUYY&=Z7R75?;e+-0Mp3>0T+)tE7Z?;rHF^Bnhj~Y1y=|P@*C_u^ zyKPu)z9{A5`%GeM_1PwOAMU}a_2$-5CdS$a#i=n}|EN>7o{h`P7N?$wR#Yc#eMWz1 zct?n*KE`YRsbP-~ery+avi?)>EAP+NJVps#zb~D?!v_J60D`1%gzFm*6KtP|zAJ)l zW_}WG=MD6|h?~0K6I=0#nZZZe;`573SUX)BtJTf2=7T)}$*mXNUwsXHPr^kMD{$IA z?|YTs7e|_ z%CCs>(f9-|^hD2%TSp7;-neyiy7Y}(-*~d>@4f$q7GqiQBc9x|xOI%t#8aKtJf8Sx zEnEj~ zI+DA2*ZeT3an%sVHp?EDO((HapUy599fRUe}AKMv&)wvQ)(gu>s|fU`h5}DCapN)pFYK{;~GTZfwbcC4UKX&S65xVe%D+& zj|<~%7Z;L<##;o6iFYyEj+*MtI*)aEe|( zeUfnT1g^O(@o4PHNKvxsdW7l4i%&UzefF~EUBf>IC;Fszx_N3whQw5|<{yi2!DYy> zvR*Q&fwv+X!HFqyG5mSor49~l5mLoa28d?|P8;Won9=!Sl;r%30ob(0@ZvYGtr(m1 zzCeJmr_4qNfSv7_jVK#c|8gs9MFPa}xl=7dslB{xF| zkG_ObvA(fCjrx}sGe0dj^(@ULM}~%Dl@UBSY$hnBbGOmR+DT^_LMdIdd;~tSzOb*7 zuHjD>xf1%ZAk2qEIfyj#6S5c9C!gb0Q)853v*c=Fq!oWS-y^y7JlH#HTl}UMTBb`! z3*wq(lb`BsaJsZxowmv4)tBkk8pOq|I=1t3%gNkYEv{@SsRiT~Qnpkaf?L;P9r!I| zyl|va#OoJF&k_Sv7PoHb^+=wY=U9L5{ZI8s*_v~trMPw6qkFUBhy?r;w+`2@VCL2l zO?m&mbxai>+y1T96O`P#jrVa`M^8}HRmrI_q86pDpGrJyd|+Mmt69K0-{pu3i3gr1 z-b?NkE52XVe%+sjnQeTUOk<>-O5355{s&ZXNxydOBf~H}u<9 zx^#@!#?xqq49UiFtE}ML^Pdd}7qqLvVw;)^J` z(pwgu3Q{rf@Hdr!&eGJ#(&MP#@!v~=6V29{cR8t~PQqV`GKfJtj${jnf$bOSoL(4`Z@WI)dSZARfsS!*hsTE%wXvBCNN|8WNRvR&#LM)4OnsEn0 z6ftWix{R_sQaOWx$64Gus?|6MKdyW}`9$XlPu8ox9%;=H-|{Lh4UhRg(k7n_GLh-h z^<>c|*Auu9&*wrbO&4EA3|GJ@ytuj<@S~V?&Wuvn-m`$+PPlh{kpe#`M4`P83`)~6 z1cL?99XNMx-O%NkeAm&5k=%N4aKV3{`{$r}S@VIe#NyT+U5aJJqjio>9dT=%-BH{+ z1{+>nI=XB3{a9o0{18}t zPX^LFLe7@6UXFr0?Fin&}@SK@rpeGhg1nYYv}>?RQJdi!W_|9e-2c9CU>=&OGLP7g_Y; z-Sxe+;yyle={(MpwQR>5YOCvQZar6eNDjHELdS&5*Y^hAe=Bkuoo|@x8xgbGqvuik zAd>K}jr5JVali--5w2)y&E+zjTo)Q4OIq6Gm}WUE-TEhk#e`iMQ(t1?yyAS-kx9Dv zEI8GYVFnUQPS(izwcLyD;(=NJ9j<;j)%!_fh}f{1Mupzq%?j(+O(k^@E`=uV)cJMi zr_i;hNJM}De-cG}y=f*9Q=0r~v>+lzp0}AmBylnV7{)&lwChCC(F#)OY6$w;@bYOV z`ZMi>%;LZV7cvPR#=#CV71w$KOeN7PUUZWU;h%_8yTmfLR!PK4g%t^w`a@)f?xnHm zu1)uAGI+5#1;Vur4H;t-y4rzY<)goB9LqQmW>ou!(CX~pAh1pd?F*6>ulH*4NF?>4zK7Kb^CTaV}cee1!=-NmKD zQ)XNnm+sH|xU6HY))*V7M!?B_rA@B4(`q8%sheJuBpX5TyxcYA{qIN{e@EK*JJQDA zkv9H|BW?U^gI*xyc(@8gJ1@4wM;S{n%8K7_EQ!(a72U&Jh$qCoxYPnz3HZs-oxHPd z8k|HWv%zR?R@#ZBp0HLcjlZJ4S3#-yGWQ?;TrgZs5Bg(YoFKjO00pIVENDLtPFjuC zh`R~4V-4w%-{Ip)-?8TlVO|l6`KC`g2)6g{aGQUtZ}P7e0$!7FdwMwg@b-*R_4Cwd zdtB@||4W}bSstVgm1uEBj2OjYU)09fUKtu6fDil45$nd85^2p3_G%Yz3R`=kTiLca zW0_UDwEQ^ICcn@n&k%_6L)R>jey-xuU7pXj#X06y>DGMjK*;a#pqU)phrO=1byTi% z7Pmh6u9()`$7^owftMT`(u$v~A(C6; z+C7^UN9>3#-5N84p3RD*1>TEWYerI9^B4d+R&nblj|SW18m!NB<=@Z0&-<_U&E$Un z8=l3P2!nrA*%zICzdV%C3WZtdSu43WBzY_Gq#^*J`a>GS&F)&~dm z+T8LB^GWg22tjHt{phh0mQ?9)Dyh1|RfB2`RVZ0@EtIM2P6TmcC1E3ro8w`aY>$>h zymp@XN#wySFb{YATmgRyVL<~kiD-QEGK3vbAq=H70aQj1mjG*@oSF1u5|}wo#O)hF zB1pK6K)fQ{-ph0mM6wX)_NjOo@yet+N~JrQM3nKtz6uSrbZiG$d>Y zBLaO(D0N_IgEW8`3tNU#2sqHoB#b)0(w@s#T-CH2Eu2s8x?75mzM<5K292Q<>-W5w zybt=>x*fRIShU6M2IL<-b+01GRSg0zsc3bT?;)|A?!jmn*$5ttq+*y$A;sH$ znZ?lea~Mj&J8zaD#GI~#Qdq>g4B=w;kDycx+T|w^7GyS)7ze{>$Pgl^YC@?)&$@~M zzz2PZViY%qTKOr$IHKg(zB+@e>WxqZSf+_lh+ls$ zsKa{nmG$w>Qdm#1PCW0_rDp1e8*P7o8*xW87`0=LAmA;|SQ1XWM`6h-!cg2ic;;i3 zr!%3H-U$`j&`(J|HOZy*04KNhW6x>LH{L(hexV^77XzCEQRwlNA={o`Y_gmgbS;dZ zj8^6BI;1YI1E$VbswA95(;zP6?>z{gQ}Y2xB{j=VLuwkkU0xcxcL@gE5u&&_F5~@a zN0;6&Oert5=uIgV#m5ke{_tj0KbQWhACf}c(^e;It*|M{Q%}6qAiRGJ3!qUR5AFxI zj?Nvl7syjzd~(v7N2r#2OSeYZGd3%Z@HMlzHNt4D&5GxFh+E@HoSPN*^}ygY#-o}- zIr&p)aM)|)=oc0;9Ox?%l!~6e%@D>*+mTQzhD%!+z=v^y$SA_QP#@5@*Oi{yj0@HM zNrGj(>hpSkhXgAfiC|kfHgnkVMMujb&UyN#GU&iOi@^s-PPct33jd{f_*n(Ec+ zsCb8lQb*(4W?6E0t%g^JxOG(62<}Q_digJiEl;(?Y_SSp|J;db3>+Pq?eno1E#Ljw zoG@SPPsnuXspw3$=8KN|$*p~`w&qw7;oeS0S|{V|j2s-*!Av9O^I?+I&t1VPqcnoL z0^1#LD6hN{dy0m^2Qdj1ehY7bTs{-;K=~4j-q!UQjYiDp`95ucZp1JYp|}uM zpPwS}?qJSs9Ah{I#k&dC0|+Ms86dn_)Cmq_0B+uPfM|}{g4M_97nyw1W6k2JC)ZU; zE*%%)-u9DPGr@*>oXi!qIJx!7(bcr(OW!lM#vML=Ep!=BI~qaU7$Oo%p~V$+F?l0- zKBD{SVln`_yKyJ<4HAEy{p~>9ZWs{niW&s3auhgN%D~1{aUqQ@V^I7kBYG%5AAT_4 z9~qvlX--bse*L{5vo0E~ljGPC=Bq18R@&s3{BfKvZFhKE^Tx(^Q?w>)zNYM4`lg#p zTHj^e-Q?E(d(Q!hmigkWq^VV|xoDX<#>)@%V|Z;qj^``gJatDT9L!@-TyS_!H?Hkh zTpAHaj*VM4&hIc!JrEHDGo~N9{4fklc>0~2C5K~Zykm-6*Kx@v=W!thFz%zy3lXPg z@zgpF^E@v8UX~UoCtk%=qKQd?w&K^NH4eq4eLZdSdygZFh^OZLzypRx`@^BFLv3+c z^YClq%w+M~)3aXBSyJU{r%Gb3=-8|t+K;dKnNc5i{kgRNJf8*T@q8v!Pq1=e4Wjx+ z6%FGB>D2R-8{hV`fX-WT%XLM!*pGy6Z56mGFjXM`JW*FvFHbZZzE6Du#Et9**p80O zsZWvniva|Kd%GY0#1g9~>N1h2{LT3Zg6Z}m+`gtlfu2{9@f06$af;PP`Drp&@rf#R zZAadZI-c*T?S=Z6gxeF-Rk=yW+W`E4j^pVB+=QDV7_^YWN>o60Hna#KlTPfij^C7@Wr82#C=)DGa(A zQgtpni-SdWVwRzP_OAL{?y)DEn;4=yH!h7PA%;9@lOJ|QRC?+~XN}{L)0!IZ7#412 z%_m*Pl3T--?I~;S<2BFY=W#E3ro!PF9gETbAtM+C$H+7(Oc#s&$R^flWU{mlmow~d z)V45DV2;faM>&fQDOqE>G-Rqg9QfXu)|gI|l`MU!uD4Ad7in(k(ziS6S;yv~=CO%e z`v#k5hR}^>{!_+_k>+PJggRY8sW#=&DC;Z83+hbH{I9Hz#T4OLADyG>ES3?xu-fhw z50^HRAKs3JC_fB1XhF{H34ca@3Jng=kV(YUrS4CnKIKBJ*vRl3=Cpl&3URa|ymf8` z_Wq)`O&Y=Q#vBQ)4i-c-gjg}rjN(RQ`S2A)XWNhy@6>Clx%H_*5ZmPAE64RU5(OPy zFnposD$|EvKzN_ZiboyTH*VeK-e7C)!!^&tADY^*RE_s?MfcPOSn)%T!=t~Gc6xH_ z`<5fwg(-p~je2U_Ve?=_bxV_)oQ`Be7>-YsCUvqC$VTwN0P6#nm{b$DUyurG-!b?= zWf$eBf>Pg4!u~qwhttU(v_0_FavDl)12E535S=-hMm6x-W+T|y6cH?iFk9+R8FI_; zJxy!Q4tzB8Fk@aC?hk#l8%OuamJWSrw8VKwc?BT_&f?ZSzEi(@awLZi_-(V|m;2Mj zt*=|IDYoJ_`!|wX-+r~5+SYOT{LNGIjWfCR`SJZc4;^1u-JaJ;*C)C4r7;8X)Ve3h ztrx2nKT9q;RAeN#_A|&;E>O%LI1Ai38N!LlU4~MFer7U;7)H-Dsm73Of>b@Dww*1% z>Aet^dYT?R??iu1W`V8=F^YV8@u>O1yU>ufF+}fdrcs?}HroiUi{&q&)H=A<#Nj0; zu(~bZBLt;llKoRguNtgm1f^KMutvFAE52$WGE}r87vsayJK7fTyKO>$NWT}<)84#~ ztjcd!=q?adSgIsccB||+nWcXf8+?ph1-T8u3hcsQ;@!M{$nd9n4Noo4J%$B>+3QmX zO-0U58CNQ$6$}+!f|$E;z&SrgPTro+1!MH1(l9*)v5ua!#%QCRm25qyDo@#0T&ZWX zXT2|@Kj{l`&th&Orw+>y(Va#Kbl2he$SgbZ@FkNIi7-D^i%uZmCqg1|M2!8N(Mfn< zit|Wh;l(DVgnqqaT^YpUzG7pbY4=SJC~ss^YxIZSl1!o-pecYoH!A7o#DncSNuo|& zo8`RiKkQ8@5%A|`&;%Zmzwnu09aFy*1%cck{HsyaW`e+lr|j4_oN~ZLeM=As*X*_b zg+aWLpKVVNI5}Ygp=|I1*-)To{*g6jL4Oucz0^39ZL{7#uv&|)0MtM$zbodh;YD$4 zc>kZ9-FUQH_w-XG1S&Xj>!C_HtvUNDqrZ>~Kv83m;<}4V$MJqgWn!B=^82jg&+Dc0 zzX#^Q$Ga9*qPrAR$JYGxI)dWX(fQ;~C|Gev{x!D_i~iO}<@Lh+l}j6#eE8bH>ROnm zaBfLS;FOO#)f@SM<}(-Gk{VZwct5^&c@4$mO?&LuRvP{lawLGAY(V_lk9giY6a$0d z1#u$L8_eZ0D=EpzsY8`ik~f@^cQ;es_ZtnQykWjinWP(5H-aI;ZQuN)ZFAGgw8^c9!mBKV zFOG}A&VJuWaq9@uG`H_tM^v2E>wDUdf2WRbI}X&)bS2~@>#H7m^DG4PuqU@x21Du3 zrUqtT1*o;^lq7}5l>=8pLS0RK{{&7~qtbW-7^8V32 z(SGYt_lmB{t!z)I9#E~UW`LS5e>brHH#e{jdVVS|J)DVX2!+GmK7p{m~NT zDhX3^oysinQhuNBqWsLe^`9)6;hf9P)`>Qh){@a6zH$-UVsKvQdy*IgI`1$e9C5T_ z_WA0FycDgwwB}d`>c9v!xU|!gTStW%A*G&<(ertCv??R|d5mrsmkwXDSXDQ<^~9)q z^3)5X@UhlYjCN0~gLA;*cQ*@uF_u_z>pU*me5H$$AUbsjo_Y?{4Fy1bFj__~3AZp!?*$&ytM z>m1Yve{RP_>ljXQi2FMjdO7CiB$qy2wTh>H5X!Q3Uf`x@8g(ur{>vtpmtm$$pPM)J zvwaV3jafYP$pIf*2VIJJ28ilGTS1p@^%#q%evoPMc$&Pq^L%8J)7dGni*=@pOGi`d zOp}zZ6i%dy7TiyvB4c!RgwKb>7;= ziD7w*Ke@I4E-y)CC4@IkZr#!5E^d9~7;0YHHuDnKt>rC4G-C{?$eK5{Pm)_lx33%k z%Cgmf&UhNrrpC*L)xv3x+aCES^DXls9&wLIXp{y03%2H1t-KevejkjfPenM-OlRU_ z)Uh>Ano2C`{9)|uqTHigb1IA1RAdAhyXi8u^lzn2&fHt+(mqy&70s9ycv-*8CZ~%^rORdIV4Y-}-@D}Q zYMxqwKlAUT2fWo1OU4-Xg%?Y@eEsYNKD@UL*^S8sLK1iV%ai;#Iqyor)jFn7u=Z+O zktS}v|0p8A42sFYM@vg5lrWcng5S3b|BVH;lZMf(?`hfoV z{>`YkQ`cP?9V^jXb~Q-5BE=^(eE7(by}h-T8%c-u&^PO}%m;ZL^!u4VtaaRt?=YkB zZ4WlOu67Qs`;gq)_m2}h5KSBLNBwu^*8H8R`Qzi^#0ms2Ur+MXs1tf|>&~D+Lt!cg zVuPG@9g@7mckh8v^Q6SmYkcWmoVc;BFt!t38TJ-J*3Gu?Wy(V1NOeK7eg&bde|8FK~@ zg2`6C&mTJ>jWUK~r>dMOvpU|Z(P6`T5}Ty#9=6GAIq11eyi>SPJzM z)oV<6fG<*bH^c>B%|?K%=c=;!70 zyf+_6_U6OIcnxSEDLzlWHn|z0r^8&jo}RyGPU>j$>~uC+RJ&+WQH2@PF%lIE>Ehcm zKtJWhVSsHc_WjrpVVLV-6cdUYk!Fk-cE%HIj*FhJC)~u^Lw8sjK{%MBAdGU}iZP4@ zrEUcL)n7*gedZ6?06ugBC!>gI7ycB9esXhe^K3khcPO#5=NA7IY(+*aS{<1JF*$8q zrr6k1hA(x;g^ag-4EaSbAqltn^CZ~TPobmqV%5~}%E7q>$y3iaPd%w8y*ZoaH8!kZ z*~%uD19zs&f%{<9Yn$K0%(ADrHDb1pvfV?lohxUi6(9V)n{Ps>JUg%d^`te9>~f7t zwnkj>yKM4B?@(U^pPavEo`28p=Rx}9eKKhG9h|tKfjcY`U>o zdYG`D*8GN-esSq|Uw*E#$uG49oGu-&#&GhHO|HMobZJk@&nf%nas$nDYD|VdpR~oN zh8~@6&0)5(<~N;(l3PC|!G>yJr^W8>B{$3%ubw&kYEAc49cnF)1{d7rG8W>np* zLg2o4B5nl&O4^z)1)(&zju8;JJJ^c*AvU-6L+|f-|FG+WFLrE?yKHiGhG)8TYnn}> zg52q!Jhjdt3w~wrj|Hsj?xtw91ZXD*l`so|N`=vCV2I#WG7!%4L&l*S$u4xbQ+p9BW+6GmT)} zp~bdODWw@wMfB_&Sq+op7q2eb2gkix^AnFoap_ADI&AZM4<`^Mmp-J0iC*8EVnlR0(N06!(SOwtqYpH7roEZnvD1EYgZ4jOU1 z2eZ?R^K0VPj*n!UymMwurc>it#d{!aeNW|ba_i1ENM?LxXz#~7_sj3I@pIB%>~q6- zysf#HbT_v?^?GfaOTXW&H_ff1e4BUKHE(QdB$w_(T?N`t-Y<=DzBoHkF_vy??){oud;iWi2>Qb=)78ofV{yQu zk|)~;X^j^H@i~<;O32>I8e@^VN|oeLy{dqd6U;9LTagjGy_m}A7C#T#YH3u99tfTV zM4=dtX~6UliusY`qnKr2mYFOg8HR^ro?MeyD-(lYo|6c-ImwrwBtIu@fK80$=o5f7 zDS>KL)}#Cl9zjR=Q(rUHm%K_ywiw)0$^hDQ=C@d2IHxN_W-!7gc-ekE;1s75?vQ0t_6_$;Fwm7X9K-P})0(u6nzQ zTf5&ftvPF(;?`3`f6N;L4ubSD=FpkAbsm?jxbL@l-GAQK+MoA-YABJegtSlX*ZieV z9nW^WnJ)hNzJ`QiXlbcjIhkkEnqN~xcjDGDtzhle{Lv89p`pA@V?l6nX$*l)4HaH< zyU)6R=BagD`F(4h&*1cfftJUjMNFWLL;HT4Tl2nSC=Nq&bf27x+*4dyfx?qpPo77t z-prx7gZ<+=-{R8VpSiVuKd+;&v##H-Chq6+``M&T?k4SxvMKFnQ#aG4Kbx{n|KzDZ zn#7+?XP5hXQ}-zQhot~yDFVw`$Q?Ws8M2#^h93G^S|LdcBBlghYMpXW0G)e?$Eil=wPAlv z+!_bAS@S4t;Ik@jeLV6D+^qR|esIoiX|rs8Pj2?fQ(tUU+1~UY{@hRUThHR%)p)aZ z`o^IT4Op2UTjOt(P2RS~+Sv4=MxCvA6fJwY^*KuKe9=!OxwW2^KImgoV?9HSBH0|^ zy7>a7slL{kE}j}Ox<~CNI^^zEzh|5LQsd0&(h-0eq0wZ`F)L#fx1Q=wORI|IAL`S>w)X&8d{0&}v)wx?ZUlr{h0cq0$lD+eJ>5 zJn(g8M0!Cf7FqfviW#i88HI|ui{rvKn+kZFNh64U;dz=`I(Mfv_tSwTvA)oljKBT% zC&|zAx0VREf3D!e59u2V3xINylapn1^xzgr@ALvbwAQ`ZMg;azn-n%2i zA&BsBcmz5_o`dTlGAmX`nbCBkn6bVQ`yc{V{97B13#G;qlMy7O5(HwQ7_2mzDIet2 zMoe;Vilg!!^xADEECyYulmvrIxu)F{qE)hg0lIUoSMMoL#Rr-Rud~L2A=ncSYSCi6 zZ?oZV#C150C9xoE?`7k7;I99%n@r$F1UOf0tB0LfaK5^eT26K$B~HCKA4a{17d!qH zSi@8j-8|Qw*t*#b&|I1eC7m0m=JcGkacT||%;MG>nlyjuyVuFw?Ek_rHr6gY-dcSM z$*ukSc~PWc`v<2x2O@nYm)2wQ<|{99?$^JoFlNcEFHO};E`9r@1NT%nJf7rnry+zB zccw{2K91s=MlhDCO-6xrU|UZs+OZIACQ>Tbvm+IY#pRFp*OBnJGS_bTI7C18q$IbV zj!H7gVj`20WKlA1tx0`p32FqHxwnJ_pMO%tkxHy{aw*z#s8otoYp;8=PFOyArzD60 z{fM%Z)(LqWPD$WHub=gCoC+ROh0Zwg=46id6LH_Z8K|&(KJ17S7;9bA-}D>Z-BBK0 zWzDfNaW8ItXhq`MP)b8dipoVPNupo=yCE*BH!5lHPHx{Z!K%o;)y9KxL+eY~)eoPE zD;^!v_*-%7C{gaV zS@8(ffw)lO)~8(WZOs=$CnUE4fzJr0&=hGSrt_|o z5kPFs5jXBY)C+KHr<764xwi?t-~&dA1rI1O|G8BOjj|`E zKi(k+TXSn4uer64dkhqC7uQ!pA7dIpgq(*@Q){KLlB=NA7+4pIe~q!9`~exkh?X}K zQt?I(taM3$nXts% zUVP2XiZ3~{nOjdehD~YTPTj`jsXxANt^EzG?D62yW%0uKy_!A(^l6FUL5CORdIh^8-&6-4+SlwxBh{r7(;Jgv?o17lS}uEPbn_VJiP5k z8fBB>XEOLRb-y`7q`36dj1ckESPQ%M^U_*TvC&~Q-g`9B+*A_oSUt}@<-N^fStV~a zh+bGnitJOk=|tOhT_t^eu`ouRPoA%MX&zH%l*~xHcEzQgkp^9P7&PR-+ZQrua_f$J zleRx)`+8e&j_+lL&y4=bt@U?)P;hS}vie1BYd-01n%sKoJkpx;niiM-JU^d@&fgCP z78mss!B3$Wc6rPsP>$+TsH0F7lX#WLDy>x%*KxhiC!Z%jZ9*=C`e;;j;-QO zvp6ItBY3{jbPhUdHLzbNrf)V*1$OVAAeDYLuGe$;$aF}8QX0UN!5o6-uh z@clu973(L*Kny(Fy^%>Ac3h^#2~ktsQ#J+&W&9 zdl^$q>`x;KC&?$VCH*ndh@uEO5?e+*$=S;$_gJvgtvSY2$IS!n14~_`6^=_c5X>D- z(+5q|7JhlrZ(w8kAiTUOm3NW55{`bDYgV$g4ghPG{A8^Q!;x6A6rCVx&2M#*m`g`c z+E~n;CTa9x%qvqR-=~vwKj~H%A=AaJE1PClN#&}=)7dthbOwo$=}bzp4qn*WsHE^- zJS#g|?_Xf-QiD??FKL|+OM7b)$I&bs-olDf#`_K80BDJ~uE#fr!ZyK_fxa5|zisMpQE8{TqQ z3Y@iX9jA4;MI0Nqma9l|YyHlY7ozv$-!ZpFz?4?p8mn}uujky(&&O|`nlJ46`*<1fztcCGBr6-_kL=f^!$psnPy=cAK_PChePKe1kV z?pL)X`J8G9h*D-$S@vzh`SBN%<%lP$(*hf+=ViV^B%_(l`^f+wmReeqgyry;~6*9@h+PNfW?et=G^ zY_W6qB>E}tCkm2?{I$^W*W@d2D~zZXavvR5P9v1krIGQax$*QEN}b3({sSuiLjU5T z!i%v>mp?&nbbOF-``2NE{?sVfSq$pIV;7!>6ZzxBveJh?Np8%3hOMA6mF z!@i6<1bP9N6-U4OS=?F!dS%TST%ox1QlKVV^MPhtV#zph&g#XNF8#pWIF*6M^ptO% zuq9t5(wIj5eHE7U?+aT_gqr1N9^w;kXK60@mh4{?8t|<(qtL~dF~rl9X;i#tT#m2~ zJG$5D;w_%Xt@N0`3=i&JU19get-~cf3fAP(iUCmjx$%7D{t)VkwG%4XPLJQ>(kNgz zZteY>Tl@Fn5bq)mRQ(cyGyyqTV5lb)^%TcmU z5pMq!35PzY4=sIlXmdsVh7aix9oVGYjOMgILBi$Lgxj%r-16_nzAFa4evHLBfwrSb zsZSEjr>xKKsiI$J#fpbv3srKn%5b@?`Z9}k75@_p)&FdN>FwGk5SEGST-|7-T5$?Q z+~%FPS)AOrGJ!%-oNdV1^JPPZ2-^`hJJ#ZhCc!|RsZWx4c`?EEWZ#R7Se%*@F3xU1 z(R^UWDgt`-2m>B@)P@j4sm)O8V$)Ja@Z{)(q13_)fDNG@HW|U2gA{^NF$WUUqv<_9 z_(0KVL{LhnBIpz2Q9qck8ILlf8ZCX2VA`+Eh>@NJc&17dho<S_Tu5Zp?%gl!7Zp8N&8(eQH9f z19?t{myQ=lxgO60E(YfNMo-pY-*wZ<;V(Yv*$!{~xs*zlpZ=c6z#W8c`DQ=BGWM^9Erw5T3y{>8O(nf6^~ousX&z@DueeU|eID2Ae72Pf4~z}jkWCB*onll>I`{8gn0^<7 zn6q{?}#i>|!MQ}Z~IZ^tz!-_*yHw;@6bh0FCSYmQO5tGIM#PTAyGN2PdbW$u`WG?qFa zSFhtRw;ptVPHXPt(D&t)n7flT_Od`uwnlKCS=JoxJBZ@Q(8}?W5Meh2uzg_!RfOWk zYC}R2JOZ&i9tU#qsq(f?`tkv)SZy>8f;T_>GRT$tS`vRl2l% zRnsPKio)P@Yj@vl-8klBzS9SNR~UB7<+5rQo@G)>pG;SuM5liz;{;vBtv?HUb5#n6 zyDm3)HUkg3HpwP$+X%+B={yeEo^W`={yb<2l;*P&zVITsnNGV zC9<0XE{U@?ebu6E#h7!9^*2m1$8aNlFgKji-Db&@BnO6n&uycU4h~Xp-x0ahsIomD z?e^E+oPx=|Yy8WbI(dQr>cW5C$baVz%^Uj{8SpdX<#Bx06QA|SXZ`Z7hCVB)kGji} zRYg8DpAXgN!{&$ZBlG`$D5QN2Ts+6koeaMD{ZyHmI-1Js+DcgI&WH$A#!ACwc55}J zX8!-X<@JA~<@L{N8!?wpG-oiT|Emt$csyyZI_#`EEbY!)<-q(M|GoL9UDtxU&Q+ak zo^`i!x4E^ST=UO&vwR{xUe0#DznvxbJC$CwlGh7azOVfg-np`B%KAn{LMB+N2+3*! zlf$m8F4BrmhdU9s9yf=+ZIfU4nM|fcB$Roj-7st7OnopQ{S9~aZ+4T&Tk1unI8jAR zvsUQ&!25&Kq}XY5aXc;NUR~(okI+YC6!59M(vb0#%jh%WU&aQ!7rx-XHqwAC z#Pt)R(BhLaVq6AHDY+)tHPS3a9MsxiTn*zp4`w0T-z$eIp3SV|<2s35Ullha#X0gX zmBI^m^KE6j2G7PQ*z*oVu{2E5*-7t%TWIRUBgpm3FmLK9L)ftRh@lkY3vDLgfv`}9 zQc+RnC(r{YULtOz*w80d0DJuz33`W3u&paU6+DZiU&WPi=p2hs$BX41dU&5+JT+_F zySz1T#G>4;b=tCL44qT_j4@(Xd1i(6lele<~) znD2XT+`4mq{BFU0z0Iw4pLDyK8KPa`LMRKQqn>X*yg!fgnFaY)E1dM-Ke_NO+-liS zvK6)qqNwCKc5@wn+=K8%ABLoqH#?400sIstH^<3MuzhlvTNMXKxEoe>RJ{QayXtU5 z=P5>KzduP9hL}l~hMQv+5ec^;e;($g;#a2atbHl^v6uus zLc}C^Iz&zGTN7*foftUiWXShl7r!*@N3Oebv%Qy;^0v>G zs80MrEJZ^o9=NvaYl{nHJ{LRyJ-SHIO#y38(vU@W<%1V+)du}> zk{AV+eNr{y>f)4bANGWEcvo)=x%Gju%a=9BB=?;^tbU?P&UWMDI9}=0^!6!RJYEd< zbZXt$wC3|8U3zGL=-PWKL->2?3}Ufe?NU_TkugnP6~7HKMrj43}AO0bMIminFJA7%2hq zJ#6rrI6l5>b!kfbZ@X~8lDn{E5PIn8^MQe)`C<~R$Z5kAl8-xkNcZV*cXV-egGrY7*4R9^L?%f*FmP!M=EMKc21 z(Xcq&)__-b_}<;DsrA~+3oB^Fr_-k3JFU(ZEju_qcf6;=0U9ksTl28(gR_l=7VBWA zH)i8Cx;dimOe>Bqo3m{46K*4wF1^?dl{R_%NVh)OL`b{w*52u%qg$-eJ$laVxTCXk zKENAu$QqDOH6|2Ns>mo(?elvcXA zb-cy)p-AHw16_Dx5Td?|r~cs5F+PfiSKJz-DCerF@Fj@0FWx72U<8@MyDx#kA!yw9RVQgXrYk!`a9HPIWrl&ChosLni!hx0(#?TFX zu(N^CYJQ=dB9zjp2>Qfu)FXVLqhoh%7aPK6|~ePRuH0&F7^v55p$ z9*$mnbUnl>FzD?{(oXJ70Gs?drtxp^elEi8i0H79flp4-=Ax{2VLkbPr!}8^RZDI? zOTT#M!zw2kNlf-jDutNHbn=Tb`oevibm`s9VBb8VI|54S&t(khEaEgO{p{d`CIo7J z@@MPU@55j5Hwm%0Lo<|Wx7ILWL?pq%yr(oNI{MoXa%34D^2}57t~{A}lQ_n7=0+)h z8q8-)Gc-Nxa~E(@(e$;~?bhx8-B#T(-%h+3Mn zd){xfMKCjPvJGRNn!n@oi7CQpxZMK{x;#&5pGWdMFJA|S<@9xYU#Iz@&-Z=0j_rPJ zHaJ%4nZ;9|bl0&p_i96#EtO9+E?ivN*)6%VEweG-bL8z1<9?n?Zf+gksTh@)-8npF zwsgcmxL7&(czygg^JH4_uJyglt-YVJ;`%*YZ#voxU&Su-fH127o{;#zTVVIZSn#Uyl?8%iy>GaE|j%mk%$5~@b^bNrpETA^6$8%nV* zR@K_}8une^veGo0Uhpi&B6)x@Kon--?%5DVDfjbdHV-S~CsjdL)X(d;+y3X?XM62h zYQ3P;rM>vsdqm=o=E-M_K5$eqkDjAVb*Cana5%E@pHnf^)kVIbw~n;`d1}9CK?#D;g~=qDc4W*M7|5tuy)bW5@9TE6noZ zSGJ8zlBdg-WD<`bBE9BDC2_@)?JEM|vHgrK!C+`6&$i(ddHhs@0HyR4x6Y?JZ?0}a9?BnIEHTjh@BtY&yU)-nNGl%0%;zjF z{a`qkpJq3ryJ9L_N8TR{;MIB=Kyg(ZKkAr^R}5slStZnjHNgFsc{*uOi};XHbEgn?raeJR4BrWuBf`3i_k zdA>B(Vv7BkTYLZFFAe{UC%?}|b7xVKzh~Xmm=;eR{x;{vrG1?4P(L*16}NDwje{%K zMkx`+``jpG_<|x7swib+FI-VbU2EKD-SUZU`%4SNKGF9yngBQH7IA&qw=80)p)cVZ zJ$VRsqAV^;dOmv^)r}ScKS{VZlG?6)=`Z-^YX(JEtYqm8R*x8!9xAbcfZZ_`Q7FXZ zSQ7~Z&rsjT3FC|WppMp&05?15wds?D%^Q+|DL@E8sCUDtX_`8q=CN7xg(V=0OJ{bI z&F}f$*IXL2Gw-d`aw(;E=(OhkzPYuQyH30F7#NS0zBq$8Ue_Diutg=|#+H67Nmnb~skqOz>Yg!5YJwX-xe)@VmJ&0*A4S$<9J!$%R&GQcLYw zRMLCSB2|UuEqTANe!x^xK4oc*d5{fLZ`V*DE%=fk%+=gBGHEuE3)4^TjpTPS$)q2i z677vj$}67VNus;eFrgZ*jF==m(QEYWxfhDrX_9A?NlAP*PgKf3IXy!5J(wPd+B~sz z?$ZhNBY7bCj3^He&g@8@T19w1vw9W}_50W+A8H~yee8|cY|E0~eQ)qe-F)BDIY!*T zd)2AR3dgJLRjHEE;~lpsE%C+m^Gqc#u7(%Ohu-Lkhr{*5$D_=1vaxhzqGd!fzm7Df zXtY+U<->(aWJIT$Z^D)sl6ca%jfc!Ij4fkmVqG>#)oyjFq)uAK)K@0!dA9>@cDAV~ zMFcG{pr;6y|m_-h~Z?4}WnfIR$tK&h3EekT|1J-LqV&&`%GJm~zVG^vIX z2~%TG?ZjMy!6^wFjKZ330fJUMYC$O-U}Fd4@C+jCdV>>v*S+UArEW~uSIEh@%J5r^ zPa=vN?r1^-kzmjhng}8e(*)b`T0cxE_!FaP=t8medXe6>H<8?)PQ_ovc+?Q#Hhnmf z$iF0yo#zoXj!4`Sjji>^-=feF|9pE*1wv9RFdMShjTeJgy%AmP5nlmaPvKDDUFa)< zQp_OEO3IhaZ93`(FD_0|u`!#^mSS;lWN?#zMp*l1 zH;$-3Tl(Vg5?VlM%{k#Fk0*bBD!`79b7tr)IEI>AADl;)Tw0kL-JtV}YqB$t)@B4( ztg~T8!CqRM^`$U2MidOodTtgJD`XdxY#h5NON@nNi%ND5iWIiy;D0?Qcrg4mSWB!=xu5$xq$&B`l#9*&&KZ~kVcsK> z9oE`VL7OIabR!6=pcMREHbcl}hoKavc%|Vo$Z<6JDHQGqJsHL1k_8j%0r>jqCJ9RE z&&VYB$G*)vE=NA|Huod@I6LV|D zc2BE&p$Skjb%W-1F>!*t&hcv65w=XnikID@l+nU{%3y+AekZ?6{PWnHJEc4j!pa62 zWBU>YEjYn;VIFc{38nB-mQX5MCRf2mFB067iAAsKD)Z`z=EZz{Hx=Am^1|v;zW=0T ztYMvhqdn-jlplO;b+%b_v2?rH3GsI`^H0spe?kND-_>A!we9{(o1R0nJ@+dAvsu6q z@Y^%h&;Qi)|I{~{b7H%7=O23|86Dzr&@{s ze`^8yeQ1A4`r|9l-)+V7_{&zxA6qN0w&MET(o-Xm&#@n8#=`m4+%yj#o^#uY^)25U zS+^hkz5n~|$X`uEw}51SH4e@Hds~Np)ds@qHQ|z)hxw6U&>!{sW?Sf^>G#LR(C0gk zvdKr!hq^<4_1V0-X;f#117{0gj3aXOVU2CZFczV>=))B=ZWgDhEIM$btdbQ*DE6X~ z5&L1DX(oL)IjLRH@^in%qXB`Tum{tWu)?boWfMP~2AIjxV=5+}ta;}IDE}r_okOVb zuE_jY(t;8pHIAf`x;S0YVNrU=&Fu|i&-gSuH20KLDhjn|+QNOjBatDP9Fob_Jf2lK z-ysB(w9}JQV;$)0s8f&Ajsdfi!Ccbr9G7KFM>s3($JShL)XAmuI2L^}Flj@J@?icV zO;Vk`QzZu+pKOwH?sTSF_Af@`7nby$@yJU*HL?($c8c!mjZDH5JQ$Jbo6DRg@pm%G zBnJMt-0;ntGH%|yakH>4F0JT$$*r~WUE1Ue&i<7yjrB%mS@UTp1959yo2#rjLN}hp zt;4tS*sOVYe0q_Cqco;V$2r9qJrVxOEkbHu}TU;XZWT=%9KOeSqU@+tz7 zyGXb(A+7kP*T?=={a%)s`A9u{M9i(RobM`|oE1@}ThoJ}thjuol3OEo`))Umbw;*y z==H?~xpd&OJ`~CGP}!1u?qOwa8i>iTqPxems}iJZdB4_^so8~ z0hZBYTu5zXN{nGYZTp77-RVhqAt3p&f8#SH!KA-pCK#ajINFwy_MGs2<}W z(5FtWczQ7*Wr_2`oc-9&G^Vkj>)fn)WV{;@yuJ}3RNCpurQ=S|`nqHs__a|=pU!SC zOu74JxF1l-8P}%Om#y>Ksl179tLF8VBKVfeA!~%ey3?9t!imaq1RKO8lg>%UPb({q zi8_mq7yKWjGhIA&#D3^k+T=RkOt+41prdWp-}8BjTSqpJ-WA<#Cx76SQ>}944NDe& zFRX8m`-R6{*$_o4y~q37e#F)sufNB35Yqnj;puV>4;b8{&ZBs0|DL$D_KU^8@wUZY zvHs8vt*rUrtIef85^JX?m&W|WEh``%(^FX{t+<0Fnp=B6w&wc1;WnR~sJLo$q!?!oA1=jhOdh3Xn9Hc&*B~~s<>u;Z5 zc#|=uY>eC?gNPIT_b$xQ{*DlOm_xvm#O-AgaqT}1RP^%@R`q{j;zoR&N7b~#*wu%drH6Zc;BCoxGx)(%)jYx`M3@9t+=?^)Txb3 zdDza~zG5=uTUr~H)KK4VUlG9cnzkhvz{xQt+q^bVOb)bkE5U%Rh-cf_Q({)q>l*+k z+pyn^7`*@OACgQiN7~J#BvLxD9%*l>C|H#zJ> zJKbCwp)xO3h?caq$Ua=qI)vfq1i%J5`xCkVv6oNsn+Ya>%)h+=GCkdB8f-sI92 zZs$80IwqYyJob3yj1XsWEqy??<}vz+)!NOaqZk}_*_*|C?T52RQfIn&>JOXzVSgxQ zbxdRxzQi1CRoa?keJT2Z;QQ7ZKQ6BEKyLT>aglmnrR66W6#P z%Y(LTREuRdKF)VKG^^jT<{i~=UYGnG{k{3FuXFpp^u=m7xwVhY+}hXG+!`H7+x@nl z9G)vK{dphbyKCEj-dFLdA&vY!Y5z{%Z{1hj=gQ~I-wcA^id%jQj!< zZGlRt4W>l&jPIvaf&nZ#>|PsKY=_O5N-(${_5S5XruZt?SMs|1Qr3lYDP2hwN`vJr z3$uKPT@&l!RRyBTWw2p^cKjbcxm+<~L+O)*E9sGN8_QnmlLQZ}2)CnG>Ch($*7FqM zc8sY09Mw&KfyU4yV=x>;TJxxi;teXfbYr1si(pEP7kHKtWOPfolW`s12eBx+`@c#$ zh^MF|y1z$KNt8inQb`3yO)7~nD|HaoAIB!C1J~c`7IB?nB8n3$4I4pR=#&$ph(Pdn zqQN<#{Plt5cy7LY#oNo{F&0^K6rrQIb>nzJ*%Q~`*M7`Vz|4(HH%=@ZlYRdfhCKQ3 zvjr_{u2n0FOGgzR$CdVCNUP7|F~3+fB)3MasvGgz5${SdUGsZ8$KUDuJ|6#mo~L-~ zoBb!|nfo8*dUI)A7gT%qQTOe!J3@OM55{0No;obnoM+XNPhmb?;;DW8{ggcne#hkV z)(Yoy&!o-UC|{~XXmH)Ay9;&RCLt)QwV{b z%p@YfHeSr&L-may(?6V_BvIae8%abf=kcddk03bQp|=~W2OtUlx~{15S34LEEibfn z4BtI#&a?Db|Ut@gi}RO@5by8q%o;9x!6*-Hp0$9x}Iw;ZzMzMV-lscq#h-dLJl)}J%Ph%L3)k>p^A^M)i zu%Vij87y@s`qOO$(T+nP3QBy7!fjLEIzip9fkYwmMBIT7c)qTbH&*5 zVt>PqHK>V4qA(<1z!F<7UP5EZ$x%we6rBgbo)`BHsW-+vHAftaZ+h;$w9olDb}1*# zq>cA`|1BR&6d~7c#iv{g%&n&jG~11Trn{Ht#oa4(y}7mW=J1&ejyJ=*G6t1w&ExkG zMoCTsrc3 z^hem5pK|4Uaobtfq4|2zKcKFk^@-yuF74}%Fuw;{&|G^{vj@zjvB=GNY+TyEBc58v zRrxV<>lkmU2XDQp-hQt)r89xnXt&EBX3*&{jji{~9n^Pv#F#iLbZor zN;JH(&BNvm+b*tEv}^41SANj_V$;NJ7sQ^7z)tZxcQGI=Mm)+WN-S3GF_elfxBMiE zLhm+{7z2y^;8O^mj*R!zo%Ci>G30V5qi{O4=T|m>E+x4|*TmWn&9G@@KsGq$TbVb2cGW$6^J$S-<~YxN{=Fm3a5BcJp4euXi2{3>jXkDCX=Vzc0wvozI{ zG}xg4x3z;Kh{>%#zHgoTyVa$vxsMNDW|K=}RrKRYo4j)bG1IM=+A+4~Q@>@t>v(LQ zL6514ah3r;xK>zlp{v2hbSf;Puw}%;?ez=Z^+R91w8{BXnGDI5)qC0vw+*N6^c9ar zKMUFK&X@KpjUXDsaK4K7d8sG`%p`OcGGsha{gHOaBrN34W8qZXXhzSn=2{XoxitO2 zX4>Q)5O#VF5IY;mZUe`Wt$aB885M4#QY_hY#dM7r<6BH3Lb4rZ5}hlVkx8%sadD*r zNM(a)N)6Zh%aktq_Cl?(;}>G08|XRyOlapj0c9Br1>5=}H~MEv*U!QYfeXyFM)%e0>#6+-Vk%1QzVy9y zJe6)29bmDBC;LO%!(}Mo_MBFHa`s7b>x-i^X_IsJl}??9!|FRqeJmCfHKz>O#L9m{ z6mgr{V?zc%7b6Otkqp_*u--RTk&;jf5VsLH`se01%#^2XXk5k%qNNrMF_tmy2rX?Y z)e)y84PX@DQM?gK>DKa7i1!{1yIB4P_3ov(ti7x_-dpFH-1_5iP4%0`mWy*&)0)Ri zbmLgwls|PGShyL-0F|w|GhuRP%3E$Vw*KBBw-s^gfdB!mY;yK5SGu&1*VY`aEBAIj z(g1criM~Fs{Z{+*#~Y8#Ai7O@{*KFCo#-1S^g}1=2OPcvKC<94H1Sl#(Ei$SDc9;~&IOmeJpjy_4vd z^t1UxdFA~B^=zpwt%uB+-w#J;H-;*ctQe;Tb{NA7pN;WPw(XzK4KVn(fVS!Eif{kq z%yZ~(;)A;BrvqR!$`E}(!*vOoTk#eht^^cG!rkrXi1=X{bJ_$kuQ3*j)2GPAH5Zsb zfn@;F6pWa=l?D|rTxAl@R~i&w4Y~t$Wq@@?lOtK$o~yPQ%xf-fuTlR*5MN6W+b7x# z{1m|wHR9O5@L2Ja@`p}+_AH*=!-v!m* z1=YVrEiYTBu{;C5wbi!YaO5WJGlfD zhM|xT#ZzneE04pPzn{nN<3#TkQ2L^msMXsXkvK{?V6*tb70BB_j35Ys35H;`7ah$CMOf z+-}>8{%Y&j4dFf0Ej6Zm4tvZILf#K=ffW2%&C-HKx53X|3?(Q9z1LNhQW;CU07CMXfY;5X(HspUTQ#@n4YU z8S_*lk43BY;1Y(Pzh)ez$k>vlqvLY_k7r^jbWtm79bgO+tqL%O*oTgH6 zz8rESI5`a#Q>Z%~B5jjvZc?UOADE3(Ry-W0)dYr@ximc0ufB2Vn^Pzmbxjv1M%@&I zHLZE%&DM)sYs5UQxqdIXwSQL^G%v7!$J|=SN5>5ISLZZhO!@Wo+Bha)ZRummv%i(i z@5#A2xit&Gy1u+_d0lgViyg+%(GTZT*`4?PPVaIoc#g8k#}~uAIbAx&pAZCFcIOJw zmg$`Xf*7MnYktd7*<2dKs889Q&yRFyI%npC;s;C*lu8K~4k}z!I`LWOLtYnB7u**v zZ>$~|Wq>Rg zNLLZNRZ)XYJCp!fm091a;_g3JiNC7M@llnIca@tZj=%R=RezR5zBzgq`D{CwkD;Q` zZ3^kE0&T@(ggD;RvMQ9$s@hiE_s!he@znpvRGs(VRp(xHX5858@JrqE^%+t&$^80b zXxiv!z7@~bDF&#n=Jt&kAjc?mCgg@v=HS~?CK$}2*QnP9rv5#Ad&&fZu6V!OhEfoG z>Da%LtFQdo)@p(1D#pV)mROJjwxtE@TJT-nmCqo~Ac zOR~61_wW6fE2MvN>$uv_Dr-KOlZ#6`iaVm7b103?4f;%{HJ^OTE-sD0URT=t`Cyy8uzc)|azC5#+-*4|M zV7}iU%$Crt%`mvj{QL*a*P%~6G%8dPUvd#Ox3+7otvN#X9GmN{G}h_j zyxxYG4UKJ1yqnG9)_6C0UN-00U=o73bu??RY=Nw~CvBLg?i!CilC?)UgyRKLY?0q( z&5@su;?{5p+AM-j_PW95dBg8`moH2iofY>+DI;{}*s!&ZA+M^hX5^OFfAXO*Yjf+N z$%tje;Z%ARx9+!`rftPF!Na-cX0!~rsE?$Q4O5Sf#MZ1YYA4os0I$m0*1n*{b%AvQ zlKX~WDsml;wI4A&feUYGYrkEho8*Ajs(YD1Gs|{5r%W^n+&n^G$q;4zZ@^P-QSsV2I)J4g9RpItyD}BJGp*a z|MKLsfg{6B@fmEK5Am(Xh_=o|XW(>et#6RlJeu$rM2agn^9ttv#I2RRjNiF!DC8>w zLm>X$LULO3s3>D(+1xq~CiauOG%m)^zE5t(={<5WH??H>WNdkH%+lC0VjbM*)^HZS z(Ww(&L^gz8>B3f6J1~{>?gtAROfOZl1^zwaslC{%xpn6}(B!FgXu^^{i0H9D&_C$O z&}I@kb}=bl1BPeKM}QesOaeLn!Zfgp%l-QCgCRqJ4&jl4}TU0d<2GOv! zttYpJQv^aA%bH`<=qhdvd%Wy({oal6#b~)ZrI*U3Pk$p!-x&|##=@+a1BtOSgq*=A zz*!WVmp@kj_&&hG10P;7{`pv5Rlu96v56n29=S^#*~!1CLk@?>5|2b||CG94n7BhE z(d6JV6at^h*GgaFpL2&BiZ!_78WoCxHe5;}iW4*MHgv-~@8`x{`ohWkiqXb7%8D=f z)0kUN9BxbNeCYheUed-c6^uVd$&TrOm0~c}DVqrb(TjSYTY>?+&EU>eWi@cAbNxYIk#@^!fp3c8zG=KjQM|2l%aE*_QDb&G4sId7bn3v+#4DZ(|y zEV>pjW#W7J53$WZ|EZa=mJ3(fJ@iQsWujc&27#5 zrN-mIH0yS#RVHqI*kj!u?&J@9E-_ykD}k|>8o^A1+nTG#m*LXRO+R{j5VuCVxs^3X z7=uxNpZi~OwG+4Y-}yN6_%8MXrWJqK8=c%5Euytq^;(Ccc)af^a4I759`se?st_Bu z-fcTSz9(yr1)H{X>*$(YyA?;5OfPQj;~Z?+AwC@5gEhpNTzdMoT0FI_-Xin7blyAn zes`XFsQ1EeKg$rt@_)%FVutdOM(l#? z`Kg%|l1wwC3Rm7})Y_8jfD9#lxP2maE{a5zg+vlMRx$~lo6D{&vv@hnicgfFi6u3M zp)B!2Jfx(OKF_=e#IXqaPAPSTTqI^u$~?)&2-_uBHcqgK5}q2HEYbZCX5pcS)HS(k z8dp`JFS`Fch$2rfBUxcoS22zwYz;patOiYM?j;?~KbOa}J>Fll^#WDthZ!vfES@$v zGyc$wdt332_E$V9nvWr!>Efj?OxlS!Z!=b`i^(g4c06xReIn98ap|bh@pdb2eKQ6R zR!)1k#@Ikal?xHp%8EyHvWTi-ZoM5B?8b3i(FnzwV!A#t1K^m&H;v;k&*S3nAr`Pg zV_Jo4w-(yjTEe=o82PhVn9S=&W{vUIJ}tE2x|r&l!B zl-d4xop(;(sEJtjbAASC$CH;7-YFuDZk3bUj^VFl71DWnX6q2C^v_@ zB`$oUyDxNyB-gds$4;v=t zPc*GD?7~hfe?387W2e+b*QMnyV#X3?Ao>rzp#(Gs=7y=OR0@GDsmdB$$Y*vS2Q=!AUyuG!%T8{*oR2R z9H7Q=CDweEWWtW^wk0Kr>7&oNrwCx3L<}OHnk4E4S0A-kGr{23pCr&uF|!dKWxj}y zr-C}gAouE&`WYQa)hJbw_%hW^@)h)c-Bw_E66U-amF=enSqk`up@Vss6(6`&Gr2Y9 z&_suytZ;>&qZP($(P8zC7l_+b#`GJ5EiIE%NA!Yko^WnBiPLq?Eh!0ZM7)w6dU?ZS z_#Zgbd`Rnr?i$`H3A8VCYDTYO!}O=`S)Ywdq?mI%I)SD?Nsj2=k2>nsHn|A5W9TR< zn~sH{zTq>0+T^GWCEOQ|G_f?go5m|CG;GZu zMs7|nJ&qVZy3!{1`8hq$m**Mv2o~(n{> z^5;?9Iy#!LCa768n>!0PdCSszDAIE0JRiqnJ#+&M;PoaLWp$;a2q7@$o zD0g#bS@82%V#E;x#|@>QGaYhGZoHD7`<*YJ`{N7!*+5Jpnsc+6aH&O*DF!!RWYfM9 zP!sRpAkgSHqEoV6|1Hi zVfhcbN*dpw@kWYhaGHK3iRS55yRhaDpy)^EQ@owABc|BNIq_$Hk0LTg%tRuih^$eJ zB63BsE9aHh{v`I_wdlz9ViFULV=)SyCYc1U2hpvl=|#8=?^O2v(P?6+XK=ir)cc!L zqbmia;MZj3TNkmv%_tOVO-za_6B$ZfDEksh(LK>Wno3bebIIGsQ)|}7H+`NPw_ftX zFt?6(=A-r-Cw{cbiOHq!r{aG+=ce`h`91CD;==UFtz$)=WBb0fAHRGO{J0Li4Vz2D z9v}RmUH6->TlW0mez>;dwD!}5{hr(J?#Fd*y2*1~+QpKJp_6^3Q8=%~kPOETrOsx! ztKqL~e;$M48>CvdbENVr%LKf+|C|tB>lz$TzoXcA+nL|9HGepYX)K9%L%aji8h0Fj zrb-?tEHF6`2gXJ2n+8bJnjc*LJGr!e<9XAYo+_eJh`u`vrJ{@I&fQ39aNJNs<&3Q$ z=tv7E6=x=R=H24k!Uh-3e8FFTe(t+&Sm6DvE95gbPu(=>Ropr}x7YUl)NGXcM086d zD?CZ1GRD#jA-{px(P|1AbJ45@sG?8raiQix{S5|VJ%Ak2)y96~q8iR01ti6pq& zJZt?V9H6$VV~zEeZcbi`ZiwencMZl@R<8}G+!@bL2?l6`tx;B-@$=8*)@VfklqhKr zo%P3l%<+D;j=FK-?|{C!12^z(&F2TVK0mDa`q)1sLU9=<@zh)`qqz0?!L8>9w;mtd zx_xlz^>IAb%E)axJi^q785YMw^SF|dIJiP3nG6L}$P@$gNX;E6s6r*=hElp>C}e^` z&tMAs#?vxKR)T>uo-;&d5cERc$y1}FcNVu+X`fu$#rTcLnZG|T`X<7xoiRdDIQo)N z#4OEzn^9bx#34oz&bWv7S7KoPbe!*`$8Q|wGNV9?)QIBbP>2~7-Uky(o%BeHE~9WG z)VNRACkc;31l#%*e2Vapl_0_2MYphyRcApYG0-JQ#O;A#sUp~p&fYjgc!gqB(}%MG zMbKA~U*RTWupX#zH2GHHAvP1Cspg(0b+Pi35j+)=Kv1e-Qk%`dD9iiL4Wk);C6v0@ zLOjtY4hQgwf_wHdgnf9)gV|HTjWLa2bm8=bRN+K*>l0JD-gg>=`2cf}qEb7*ysSK< zmk^g`7D{f74$7mrwN^6LZnsOsQ7yxm*pK>OjN-;@pbg<$t8Hi@3o9T*Ac*)}J6d@L z-1GLEug6;lxB71G!*^`3Wumq5l+OgWTz6f0Z-4&&X4@NnN4CVhYqqtpH5^ZOYu+>- z-t{_?TIuGgqx-0g_Y(b4Y4SH8&bAY_JjU0NpJwe#?%sz*jM<&~OvHF#N|E53pp78b zW=$y7JOPvi*?L_P^Sng96bSvrXjT{AXNEt87#rD)Vq)YYjo{#Ne}Ym`RhQvB!Oy=J zjf^pl#Fnvdtz(BNt^WGLjJd>?d_a;)GPYY%%ByF92w>|=W2wohheIpmY3Qslqp7GQ z$C#5+>L`6qnE{pKj45>?d^kEhObXu)(|R<250kB;FvhS+H1yI4u8VWc38nU%Z`3en z4sK^$oO0wiyP(v4F;)nmm5xMEia)BN76q#dVVCbLy!Fg0gX*w!Jeb+eO72EsjdlNi zf5wqv z#1rNK-RR3iZ}9z+hn$jxQ^(G*Jde3_(_>(6-A?(sm`gX-IK`#06oqE6^i4b6+*<3v z6_@tKN?sSQJ$!sHk8{$8h3g@tA#7aLRFDdTe)=?u%5FMEBC211Mjzk7myk1!U|hdS zlR9FE-k(4Z*SZGcc0@QH{^X;CCxwLD{J!!$Gy7l=L@^1*$`O+o=-%EKm+(YHhI{jH zp>J&znKGtPibR2GEEyeWSnN;MH{!jMygj`3@gDNfzaBwPPHJ2842P3kdN7`d?Q6xw zb-wxHNP6tk)*K-c=O}L76t6i=1CKNYbV}&G6xNJ#mulv`| zcuaHd430FN$8!z~?+>pS526w4ZN!EViuIc0x315(sQ<*<6pqGkKoIeH?&yp+z^mS- zAfg_vZ$a=Z{uOUYT>W@*+$EZ5x1#f<6^}X%tyOXB$#@Ymrk&YSlqzbPN1usUm@9>X zQJZbLMxN?#jiQtGWb?Tx$RxrrEls<%HJ^<98dnOXh_us_TeIznppciAH-}FstBbPa z45o4>x2_9p%M1AXdp^#K(|mW{bezZY=4i}lzZa*A<$37%i%Um0(bI}sN6$1~Va%nY zxSy=yx+YX0&B7%|& zT&IGrFO+pB10=%{x{T?<(E7_pJ0mROh1)W!Rp{^MmAvoNv?TT!rLmmxA3E88x8udB zwKHQ$|1up)5w}#%5#I>pY);)U2)Of0{L!zNTlW_)tq>aiJ%=)kVrrvMbgL>T34h=1 zh^=*`-Xr3aKN!q=j>3{Zk11+?(@ky%C5fZ){+xN^9*nthYr2XgPtCbX#jQD|r?|8Z zG@lvmUO$i67zd|1H>99zQHC%Y!*@cdnBF(jz@dONS}`)Fim8}bGM@ovNTr%aF^tP6 zH=AK((RYI>12D(-*=C*~na@_IlIIXVEXZHHxm&EWVG==&|RYj5ZFj|g)e4>5@-u$w=H(8s~xJ~6u? z&S<8l7h2Ib!`c6Xrq0nzsM9c|-p84zc23fRejJO~*=W4aiH5MiFK zO(Veixp8a8Dd8*DqN8*?RnePCBX}{qhoF@I+%_?Pg?rVX@Qx5^8~3qs*!93kHuUL| zG)0?B5SzNM_oFC9Cx=-EUPfpH2VTW5)07vT25gJpau?$e!Z;Yz$LYzfweo6O^Tyyu z#ibj)OQR>``$Uw+Z%)DvcPZ196JD~3Em=#XMXv!J7{2c`rc3XL#**t&kCm__;*jiy zly=rh5tj9Sic32) z`-yne%lYW-*jS}Gs{49=BpLGfDSTvGfzO^A2Qj0FuBpVf!V^yVNhSHJS~l_be5FG2 z2lHX5hamDVM>GdsmN9t&?hZ79@#A+vs*4xg28|Ryl{SKy_K=WDPioBW;2e(@9vRUa zrca}`r%)U*Nlu?euaw4jNuHUHkU!6pz#IWA=ApJCdWY`Knm-@u(w}!Lxo+xKyKpWj z`p(iOj=3CL>i7MJLlK_Zv$3_#Bx^9$Os=_H@A-)MW4<`N9K3E-kSBO{2(!Jvugto%Lx(o_ov z-cn5(n{=RxPFDYJw4hFZUTP(bWy0~#cb&Ma0PI&!IM4pk^tr zHa^_VQq(%a&$PQJqC6+OLwA^jM4 zU)ON>%ZLP+yVFkzO6j2d!~8|Qhi#_my|&V%uET1F6Ge!j6pykD;DgRtL#YRzRVOED z#wv0{E2SV`+a`Z7$+Oa><83_lW1C!mm+8_7iZse5p9(bZbnBaKowVfR;N(+t>v2S* z=h&3_rc{b z78~0!J_Dx^jr%Nma;H}MqY(J{b^f`r_ZFQ+W%7O%Idmi4zDbiOC0M4hgQ z@X?vj=;!txZyLo9Js0NIT5K*Co%1muLeWt+e;or0`gN&H)cKTF5tCOzdTJtRW)x{H z^;leby09>p#;RP`JHuU-@y4TY{Et?Jh?B&O_2;b-N^};t)>~(B>86*l3M{CDOreb-IbO?Kv}QlQCSHyH&3 z__$1GFJWS&owvn`8uUdhiNLb7Pun&kCd~5O{IPF1 zCEkh8u_p*zTFrXfa7qOCe0@V8CPl}kjM@C|Ou5fIWFDhf%qqK{q*5^`q?MGhX!gj0 z&pQx`vAOA8r@%$=H#*;9fAVScP6|pjPJc9{(q8VH(}y}jtIeiJNByXcEeVtV8BCpX zw37HcnN);Poah>d=xrUBAFeSScXUe;xD+fZ6AYr4;y(8T0R%rl;ADa5+>eK%61?FQ z#c-?y1I(=&*S?{Y2#tHMEx~{>r24+06vbt%1cSUTx$#Pg;^h66c?F#& z#fW@Xx&at%ODM%}*42GhURLi@JHx^?38mmpk&r6fXGTJ)pNw-NOEJ_z!yEWK$^_H5 zh$v9%wKQbhC!AwA#q;p4g(!4?eVfm({JH{0DJ5EE8>Qq*5linDY>&b=zPihp9=v6VDdQ=>FPo%4CF{)~G52j%iJ+E4(U5GD zM{_{yn8HB@b5Bmrl89O_tvDvejpEYS4`u`O7e^$Tbr!ew@%Zm{jTJw+|A&)b+M#%> z{#onBT%6omr{mq~-iPPHbrq$ISy^xjHie8w<{m{UqxReCF3( zYEPz;{#lnZS*+yQDB*o}TbbYzAPbPGFxL#6uo#N43?dk@NpETyuQtbS==vTeuj+7DafNr}mqKx1=j4cu5{7NH=C~KTTh)_F{QChNz1|#aCMA#A` zw9Yi5Dt@xq@$KW?TzvmS2t|a``krYFJND-^swmuk(q#~z{Y0TVXBtA(ZC5w7MEGqK z?Xt<^U1e_R(um)9AWU=YC%n~SQmZe8s3n7UJq9=4Z zMoC5akqU3F?T2j5G06ICTpCmUFTOLwtwK7}#ZzN;-e%R@L#GP-(Z#K?GRL!V>s$4w z_a}|XO56UebsTwdVmY>nD*UQTCmEUQdWur&esMu)bW$&NaDF4EysYrW)#OYi5m@jn zD~!luM`7!6vk##*G6im3+ZUt{{#l7;AL) zt&GXCC7$bd@ss5DUnR*sH-|xYxyS|8#%se#Tr8?>Nl8XG>7PlpJcyHuxX8+q`*@Yy zuOd7T!^fPp)w`BLnCq{bbFH7LRgn%6%=I$CHtxPZI|noBuShV3UWD5VL353lAZy0}bS zTJsU^>roU=ERK{qmWx3jlDTv{VG%as;IlKavShe{J!y+CE#KyJY3(O%^7y^6rAzBL z8jAjfeoO=uj~TzXMz-P)gJ36@{(YSKp3g_YsToF%p3oEb%~t%R-*R&6tK<5mO|Ik4 zbf1TguWLCwEg{IBj$Sr-=b}xSZhhi z7;V}ZK2C0}^EA)%uH(e-#Qhylo<~~q#n_w4tp`Uk(wfIoDbbWLmxi-+?`f0!>34dT z2IrU7-`T&#!Xe8S7gQ{op7|wzS5$^oE*fz%j2HzAV17ECg`t=P%Fc)*(=f>FJ(F;o zr7XAkoq_H@=lpy^PI%nFSq8KF&UYaWLiZ@`7~A?;EoY3qMKK?7Uh%RnF8#0-C}Vna z1vgPC3~;S9gcm0X2uj7+!FAafYScSkwig>TEPw|KYIExdIExh&WRr7chf0@@2NxB9 zZ1SO%9Gt%Ce7u1}}K|HX_VUXxLI(g-fr)`nDz!Jch6f!HH> zX_NE8tMpcF^_$c3PP)7x`>XFpxTN+bobvp_>QY>56+RqG4rS=ClTFSwTq|8`x*l3# zLAJP7MaXpNh?0nKzp}|s6xfw+{lG`Rta$X~olkM=DA_xD>5WX-!2Li*)ON85VY2x|!)b`H>k5#Zq4#hp-JsEiOKRK)8 z;-rwY=7@T7Zd`iNX{xOGU=B)d-7$#=O&l$>2pc6oTw=#dH@Jk);?j6+K=-=1G?r?Q zx8&s1ah_OnD7kc8zFyx?z545TUb=ILjnn2YoR9Zso;t6Weox@l;~15_bU6O=pPVLNu%J?UrUm_k#{-OqmQSjeSXPh;g;bvE zyte^V#9u)v#LY-UcyR=Ri~>Ph^$Bud>NEg0SCmTlfJ7J(NCy4|U zSDyj!v{Peq3{H#0=lXI1k>$ZhzRl;+&uiF@`1=g@KG+S8K?8V7dc!G~yxq*DahcXA zD?G4v9^zWhW(hOj6p@@GAIk{BL+?mP<>f}`RjxF88J}tWCkty~h0)*mu6J z+}#a_B`%8BO)a?yZ633w&&XfXP8t`HORA;kxCqNmPrN6@B}z&ehO?rQUNUrUiSZ=# zEGrd52dKLj z79uEXKCzDRn{THVmk{As+2TbIL4-|`O-?WVN|%oE_PolPW89G*0+@qh-5nalTp>i_ zS#+>7WH|ayq1WAE0pMLOju2m?xV86Vn|!cWKhuXC3N(#IYuzdP=V1t^*3ac-!+7*j zm&w*#%W!k4+Ep4Zr_Xk|bXk0v5Dj-htnk%|*AR!umJXSe#KlC`9PcWl z3OAQ!`h6}vxj1vNskzlwTJxbmP|2kS<4M_=#!{m_DOI!^(k^h2aq_nFJASFZ^=?On~Q={m?;J{IirUofpv;+27N}Mn^41t8P4J=!}Bf=} zR5GFfY*rXf)J0RSmlZ}-gN^ntwiutn)|$(a-1_FlX?S&h=qNGi7mRY#SaQ%aaAHV#J8ot850~j0Wn-#~X^OkP?Fu+OLhU;-rXR|hUu@|mx5lKstE~C0qQKl5e)_X4BK}k??t!OkyH|IY-oDx=1F@tRdH(PIUghzsK9*C3qQVF@J@g9=DyhezB7mSXKOAGw&d0)drH%qN0a&( z8<&n({40$q!akHSMHJN`e+&eb>huneFd#BXIXa%Ha{GS$-cC8aG*cmcu!Hdv8+s>H zN|-_DK*fC6opYET&ARPuYhwP_qoGa);F~U~xQ$mk6KrE{t_Zi$=`Nz}!9W=NIc$&I zrGD!|tX_WlSmN#!gHZWxrovnm!>#U4oVYHDi;-r8)>OXPnj_})mM;CUl5V0&<+W=FGQN=ToEh+hR5v?;U>Nk4JLSDpiP0sPBI95SA>7Z-E{?rL4>5vNqCAi z1Hr!*qR@}H-Gc=rqqaRcmpQGuhhfaEF|ly7$?uQ!ySToOVK%vJqJgj8Ls+aval@r> z$nSE<-;&*H7b_Wa>x+FjY0c5#-qNi#&@mdP?x2>OhaxoHo4wROqyboQ>yJE~)JLOK zNk0I2vOEa}pIphU^I|!RGE*`WyNJM>00%koqHJq^a>O{f^~I6&wC1`o$*p}X&KS-> zT8u2Y^{``vx!q>yqxt4+O*eTTQ**9U^0eYOmsVU_4$U%2*?a6ns+;dBGJ2%=aGFuT z!8-ypuz-mxjqHSRe+>i>*n}VBcE&mW+uKo*t3gIQdOacX# zK7}w=ZbqR}jvm?5daz8zOl*yrMNfU*x+!8;acb=T9>t}3@7Knu z*{%2#w{AziG@zlrX}nH%1nB3SL%ExscUf^Zmn+?R$QLQCd9?pGEXg;xH0&c87$m4u zi#(*cM4G-%N{JViR@UF*X(XleS$H2#)(b~+>-$nSow>9xCPu0GU@)@ep-&A9z`Xw3UVuK zt*G+Jr7>^huJ2p>ptd}Yi1*IpmDh#C&vi?+RJms>yp9)L$Lr*16UVvMQJ}enI(vKa zET_(0Skh1Jg?>QHNE)x~ZiMj%GYZC7wedF?d^(}j{iQ|K&V(u{3{`Gq>4QE^mhKH@ z^Kvhz0&R+L8})~Xwog2ZtSq>F)T`4+nXLvsl2U~eAFzq{J=M*lC2|b%&}RYZ(f{%Aa>85r0-VBwv*WDDLUU_3_e{5%ye?nL)wi; zV{c1_ycmrmZQ^$#{ogT%z&2^SUy1Re87KD~b&%1CzSM<%_p-@33RLOV8i`6f*rBQY z=kJJP*-M0$F{k$7)!$w6Q{+saCwJlGl!K5v;U?b4;eCoP;HBhO>71QA|dDM>ujJCjT> zXa1FxB)r*Cu;DCk`s*|HVQj4DZIQr5I<87dkVh$72|mdESJv~s#_E)U);-blif6Z9 z3daDm%17M^5Et$dKS@;P61f0YG3{dA#lDMkOpzY6L$L!nV@Wo-W=dtcbhJgrQFi0_ zyDc4hsy$}A@o_${bm+w?vuQUzuIrUf%^6!|i-*hDo(_Go)2CtCk{j*~m`8)D+|SFB zKb%OK+&X5&-7h;3;E%^^Zr#x?T`vpn>uqkW`;--spK+G~d(g6L^Nw-B?Xpm1N!EZ_ zB}RtCnmFt(X3q)UTKGOqj(J-m*oLF2K1muE_Yu;9W(-1gvBT%$NI!;0nvG${NVn6Z z?%h0e0C+g0ZX>UNgMA62mVB)~$|h%)uXO1suJ5O8@>`=4PM02f4YxIqz8ue+xi>xK zJdsxXD;lowe~L^Z*$*V$TUt>p8Z}j005!BQJgu&U_0Z5C#&uf?^HiPwBpj(?R{_j-25KL#vfIa z2U;u1rMXV>Ra_eW)X%n`O|#cpfA7;eZ?%fdr7t>&Cb#zQfH#ePT(v**mp<`8zzNIl zg?U-UQ*(b@s6{ifUU|m|>wcS2z@0?hW9)xExn|})Z3H`4wKb%QK0?eeqghz|@AcC{ zI<|6TriV&TMuG6RK12yWEY*XiWPrZ86-F-7+^+M=BPH}X9gT<21Lhwy$@%czvBoL_ zC6XdVVugTQDgc#*lhA;+4=IyO7*i}BYQ8`{D!vdnzoE;?HWO51a?)YL0;UGsSf44& z8v`BS7>y1us^|ue|99W4IcGr?mp-|^TUzsY`B`W2)Li+tEJr0VxOT6y$u$s{>C({x zh&yGQ-+R!*TiiO%G0t_tXQ$3v=VP9_^Eb_{53a|TTpFGfF%l_mjrG1T03j~TX(Fw- zH2%knskt;(ht^eMyqSjqx{yK5w~RcsMpGY{yMuT)2V=986_2_(8u;ecjiUr* z%^$jwB$vjtmZxlTy3bU)bohzIXq;_wF3(-*)+b{Alr_IO?=QLZabH(nuPSV8Stxy!-JSm5+{mOP109LymXrkJ2YqZwCea{ezREhlr0Nov z`1#%ZYu5q!1FkMEyh-2a%*HfDf3kbKF%AWgM2t!v`V^w8IhzbmDW(ZZMRayVgl&9D zopciH3Njrwv4VAEvh=cNj;uMlpswPn<+g8oYP!Pbe#Eonf;UBsuwo9tPZp5@iZzRq zQ0S~=#1K5=!YWj_W@dNcMC^GgJZH()XJyj;Zm#B&_M*F>U|Bn6`fr;q@a9EQYH#oOr-dsM2WcI*?%3#bc%7%*QEtf7Ysek?-IPob`%UowphBLZd`ya1sHJp3ty*$K%g zd}?U`JJ%5w?76rwCyB)ccv{s=bCxy7D&FJGHO(_LCIZaTnJ%6h(L0W`$?@v7rCU21 zg{^sXTt#2Bjt3Jg@@#Afb#Zl~ya!wZ%0}$we1nw{yM|+nu36lA@T>9n=+Ba{w8E7mem-bECEP1@qKO47>D&pR_bl!YD z{##Ko-gMwen%71p*;kiTlKCU4q;gNp+2D)H_XYPnwEEK$4^=p#l3B#r3ZuMI<)T_8 zTx!q~N}Krme5LNcV=K%<4I=MEI}NpjRtQpHD5cs?(1*ugj>wCV;TQV+=ZPo?Hi8Qw z@)J^R<*O0bV-=IogMPv{P(`#$WiX4q_;8_&!Zx$#mVMh)vw#f(w#n)nE)e)lUof?+sI9#`3}&smY9!`v+jHDT23`jw|`JsF z>!~x=3H~=#1HqBC8(SZX&NMQFi__x-rG7Hm%uk`kd{4IijRwm0w{D=|s!m6@j)#lA z%+XOUDjBcearQ|e2VY{6QpRMy2(+5?W)LWhWhSK@QOd;gZ7jX8E_Ch08uq#0{9%p9 z-9B&L=|*mw91d<p#3=|FM>UTLJuK;33;JnA*mcRAgY%$Ce@x-U?WE!U+a* zan0*W5a1FT3(>`}K13`6`^aAR+ddp~)jTXEB*1LO<87Jn*cII=0=PH6N9WiRu%yS@ zzLDVJnha^3fSIvamqaNE!jpPkWh>#{ysy`_f$+cWKt5WYkxf3Mke`+S5gw)t&R!6a5GtoO1dzZzFZ(SD2Kf5N(tsO4rx87yd^mJ1+TN`=(^B(=h+v}fSRQ^q{`q4?q4~?}L|njnSw4eo1tqrS8kWRpS1ssY@fVmC$T*egxJ7%;6gM4LizZ5zSCN^@WZx>R>W>fWFt8^)af3k4%rdO>x1wKRs$ z*SabVD(Z%N*cdhjMpv3t*V5KBhM4f4X;eDEpQ1lj&%6=+d){!!O+(1Q;)YUOcFx9- zSI}uva7jv~8!*GCDPgMkW?kK9ON z$kUMVTS63(g<2Xi?lYgd_H}62LK3>aH2Q7s`|lz6|HUtN|BXZN+2J++JmfR~14BO7 z|Gpugf8W66^)YaH{l&oL_5bsM%ga^fYcO&fn`E7zRFW+M7lvwH3`SlmEE$deRa6QM zYOE{c7Q7qnU=pw9&pyBwx959oZ5%a#OsNKbD_U-SqW0@b&SeS@_n^*MC`jaGbZvGg=g~fF? zbm@?V27)^b#H=@hh%A!(qF4w?EJVRy_wIQpHwV6AaB>_B0QuDnu!$cK;5Lo|evEMe zu-?JTbKRr2ao08&l5nHp046v*dOkZK}iRNhhEE}e>?6n{N$%%Qs$FZ-Ma z^Ua=y?^DboW&@hV)no(ed*z=(Xb&-El3~N;FTZxf08G)e6O-az^+}|?Vik~@tI5l1 zD1~1X%b&+eoz4ong^0*;mNiG5s#QGoQh$)G`U?F$^pPB2T&9HmgIJ8m*8Jpi&WTLt zrr9fz+c53O@85AD&2ZY&kwFXPsA^8o9 zJ3b$uudYY;LfgLodEdpYb$-dMeLXT?om)TRp3lVPE0x@O$n`a?xcaw}TRUH+6<7X? zmbm5&BDYK~cq+&^eOQ%km|7wn-#7}(V*$07CcJU5mCiuuc9J1HQNxN+aMpp17-Q+3 zoC=l_X@*pnUy@}>bwGxaKHTWxap9*@k4QqtN+zLmQ&`R{I>wpPglNTQ=fo>v$;pzn ztnh=NI!P(>JY|I!Mx5)?Q0fYGzFKCE%MwmJ51XffrR0}-s3&7Op~6fqtx7a`YE`;; zWq!W6j_{#Z+H2#|-k*8?o_-%~!!A2y?+=Y4cMi=is^Zcy zt7_-g2;j4GX}sj^TsnpUUtAi2gSO+b#v1E)aceiCl1sa>l=s2+<%EAl)`+e--8gbX zhBYp0V>XJ}K3L1^eH6IFS{I7d2i|U6T`+FIH-og-TSfBr0?`8OP@1BS9_j}o|_cGpB-pp0+ zPXuVUV=|<-apwWB8JRt*;<&7uf{TU}8cbJN^Tz&?;?j<_Wh?HY!~EC#*su4s&-b|Z z``)-3A`V1UiRccDVh-~tY|W=u%)-5#rJZhW-RZRvA(dvQn+M&_J6s!f4h_eUW8>Bx zlR%TFj)(;dQ3@uO8&y1%=y1lGBV`AoU&L_Kk=!~0Qez+_t$6G^CW@L{Z|4EK@qvzg zoxiWEkI#HNUQDg_eScV$L?eicuh^20gM(}4*1pbZ%_FkNaTmANeF~R_fkl**PkkKb zd0hNH;;(S_CJOnVui+(HM)Zo#&q|g2%**+;C;qIkq<$HZi-(^ldLyL~#PTKyrDANQ zjGzu*&?m#gbOlxwSBx-Sn{|TE(+PPsus>HfaO#1#l01rJlQ#x4%=G5qhH@T}P5#sD zeYRxEh1lbURN-_ougxIJKaNpM>RUdVX@%*ynpCo3WdN_J()U06l~N=GLf2-J3BvWZ zzuS}l?Diz9AwL{^ettC%2jApk2%+ocJU@wIyznuTKv3#5f@o|eq{52AElmunvNX}7 z{rw~i_rwQ{+jtv47{Wa~4QE2D8xzW81f#?~(g?;gb0w6D5Ew@qL*(yFqe2at#_)Qj zUHdu2QO6U?xcdhtO6fCEG!!yL;^}1uItSast_E9kyevjdp$p_+x%&i(60l(epqM^IA?riFGx)Qe@T2&xz z@{2=znJz7tqO{2e#+(qy18a#X9WFgraclU)og25N4`uSyaURdcHysVk}nRrDkP8|V0F!e~bIDPjk-I`qx`TKc1tgn+>-~Yz(Via>b zKb*hX63L|z*|2ZcoX&a0t?4jVcH=cUeG zJ5X5)3K5^d3t@ZTAbz5v6UTigwwVQw^9cKikPOKx6hH&BCc6&HuO4|pd z@*k+oN0F|5iCN+MS!|=AR>>Y6o>vvWldHrDN-e&i$q1ep3pA99g|25B!5dK)4W%CV z<=7BL2Wa$?5K6gplM!SA_+Q)`f{UOyi_xBK`Xq_YfyV^f7nY&pr$|)FdndsBV^={; zNUP8Jd8lOn&JK-NFT=BS7EsJ<>r$ZjQ!m5ZM}MbBf9JcGAy#M-z~;lM3xL~y>Sag} zn?nmfji!D4uj*y^_Yb^&^c{Y-0e`g>KRO2BXSeOo8a_502!%IB$6J?Hwznbd2VbxV zr6N|FKZOpoIK?R7o#D@c&+X|T;j{DiOTqu+rQqkmy?Ec_+ml7yZcq9*##$Aol31#3 zZC02o<|d^)`Nkk4s9YlGJi`o;hcLnkArh5un^va2hmXD*wQA&I1o*6YyGl{ z=wR#T(GlHcj5N@MPwhmjVU3xP>gOgdox?n>evWQM^l`yb{qoLY$Zx{+JoX}J#a-8x zh_&Aq)&kkDOllo;a-W1w5f0b~irRrCST082wH1FfrTxO3d?_c2TI$Y)XJy3ZYvE28 zqmwsd50*7&wEhO~ySud0lUp~$Jj_Fk7Vo{C%4Wf%aEwRF+}iuGP0rurpf9J!^Ho0{ z#<5xQ_Q(rV+`3^UpL?_B7rYINTVI%3RaO%ZA1;Rt9z`x}-_mW1b8WUtr{>JSvc)mx zyrq}EUl!BG;=Iq5+!}rs&-1e6%m-z~;}!DO$g<+N@_HdWcp!2(UE@{o<+F=z` zaqFma+Ot{nXa(OJmtJ&{PrLJVz0;vjUhhROgG&G8)|1aia%)cJ^Zmyw^~3lvaQRJJ zJo4q9PTesaQnonq<(6K$Z@;VkjSF*ylc#2kv*OZG;lbxj+}h<`u2p(rNa!>Fn`4dA zV=E_9^Z8MEueu=2{v$3#^vzoo$oqq-c_~JURCvb zXYXJ5s3JaU4%H{x>#I#+_G(l7s#-AW*2;cXEwP6`RV~T?i>em?-n&-)tZet6N9gvb zv$1Aq)ZuKcuG!KSZ^$drqFkCY10BtzwTfGxv3g)bTOp>p#k<nx=}Z^5)|Ez&z(G&7bshtc`WF9Z|T-QS0JW2q&1J@8|c==o%Qd=6+KpQ z>liwW<4A6O;*KS^_HmnA`}ll*nd2sl9dm167w0_ZDCfA3y7_mV{a1DSyG?|pw_a^8 z7ju6u?tazTzv^;n*Zu$EI{mNP9G`6z{av0<`+u}8eSOS7+LWJlc(wsP>i*9*!LPQ% zN894F&GFeb`PFv0KiV|bKF+^tEBwFO8t=Br|JAlc@{hJN@Avb+_Fdqg)kgZ`JJRdj zX@95M8V=cD&~f}5ZB*7Ds!vqzVvfjkKX|;9{j?xt3{_7mP3pqm*$|%W{}PnaqRciY zUJqj4?A`3gc`{(U)5@&ni13C|T!qJ`;Lp>)rAht#t$uGmvIp~q;;V38Suo?=&06fO zODJ`*w?YO}U*^Z33!ZFqMCTxv08$vA$!Pz{tz$T9US*SirdxA8J}g-jgYnU?g&8@_ zA<3=Ln|BnCK|0Kg*55Vuho*MAd1{vE$*pxolW$j87iILkHrIZMtQIF82}&s^2`ZN{ z&ke4TG3W}6<37^}a?ZNpnO(N`k%mw?UQkMpNYoS)HO55KJJt@K@wCaBW7cgpI`&qOd@V%68+uztcNkeHNBSkWJp$2G4ZsSWvrfcH?cl(;G|Pb(SrD zpDhl$TyXZMVY2fry~l7e~3!Q5?_wc6ml$}ZG}DComm6$=TUhEnjJ znF*=lH8>s>QOj^jiziJ#qCIHuf>MjEE*}mRBF3CMjF%U#|6)iL<5frfIh9T-zS8gf z1^phO6)&^DDK*f;Af+2JnO6*@_)RPx&-c%r)TQhP%ylEiU z=(5Eu=cg5x99XwVRO;qpNrF;0BlX3MEOgyOJPs{$$a+gQxev?f)(aV~tT_+6_P=;L zyuY;KHyyK*TjOcDHoNi9^n;@l_3a^>Qo=2@m47Eps{HM##|;r(0hr56f;m z-jw$A#$NcTH+a~cBi_uG-Z`mZ>dg?@#@SHWPGyNp9o|G2H&nX8D)LkuBG%>h)a6si zd=p1}$qi(}#JXn%2V4F%R{UVVw&c=qv`UjS9K&WNQr#T1mNAsSjnb%ejxrm( zUTM)m&1-{^|D~RSrFF5!Zp|02I%dMfbDDa=8S~8_J+D{U{9X*YuZ>H?k(I6=UfOpY z=e8en|DC_@bbcTC9nbB_cJ8hA?!(@QwC4BmPPe|U4{JU&kJDBhOA)u?*1o>cbkI8# zudA+K@{jAATpA9fPjPGK;^fZNnwo1JWluc+2OA>ArTzVfy?A;3^16xd*KyZ*orZb= zaGHK(dp@}Vr5bXsA(b9{7Z?Y+6J2h|5MqW`Gn5*1p|lYk^1CG*ny$`yz%(1gvU-_@ zcpAKNG#iZUS83>g$FbNHjHxe`7XGQcNX#mUu3ic8ehU{BekO@$*8H4^Wwfen@?CZA z$fsMmPIu>jV6p7N?N#u-OT#KjKT6i9CtoG5HJ3neG1&HE@LgcOOVM{h8!fnaJkVVc zH+!dT(%5Bm|%M_xQ1?VFD%I?}Hy8ncKY|6Rn0 ze-<&HnG2cjvmzZ^MY>n0BX38u<5%a<+OPd5=WBGOOZ)f^b_74_(?4_@gj4&nn5X9D zi304v#S1gWtZ&rLg+v2Hr>G%b>_}MDIDIZ}V zp))cATukEx;wepTeX$G9JT*NYi(B(T;FK0SwVOJ>8z$Ur99>cG@2A%OqRN2v^@#4Q zxZmd1+Fx>O|9)NvJx9J??}n3~^1o}E|I(T!GrMkzZ>kEBEM(L!^Yg@~D~24d{YiJp zrX6Qf`rew{!xe@buq?-KMiKd=iJswb=)L)J<3uU;B<>IuK!nBLU?>LF+aWt&TK&A# z#A}Zs73TVOL#avEbU~@6s3eF0iJ;M)77>A;;?glgBf|d`zcOOvoU?f9J)RJAv~2tr7LGjwiLQN7Ez} zbh5XW`zvccFlVJWb-axayhYR2_a)T{fsOEd&qQb`1;zLH9&KaeP;p0A{mlgm~Zr;d)O zSvz^@IrGo+8rLnPxtT}oIMse%U>*DJTAK|&*CqY5h^nlF>qsw3i6s(h$C90{CZ>|SFS!H0 z*|2+_kAj{P^fOP68z97hLwnE1#&9TF2Gi7ct%V_J{FTU%D8J^%bb#$(0l;wc`U62J?K;Zwc>Q}&p6J(Q3UDXw4nE}5??iwkIA^~un8<##5AsjLA5yKWU z07d9&V*=)~k(uJ$z9(xQ87j`ZxHVGq?UuZ2#yoTDjv=#EHo2yp$>q|6w_n`jf0dwhi(?w>Y{W~Naa%`n)1P#pJqWStw+$?;1;8q z9LqRFax)gKVDGsWLn&>Kzr(2O${)}OUM!%7RGLu6Mv&t`hEjt=t2a)UocAu?BxL~m zYnjy8*J8*mY!%_pT^M0&eQcE^6gO*_J2BDfKAH3=#@!=gH+uWVReaZ&I?LRe&zs`X zuG-A4vnuQG5X{gK(Tc$v!NZB{U$(QVWHKjm>v43w z`PiB-G#HCp^YWK9=R>-<^yl#==XvRv6K3g+Od9SB=GHz=^X<6TN0oinqcLwl-=3_g z{HRuwf=}~kibPA`#Gc5ko-L9|kAU$QN}a4tWen*@;bl}8>sJ{=jzD^u)Q#6~l)i)Q z6U3II9o4I;ReRmDjrF6vgFV|=+kx?$XaT`lD|XkAN}CNIv=dX*#f#d_Q5zY-lde&Q zR0t_*j|RVGc8^EzUs`i{TNRh? z^m9+!_#pUWJ?43AaVj3%>X9voem}bvk9XGRE^dwKBhSr>cXpa4x5hM+YqRF`53l2r zMg#qR^KsYt%KheXgsbv)IFhLLHcAZYsszAA$e_9921zwb9|wei5FzNpdp`P+pKu!+)&A_BX^FHXVZ#DF1~daw~h;U z%+2b2e6Ghl&yRn9;B?~cr|sN&asQHApLAJCZhgr`=H{b0TIHC4gf&80^P8@t$)$6@ zWRr8h;6kcS4LYrJ;;pjgT~To6)>Exv+l}}8y}Z+DerkM#cH@1%m*cp3Jb6R7yr`Tc zx1MZ%B~Q(1cdCMr_Klf0oNrX#kgo1jZK)dZlTc5|Lwy0RS5?=j?x~{eqRVuluG>|c z>+aOEOOLk$2ez2K?&K^>;Zl9yX$X;XD4`Sr5QdE)l6xt0(Xc|=d5js4hp%RcjKH*9 zW3%E&WwVM~qiJw$Ry_Qr;^AvLn%&7Whgb!DX>GjYmO(OR7Vfb!<=I}&GC+Q_B4Xa${vB+vU^u3S`R($G1e3P z7|}I2nNhB+_>gOZx%J@0U1iOc!zH!@)eG$yS$rk`5Ht-b%Y$?uQl)|2Zy z@+^+CZ(k!W&9D31=|>0FWk`jRa=uFcxfP%2Si0%tf3xDU5#)=UAr)@jH2%tide%^? zvvn}ldx-L{(BFBMHSg?_!!4jhuh3oNg~_G$er4+&lef63G^)Vmj&Qr9=~UPMd&I+Mb}4_N+<{ zOGLEK1}3FNL3UYxR~)PrbYEgS$k!JoEbbr19E34kSa89`KwrX`P#TSRS%TX$7_WyRw{-MzSV^j3|rS@Szz5y+)GTR~})55^1U za_h+^dRp@nWvI9{BT9BV)M-669?z&W4%ooUzpaf+Muk*es0UHqsgpU`(7Lo*xPbxO*amFvSVi8J@n9frmT58n1IUM zI{H&EoGhDMuUNU9`r%ySJeq@UPzQ@wG+oPz$60!g;?_tpe3mtj2KlvdX>{X^mbQ4~ z;pcMcQw?}qpQh7icRSl~@#JaI;axnsoAY7_S}_-}pp;KjofjSN$>(iyYt6}C`>Fl$ zaooyDpg~~fl(@ed7QF7j^;L<%0pKwd6yg8 z!1uMjOx7D6JttqA zP+pTu=Y2Z=EXRvs10%XsWAr;7Lq4y`rM*6LYi~cVgRje_VFjM2ygzgvIRQu%z;N{a z`tE7OuCH&7qG4thNiH*_YB4*^lZM|wE?W|O{`tjy>My`|%m!m35wpsiPa46W9sZ7) zIYcdgw(>o1?F&ZqbWHji0Fh<_{2V2b9uXmkE-aOEWywe+flEw$axGNV;7Zh(bLmn$mwh1US}wZ<)GbE?ac1zXgz z#YIFYhivkAzV~gpHQz?kM%f5E97ZIY{A8BCTrNEwhV;pAKDTnYG$IU+vgRjyqLW)A z^U3wH;1}=fxNm096UUQcSn7TZrJ~V&CX|XcS&Y7iGvK60DQ19(rZe7;WzD0ldMnS? zy-Is|a_Pkc>r8)tV0Z|15fU_x;;Gl0r#@KsCYO#9sW~FRt-aki*Y{of^~tUMyF=4{ zpup2HkZl`V@u*CcmyORbX-w&LZdTmq*W6m?*Vh()_whcBw$-&+5A}AoDb1ysC#$D@ z@p-?O&pMu5uea~A<}#o6(4%QyJS4c-razYQbZy-FxHfLhbf(3vA3oFb_g;TjUNKwq z16{_&shJP#Ok13zg|%GzrXx*qYrN5J-?zrw(Z;P2*KuuJ`cf8|SrjPCWsT+GflUsK-1pND4|H8>FYpzr>$*m6@Oj+@R?v2T% zqhBRXwz)N3%ASo+egF924k|k78fY$!N@biIr)KcY*!ZD~aq;ZSCWq%U8xl7{=Hith zatO6Ff(pekeAE|BM_rnWv1uoR0%QbZgFTl?;dT155kx%8NJxd_yZv+Rgf^?h(_t{5 zJ9m)K%5hPQzSQx_??jL)Gc?)&9`wT%q-yN-kuki!IAt`KN$E{a`>B0l7o&}Wa3%*~ z)%_^N&^;MJO;Ld)j&NH;x+0z>8Np~nM*y`TmCrm^wlrwCn4*S8aItGuQ-VlonIYB1 zI8j|jU3a+9u7p$3+%y>CsE6r4gxZ! z;fkmTL*&ThXdq8;u4r5Dw*IErz5xeOQ^^Qu!Aq+sB|MCd+Bju6ag17nB$8r1MJct1 z2+l&6`I)bD%k4_Oyt4=N*9pB+pA{+HK+M*2;Vc8~Tmv}9fZj~UAu4KiVoIWan zAjg3*t8aH0;_;P9hS03&FU?opx$#G1p#zsIxirqocs73OamMU8#ib8+F_@>0mj4{Z zcRkPieV$d!7<&}Aesm3!Q+qq)t*&NXCGnSDb=7{>7nRavzJgL=m^8;QVsQ_K6bMqmJTLg+R|dxht=i)s z_~-NzG^9e`$}*HvE$13n^)D;QI^FwezP4g}RPjcSjc`^Q^K^})szw#HA0d2pG!8jz z54U^xsf}T0B+!ih`IBXPGfc(WIonY*&!tYjOzaR|LyN&5VFY6>bociMzq* z^yaDst+*5W5BPId<_Xyau#SXM%-{Q*Oc3uAb0UYM%!~3O^vep}8L@_?Iebda(3)pCqb_e3%$JMEvsFB`(r}qe>o|>l*gPg(1zn+&DeZmFzi;-c9eN%p zg4(7{gsE|oLik|_(mUGAN^RzPePw254urO1cW*vT5J!#r7>3Y_dnSk=E4WoULTpSc zt;MNM8F{mKA#DU1M{IaHk{GL|F&wBjyiAJQYv@|Qguom$jhg65D;y8#)bHQUVG<6xh*|s#b zR8bJFqQOfZgWL!5(}tgr=7X^j92j>tlw!tT8$uO#K`HGtUan82Y(Qi0X37uq)QY`L zEVP?HIK#xy4|OS5v6mvxb(F!Kw9zWKf-ITxOKDN$>x6o&c3YT(s@Q? z^Lr29T9RAy%&FeYnwG^^&lEpl+Ww%i;0}5>9c;J?Qguc8D=~uL z$=P4DOlrKKRAckkc?YNt?jW67QF>48EB}&QIDI7i+zz#AV8n(Vwp=8&ux%ScZB$T7 zJA~{fh*ybaTh59wgmKh*Z<(nyYle;BL;@2-DYh+TqQ{VlvbUcL>RO(xMqSl4I;S@~ zt~)6A=X!b>)y=fZGX4s)(b>i zV{0D68|x}=t>KQc=8e5p;R1B4{eU6GiN~qqj>L7S&7n*aa%rDOb8C!hJbB)t;mwFweyiwTzFe9s)7AC0X3T-0 z)rIaR!%H2CycnW+ZG5ewnpt|@F1CeG&Dol-rQzL;pZ#@BXp6tDiFLTmg}a-%HQck7 z;-6b>=c0Raa_ig6#iM4N+wUS707AIWoJ0G?Q|os~Kz!ADk*IiVRyU&WR`nhpy_f^Wa zAvYW4Xh~~+%N5;Rx;r}7(WvHw3DI-8^^NwVj~n5R&S`^(kgR#ME-psFMgr^7UT!Xp zbakz^t4w9la+*lbYis^+f09d2Wkw8$|<; z7hEm&RSx>)pn{SWMz*=4lFNNc2)WH%9&0Q^sl~Bg8Ntcf7zL#UqrYXQCv5zhF)XRb zaH=qU?k3=nS7>ywFkEb*krqv*qpUg7wsnMWuDMEkd2;E9z*4p^k8S6iR+ww(*|_v|vF|&%b#&}r z#Z&8elKc3y-@Z5F-reuv-A;PzU_RUA(z(B~$+f?_cUAjbtT0R^Z_X%dnsQ(w*1Y|# zRXym(UNg(4?|D{|ihg5Vn~Qj(Z}*vQUT3pYrT|8hem|QP{;4^>M=vb>b6P{nn1*Y5 zLW)R=@pIq9MU&~hFqjqZePC9w_)ff)DMLuShaFSQ3RcNQqep}-E(XqE4(+t&4hl4v zKJLw#ZEXCk00U22*>5?cotrgpn={*)x;dao+?oL`&t}CVg1v9t`qorCkCRJZ zd|;v9s>`t)US~}GmDb$9H@Ak*#8Ec69*Do^|NrUve;DH$#%YVLJME4&pGq!9w8z1y zDBGRS=e>M7%>?dc7{+>FzPMvI^I_(WW+)ZrdUi9}o6eciH0xZbF!#9|_8*P@B$Rp( zShtzZfu(*KO5Jpil`-TGyiAI}+f09aE(N7@`uiMZ2S*(derCJ#+1|^c>8V|IF=6dZAD*!z52Oo2Ucj*?qPFF3*; zZN)piEt6YEH}KOpD;{wM{V8re^!wcg_xU!r)^%cs>Y}qElJW5`2_|0<;pfh@1^7#X zfru}(OsB+zBbpHfCK=OTWXjQE8#27989|(Ag7PnBkcD67q{Ef0d294VPHqjqboP-) zO&!l+Mm-$*D})!aVMY<&T}aA{w?X{~fpW>H217s$sp6W22f83txFBC=!BS5t`INDf zdZUZmU9TT%<{o6&F4(=&Tw9*F#S@cUT2syyFMW>JPMx`LUa2k{FV(=fb)FiYHL*PJ zIIRe((UsAOC$qpw@};aIaDQBK?WvCBr*cAl)tEN26YwL;JODqkfCKR3cf8sY@Z&dz z7Df2^o0E6wOZXh7y!D$LyqQ?+e%mSczd1K37>)j#I<#$FW&)M~a$f1x9uE);KV`V*2q=cH!F^)r&ioL>Z<41toUNqkL1?TOAz~)R{Yd)n_Hhc z{@o(zK1mMII$9zajSx?*oPpNi9C0hS_S(3$zkjas=Z0VU zgI-`;b4(=Hj^x&eH9;;A+JO2W9noitr54zy9NiAkfPeZkH;?tyTz@;uItS; zr}2o!Lvrb`$h@`j$)qeXC{|p$F`L~)PR&u<&HWO$*8WGagU+7&U1lXyt9HsYZOlS~;-NuyKyQJD#td9>Aehxo6%n}77hS>x$AP|eFv@2v1 z+@U7J2acXGWE2+z^oc0A3q};$lfC-6?|K|0m-b^pA&Cf8pNtKknn#JYZH}O`xOF6I zga?_exkH`It(#m7ZOsq143kqod}0_&K1wJqLwIvOY(Xg`zC6+hwhW*+4l7Jn^-~bo z)?>6b@&-&BLH$fn>f$8bGKO5Giy>N@c!O{q=sFVdr}b>jXRqp3H$2`gj;m!S7^3-c zh0n6)c;JtXOJ@UPde(Qu>ce49W@FqwnnX}u1SSDDY8x{6nHpIzOoc}5iAK1WP#}Xq z8nOpX_G(_$&aOA5Tjado4YV6(wHIB?NV4X;**5cxA?GJ@ab9>l4!n(}*=V#M@C>jT z;T_%*T1AW8Mld`z@#qz#!U?c3TyZMAh=LArHe_(`t)2Hy<9ru=81RXn$rt6Jtd`XB zzyt|JDI?Ebyk;3&BNbzG7R_q*4edt^x0p-M#?WhX>)9C+mRuU~z!)_%r^bvak#9M< zG;+Mu_fvPCl;pea_4_=o$lv&ETslSz(X93Mq`e*Rc*}+l=dqn9@m)W3@Q7x+&tokY zPtEmprJTj19hvH)m!zz@%XadtJ=j}QmYnJMYq@onep_?h4Je8#xG^J)CZRbj2GY%& zQE;keF^Q-en|~`2=0Kx~m1ui4Fq3D4Q!feT(s1>U7Z`JCWF|mFi@3DUU~!%4lNmeA zt)pSO@6Stjx#3`tj^EGqiKq6J^_B9K412rQWOaJMi&q4n>3mDV&zhkGV!&8{jkqTCaIq8PlhB+`Yg^Tp;Z6!Y$Hd0 z1;LUDrEb3J*a$M@(va#>$C3Jo**I8i9MA~rXM$1}(=x~yssq}O@%^&i_tr+(iud-o z(DNm4H&&lny@u_asPBmhelQvqIi>iQ1dg*J{7jE(&ai@(LKMjDcScJgreG8o0w?*` z%aItyjN(Sm3;zmXwwo&%1SX$3%b)^z|F*F;bm)wmtQb$n!*An!iUIYd?>;iveiCP>;bnSyxHw7D0Q<*WkYzeBV15Q zRYg}fG;1GrdCLguXM$Gj1efueRr}x$Rvbml49*IJSodw-Exh4;qp5g*yu!rW{zM4W z&9I`@H`~}E=9m0cvYWlkgc9*2KK0kAIaqd{7Mgqze~pykh)X1nFJ^e9XBy^ri)Sj* zpRcm!@O6Cjyk4ahH({O{jp13=d@9?kxph~@En9QEaa_f%F=gmkRy;aioCyj^&!u4} z{UxJ=3p4pH_P--bqHXdUojbK$dS74IoudbV7qBieZ}Q~U-VbwYZ?7|J%ul`Z&45s( z^rR8|skH4)j%2@w^li*a;b9bJIg$^&%3|BUx$T0I`!0X zU^cERnFJ=%F_Vx#9T^2@QxTJBN}EJR(d1l5M$wRh!Hl9E^dKXn2qS0DXb~JN##xKl znnw$vKU*y$t?DHlg3gsYuEV%8uU2Ca5W>#{6{^Jp5mb%pX6t=t-w>V(eo7>l)Kz~^xNnv z{2pKWLp_j$>YMJ7NX5jLD;ct(>=#H8E~m5i*9Zr_><#5}zt|F%5oCG5xb)44bb4pX zv(h&CDR(lu6Q=I$V@Ym389|-a{KU{2xqJ4E2P1EvioPs&en-U8g z%u9dVn-xcx%EqmgY+gn*8f;8@18nI%modeG(Bj2&Fo6a zrG4Sd>q7DZU)NskIHEfsGd{jRJxb>la z1zYictKUJ~x=-~xn9u58aKFN_eXpJRonPmrn;aa|njh+CFqb}90SylJEw&jR4(Q1U z`lq6~rsGhjgKY9#^K)*`Ww;UGg+?Yu=OS{KM)0J^n4r|f6bdqi1B1z4Ms>62TE_4| zEV!3RG1lV7j3hS_HAatB{soCg-l@MN7c)H(NyKz2OMivXhcm<^W^{=8uTW>x4G5pd z%|}BJevZHO2kjT6@A*3Y5u=d$OQQayFHZ9V51klHy#-8L-vjnP1vYF9cNiNw+`!I#T`{1g=i~y<_=P~Of2WJHnRU1&i-|wC#k?w|L zab#_8XExFW)Kjz?rYmgn)8=MJ4X0g>v)xIBDxg-Lgrw!yw{Aj1|hshfa>y z)<14O=sJ}YTR85i7dGmagMh*{Ttsfv$39$CF?d}2D91VH)d})VUi6=8`f}wqG3)U7 zZ>uxAZcL0{iJqhL2IIeV8Jh*ry?t5Vqn%x8!b4B|*YV*@rtee6OjBjdtc#s)iL&(m zf2K2Ql#ir9h}zLq*W*T5!-*sOBptQ7@&}X~GP9Opd{w%RgkhZ)Ylqh+Bu1o0c^sN@ zaB~K6?PbQoQ;z6F>$5GhR}!YH1s`Tt*`0ct&(RM^9%*u)W&MgF;MeT3sIVIzH^MEl z@Z4?*5uK~Y3LTW)m0}^_-0MUc;@+$yYD!r979nxx=n|C*gPI#mn_o6(XvZlsAEjT)pv_L^Kf1{< z(Hc6k6H$LPqaQq`)!;Xx!M*<8{EA3xz0pO)HiKY6u2o!zc4jq5!}6zk#3!fv|i0mY6L-ukIwkhp(5H^gPhET-VZ zj9BRbGfrZaSt4^jNY-D&;4f9Jx&q#mV{QF6AKUWTKet-FQCVaDYEQg-yo3&o#j&`E$V}mNIOY5rDnU z^`S!7##FW&6x&ui>U%tOu)|u(+E^TQ597@jqNfE&y@CAi^56HA#S;2&VFsxgi5A`; zeN_mDjZcxSV6+asYwdGkeY>|QY(EwGUBn4z2RQo8L#Fc>JaaeI8m z(r)c;(#3m|ipa{h7kykqdyFjoQms-UoS!59+TD?(4HU|yjyB|G_`bf=RU=~mA<*;s z?70QwfSom1I&JPXq862D7QimTjH>)`HJ{j4wD9S`Lsu1U%MNxI&~oP#=tQK84T&S502;m($kkAr!3nLlUvvC|Br56 zU$?5f>xj14;_E~#@46~~LtENK7cz(=L=CWU_!~@E1a#egOu8!ZJzSe8IxZ2~(3i{o z>X*7Vk}nTRG^A+i>n^ms<8yx`cyZ_FzsGo-xl7@{EQ_>(a)!hr>V7?jujC=$rXD-iS_c&DBo5|OD_%%}alr$dob$X&3_vYkBEYUOW{ zyi%yp-S`hkEZG~<`;z)`QQo&Dt%6_Y8@m57_uup7JF@8)69hQPxyw@uKDWImnQ*Yb zonRKk6Jhv$O)b-B8uLJg;R;kq!C`c1RP5oe?MBWlKdmwrFir&7nWpqCkkt+LLaNcbIF$FP1EcyP+Zp!GyXWp&fSaI@5Oi%};(bj2tV_O|r`uze%&cw#`J3)3^(67*nNp2*-v=ah0puH zGy-GHoufIo<#7(wFpS}c5jZjVT9V9E65*0>?zC^Zo1tcTyctdPb1Uw(S>=nCop2{v z1Ea39AmjF#2Y0E}55;mGW9zdoLbq9HyW1r_{(~O4@>^SW+}PT*eZIm_48fdmH@^A& zC+j&76Omhamj0FuG%EklLH+Lbue`_I_lVA`M|6!LK{4=McUj*hq+==$SXWPY2Z8F!e~v)pb<@%V|X zO(Lf+1;0B7+|O^GKZY0KeOc7Y=U{wNGC~6Mw!NEFKKPU)ed`Wtb1?QifFbHG6eeLP zpT;}%#CS;!K%M=$)l=9NjO!*x9~_RSo)biyN8XT_xP|wjM!Qr{Gh#jy z+w+n5Y9GB1+U*1^Q(`08gN1CV2?d&qE3b_P;k?;J)o5MAw2Fs7Pb#T`D9!@YSa9`= zSK=lR&>M_^HaxiLG%va$~FhRe@NGBo3^Y50CVBKQAOXnRy#I|gOwt+oY2ld zl6=vum_P+3ME;O-@TATxse7G4To8mMA*NqE83NGirQH*c~scTq@E>J^{B)i=BR z!_i}_LQL>zYST0%_5g@AqO6#U=_++MrtrAM3_YCOaHSySgzFy%CkyC6&571g7>o~% z=hX!CBUc|yES0)W?Y+k34E*Ng-+(1g#^tWz-PO#%((HWA05R`e^HPnKPoMG&1x3)xb`UCF!^Biwp&eV05 zT)mCNKNk^zAJN%>!v9){ShtfWy4nU{+k|l205w@$pw$y|9Ot|C9pFI(RbExBdJ`m3 zE&Oz;*P!j#yoh3v+Vvw6F;qkJrz+~!Vz_~JyD4vKlS($D!;X0&0n@>`Us zVoMR4oK6%2Ou~-GJc7@=nSa-?Npx4_t|)m=zBnFv`*)Y6l9uEdq~hXNOs(5p)qZn^ z)2BBD6S-3od2XlnDIR>!KHyoCEfTJghW0Nor7ZLJ{bsTJbc?9*mXhFB2d}{ZQi&^iiMYmg*OapLwbU! z?x{(R)Bk>H$EmtGsd{@)iuS%!&$GOnQ?9uY-o|5Y!~N_*OW#Cv|E5#lJQ{XHH)i?L zzL|Li6Jup|_XctJlqASPrRWc^S8DrjV-wNxq^rx`0QFs$zvIWN$U7dTIxYWi$=?{L zE~)TGaKoNeunD@XR_b)0uT+?AAzH_AIv0GjYegV?pr=jF-TPEyiiiU3w!yUtlHp zLLx~iBWFJTRqj8*gm!*mq$<0&M`Qp^he|BT;~$?5QfD5yP?$crOSFYLLH>593A~EC zR^kwTqoSu~4^`t7-};e1gK4*blIS=uezZlaW4 zpQ>Yz)t5%`)fed=B&e?NGX?OcQte(YhY2=~)*E{;rujRkwIz%AJD@m0^hhq1sn?yO z-!rb4``nNruU{^~|49$iiVm%qTB;k&Lrz*mu;3qwQg`Jnq2Q*an#67gFRM*n)l+pJ z5@_x~bLtg6@Ow;tIJVG zs>k4WhnYEjt(lF9>;O0N^bM7p^I)gzen#3NB~uvzpw~VZ1(Gh&CZc6q@?L^guEy3T z9aRAJta$-BfLKd^9C}+I3ScHmY!>Q*_9}HT{OLPjZFo1HsJ_Pb8LnV|ZNWF(1*Uj? zo8?sw@PZrRU5qJl(>-fLA}U=tPQ5Igy7^BD`xS~OQ;;S$(%{HlEKaT`%zr&eCxy3B zi9GhZ?sAyEqp;f_;YTSrL1&16c!H&&AB5#=e_mU#cp>p_cZzd5_b;QpJH3UE=?&}_ zF62Mr^n4=9baZg-e?S`r&Kq$Mco(!g&r4m+FCGS#(o7bz34$i*q&89M{bZvuegG@< zo~q>I)qL(l`9t@9S-eSt^G}6{<`38_Zz921cMZwrj3A_XfkZ;wmi78u=mVC@=z zWIJyI7}-W&&Km%wY}i+MgIrUGHE1qsp^?`zu*VFn1^1U@4`j>5A$!AUq`4MXegBrA zIQ$zgvDAOBS zDgalOZ)GQcZS#GvdwkR6qQw==;wWUX3SxoExwU)&JA`2}?u~G7o(p+|ev*3^3zaDz z$LqiszJJbq8%q7u#N~QtJ>z9pyfyQ!k0w1x2x>u;OW#!F=@I!kyP^=sW3<>aSh3M$6cyJ|EL z+c&3gpaU?o)^b~S{|Wyb=w?y`5U+!=w;~M|UM}2RGFuw}LKp*>b5)eq!Jq6WRB{7; zXl6^Dc4e5CJfp7k%f4T!mgCVY|KoFT2Xu`aQuLa;Jx@S#oSR2BJ!md%44xVXI)^)}+&!kay;0Nn3RYo4aW z=s*+|Kioy{Hac{B9Go$KvCerQeK=*lSOR(3QXLjEQixHvS!}J3RkyKd-}9+E-@X^4 z=l`6<5#!RsVtAF&19zjiuSS<5Q;MJ;TW2zxXBDER_5a!A0-HXGVZVY+<41keBtgCI zh0!vyUf7PX&Hle3pSzOpWy&PBh@;-r#CrcLEq##s;YUY)+n6cy_Qu3t(FPCDsWO8v z5Hi36?=)-_FqSoXdr|od5T1TlQ^qx2YtZ6ZpyJF$(uF+&kV}UbA(xMyIXL;sUk9SG z2Yju0yKzQfa-3Az>=X+PPPP8&>S`5ie5NV(`RfbvXLDEAaZOP+3T$-$fPEs1b_vzf z0KTTo&n^#FtrFYPKA4%zsg!Gi=O&)}M*}kzsa*B@X+eh@g{8bmQ@$2zTY}YqhlzS; zVY<(2Sbp&rNai)HX_~o@sy(M}m#WN58`t;Cp^b=#RuunE)q90`?BEtN=vfLjg_=Vx zX4`=x1hWL;#Zgi4us|SrdZbYqYl12-D(nEVDjuu8n(PNp(9h4e1s(@SS?s~}8^8N- zFYqhu3Nuh_)Lf^bN8Er7HB!ws|(9;rG3o6(k*PzM2mRT)Atp5ccsf$DV zvSdeY2W$S5%g9=P8Z6?BQ*&Y%G_bQcA0QBAZ0zA(&YHeY+?wZ_8s#wf&l!M@qJ&IO z{8~31Ja$%sT&nxG9$5~;aYuF($&}{T@pJk4+n=?BO=NNrn?sxweaow9`xGnZAkKv> zYM@17R#$NF4{U+UXcbuF)ES&G3Wzo{9u{WwTS*YS0ScHqYxz3zEv_+-IoR9bjrQKj zKBUDms_q{w;Xu~d*JL^PZ~UXAaCME(w;T3kr6u2aM~UEN;6T$8$A27Gyk$?FP`JUr zMPs;7K2Hnx`yM(LixnGeQR^Z0X|w64$bAjhfWv_oK+4;gL5xw@%eP9!$^04i}lIDjJv-ys>kZ0}~zR2&Pl#nQaQ2#KpnC zXG~$U8rSix%tr?9u0a_9Hh7ujk<~=!K{hbi6@+0UrR{Bf3u1_Q_&sYrTcR=(E^^x! zP)`rdZK8@!Y&^~@5JqK3^FJYT+SCt3AiP(Z|CCI$e%Z9s|IaWG#HtHaHD9ET6!w&0 z*Q?Y#oMuXs2bga?_TcFS^OeGt57o zppLq$3FsAjF8@Ug0z;ae46gFQ#aVQD1#^ro9o6;Ge301t| z6OHbrKE=0FSGiP!57Zb~@S#AW`=p~uEzs%&iO5Vx)(L6{=b@?^y>g8_cHUdk6pSS- z8oP>K49=UZ13>tJ{%)xY7L;T%4f<_v0J=YI{@O4I_-Utkz0knc#gHeHNRNVZAG49; zOMjVay3OZhji>54StBAFvr0iIeeKss`BD;H>Yf`?+&iVfM;2VxFLS_@*2f(>Xa&9) z95-9R=L816g0Yc2uLYksj=s*vQ(!DK9Ho^}e{yRZW4f=!UP%Ap>!laHweoz9$97oK z85%jH0W4sId0XyGD%eC7-d^eVbh9Lf#N=5)17o`T_x|Gb*2vnEvZQ6war6&=;`WQ* zc9kqIW+=8`|2`A9l3!W}ssoy$JTFAjXk1=z4q(l&5`eYLHP(Adu*hwcRp>@+z@Mpw zXKJNg5l@H`?I4B^ET;?N5brO=O`e#CsBVsOe;)mtQr3RK+*k5(R>+D&sz$8wlX?Kx zeJIt`XzrM%gw{q^&C%7)+R6hzv)R&fmTg^9=mzw^Lr<`WRks*U#}R9bmzq<=xNGe1 ztHOPg?Z}V)HRV1yxnKTPxnU1g&#r<`Ouv&rq$eDeP~i1rZE&#TVNX=mPU4*?LFP%u zEw`?^ID4F0KSq|AZ&Ze{uwTF7;#pPOWpo+o8$!_vht&y*&}{A)4m^r$0peS7c}N>r zDHN3#hQRBjciHr4Cd1l*7H=;}8}@^+4Lx}3@y7&b8PlxoHnpu3`dULSXi|sLrPuXD zxCC}tX#a1>tM|VbzZ8vrG7abWhfy~oH8cw#XkU+0Cyr2{C}Mb?^tM9d=AtB-!DFY( z|K+bt*hIp9NWbqw!`U^>pZ+}#Fno`okN1iOBTTLhU&7LCqy7A)NR=tdi@zt?8hGIX zS(?Ox+%KHDs_s;8YGX;i57>o8ylS7^b!xJgW0!hZ@ma^hsl{(}UY8;4<03}_bMiP> zPoQeU^Y2f6#Bprf+Q?7(Fi|;{YZkvouSY~}Qp8wD4iJ3G-{jNvKCX>94efZX8hb(@ z#LDE>g;jQfvFf^gxWB5NA9N)e2W;x5AX_F+L=eJCtIEcnueZgQ$sR9NPPM%3fm3@V zaXiS699@Uan=A@%lu+7?rkGmNX^q_8Ot-Hg6BgF|gQiw~N;wOs@NY=-k-7(AYQuy5|IA6UoRM+v+iuibXM zF?kRES)BSzAI@tB+mp6ZCL(kLE%l!K%GPmD$V(wG;8wfxoE>e`9Z=!&t?evX$CfQL zpgQ2c39M8PBc9R@5{6%)ci-FfM{Qt5lpm;{l0nP+=)f{nt!q;XCnZ+9RVPln zR9u@SMJaXZS*E_;;OSV*dAB~MC5BGFXGp#DR_tzTDfPl*Fr*_}0_BS^E(`~cp3GYA zB#xvR?j)Z>Kb==(b+9=O@JgJrH7M~ep9h16$|w_mvF(Ssb4DeFw>(RkgDKcN=!YML zyY}lxEuiAq1acO!HJ%_tE#OT9h90=hkiTV8-9^JpNctVF%szTzvCYqUkJpoa;61s; z@Y~UilHj&sxOeb5HfkMfUjwi=>6|XGdjm%}^DS43AR3Fqnjv{_Lh7fi6OPag-AlQx zxrMriL5(mp5-OHyy2D(2jrw{V5h|j<`JR+Y4>)^TE5i9e5Or6ZJ*Fe`g&2d7{gDR! z!?J2~)3nWWa%r4yM_(Y(k21KBU!>&}Y@^(AAQ6FmI!{qxwxIbvL|2NlsnJQ#>}d2-{D> z5`NUH50o2sMv8)i|5Pq2k?Hd^bWKkL^4O?3gupx-A6j_3PNdXq>7Yhvk`hG*GFO}C zd*DX{M`;m^cHz#JG{&}4bBYda*SUSO<(DO5&pbhueaLyN75EmxSQ5qHi=Jq6-|%Mk z4?Sj392)*`Q404Lf+ZC-)(yDNuD#v)(9zhb8(|9$KCBZ%co7Vale}f9pp^c#ETbFw z!XN+JPXn)qx4Yj7euN_8-P>#54d>q62cNGwa#wbkRhJEp5SNu-lj@1ASXQA>i=BU1?p0Pnf7ZI`;1CA$amzFR&qxt&VHED48YBd z-+EP4Z;&JeouZLeqdTt2&oISH%-*r569>M5LlR2>5G?0Tc&0yOA*>y`5O$wG9~QE} zavwI&5^`G(jC)b6@%{W`$MNv@ap2!?Y?@E%7YDz(%b1Yai7sLS{V@eAjvnE0{Xgd3 znow9_q6qKkTvRhmqY@~3z#Y6YKLJ#wi*CW21C=|zRMWn)hbECuJ##%2MF{WdlYqG} zqIXx4Ek5eLx6p=+auW<7FQYi52qv7fpKxo;<$!`%)4Mpna{sB7JUD4J^RUBLZPqfY z44ucRKIy_iWhg;F1vVL3!VYnzjY1|~aF=6ROvyJ>Susnyp8OV$E!xI2YkWReNc~$7 zq7K?VXM+Un?&sdusDQbUrk(qRTWDwBVbRv{!ZPUyHBRRjb1F8x%CAlyf(+&w+sUb7 z2~70+Josue-z@ebE33lX>wwEJGcSB^}ZNN2?{F`4=&G1 zMLt~KF^?3&0gpY&W|(^4eE1HQFnpROm5i^dv#scCbVnZR%=x|h-LVdB2P|;yc@~|)C%8?**&6^s-)+MuWSrr zAZptns#~|H7i2W5HH|an!c{PVc9(WQlPw=FTpzCqsxfgeO zB&8)+mK4ru1rUOcLejKciq$@d8^V;8BSPGA1F8aNL>juzniXB25^zYzb2lrYBHr*T zD5<+_MTJ+vsLM|bEX!i;3(Nb4%RVi6qqgmBI*t_lL+HxTcHHw|@!`I;TuOb!{DT`V zFJ`m*-V7XB%f`vnARGB`Jl_t>l<9*5eU(QgEe5!_|0OSbEktn2E&#)QM-&7Dzg`C$v#Mc^sZQ zk1_d;LdRKVcBzw~x^Jd^Ig+By9z(v>+)=r8#G6=I#BJ&*rW%b}6BlYo^kldVa2j6E z$^i-@NI6E`ETXW%i=OSZ(lAR)Xk^at92yz6Gq6*;+T6W94J_n^O%TDe z%(u2rKL4DG$PHBBTwwjI$LLGl<>?n#9jjxPQa9v_l#g3Duze}(J)EydJwE!9@&-Q@ ziRM)~70fshlyWtp;VV~p0;>xhsr{jns_7t8aQlV1Wtxs6Ep~OdU6E>AG&Ms_T7#w7 zf8~qLnSAzR$f1%(w;xb)mF~dZ@N3QhFfKAk0X!J*CSz}$6HkDAMU65rq-zeLZ1AxI z=YDPG^sJPO~flLeO&s|0UhdbE8Xs2H2xmqrCJpkZIedLpKaYT+)A~) zA7uEp?ekI+n@!G^Ulx2M4t`QQf$6Kh9c5^PWM<+u06V0M2B>1g8nUHw51bD6s0t0l z+8lQQBH0HSLEkwsw$Zmd^a~}2tvW>aSiKtkioWXp+d$ri#6L9N37xE{>zW76);giX z$gwi=sTtMTtL{IK4}bI9a&-(A1CT9S0-FX9HMzz51l5Gm{9tk3^qthc%cV|>m==%C z->CNVuO^OQr3Lq~pDaY4!g6sD>9_(haXDSKF9Y^?C{mBcsZHb2wvW68o(Yq7vukZ| zkmrBQnE0LOvCaTgLshAxKyJW!yn?bhy*Yz;iQNZz0J8`a0ZdQ}-6~)GPWIA5UoL4I zPfAX-`l5f;Iy23UP7_6~mCNPJd{H)<@(mHm{_(VNTY)=9}p=?r#Yza+x-G#{_skc~Q{7ltFei}c0s7K6xcs}k1+Frb7pz6o~c<66n2 z-hXX$nNWSZ;h9SP`KB8GgS`zOoUB=d?1ab8JisAamr0$Uecvq=mog!|aRls~hXXyG zq-GoTOq6S|0Pbqia+GFpA4Y75UXU(yGLaXgZ(PADu{7kplCebYX zJR^!Lo7UGI*BmM+d(V!3)9PBDyD7R1l;PMECX-cUtdEuok^nUc_*JI}mo2uzahrKam zt6%)#BrEDv1Th}~b>FGj_zw3IGdfQ&O)9ZZgjJH}XB4IKXJLk4MUMkvB1dDfQw2hwH>ooL1{!{G{K~t>!-K_RUuRtij9&qP zHSw%`UYbQS4WpBs5IMA#>{Em#+ii!WbV>p==MK-(@%BxOVcRp=eD5Ib^_=MKWu;iXTTQZbf%K1SmOiuFRBp&_ zQ4#;i!qOoL8J@_G@o={P>s<8n&hr=(9;TPT%YxtladM;Hx)sm0s-tNHseBy<|6tVp z4*x>A318L@?`xr=j#|}>9cx*q?qI>IkIeUvoC1`XpuMX)A^dX49f#LPerJ`JS05mn zulW9C%RLGsKT9LUWg|ax`B~j>y#5ceqmK}G88%)gZ;;XH`AVJ?s%JooMxt((C(?gK zX>dW06NG_m7iUSicv&ZUBF-(h!NNsacXv`~Y2H&A)M4UbOOl;l2tSjdr563IS>U#wF7wgGcOGBgZHCgf#iI zyF!lfWSaz`q_t=Z{A;Slup;L%rS?S_t%z<=;_;j&dm6x?4p*Ey+%-?gNhXQc+VOr} z(CNP6)b$~f?YagY_KHU%?}eaJ@+l?DYhtc9)B5bIFA>KL=<}g8Vxl)(?~&YPfBh?(X}KX}c`~^>Z^O znIz$^t0qgWhd$`4@Y4 zz2T0L@x(7?8e0{anaWXXg&|w2oU+UU_;B@S*C?~=w`9Q2|ez9eb0tw1uuvYNb!L=BIWK1@D{e;@P07RPhJ&R1qGP`uZhX7ca! zevr(;x_)YBxB^O3p?xVXCS62Om$5tZNg;T|w(&dTW$jS%)#E}2R+IT5_a|F6&d;!P zZgJz9?|HLKMX#IEz0+z!*uV>C*oE_=5ikT~L9Q|HD0w*_T?6yMWG3;aYx|h?%ub=Q7r zh*(X9>yWOZ+|K|1qkYWn{NA#C*zu0rC#QRf_NzQ)a8Wn^e=XbHN4~2Jr{6rmL<;Yj~FNb+YBRR4kIB;04Q; z(?ID$1igki)r#%-Y3Hu}u0+7hvgqxz6w`ccjVm%+vl@UM&{g;Q(@itJQIIobxfl(a zTk>p&qOcNqn0xf6f3~8-ih{$2bYV(fD;08u9|niv`6(!T&9!jr>e;M*OO~n~`=ZWv z^spGhTd2tLzK1wM|GQ~d@Ey>|6%SD^Hf2BwuU}WJHfYL_&;aD|i5Y)Mlgf5VX`~8j zb59rJGcGv0k{xCu<}4!idp47+Rs5J+VTFH3g{h>`fM0ljVe!8JW4-XZR7s9K22m$-mwLx z+n)3c|M%0%N2ED#IbyUpez^;5Bv1oIug(z~b%A|7i_J_cg&??VpPkh=;TTov7s!1|ML&^n@LvBePN z(x1z|s+o5aE#I*o&Tymo7_su;bgW9Hw-#v&N~HB%MNTV~n?fNDgS;`n)*_C43t4Y) z3ca4KWS&!*9A(LrM)h
  • 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

    I5xLRl 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⁢hHWd~SJvHNS!IopY@@X(O)mt$ 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 literal 0 HcmV?d00001 diff --git a/include/Makefile.in b/include/Makefile.in index ca97f93..8c7d802 100644 --- a/include/Makefile.in +++ b/include/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.11 from Makefile.am. +# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, @@ -122,6 +122,8 @@ GREP = @GREP@ GSL_FLAGS = @GSL_FLAGS@ GSL_LIBS = @GSL_LIBS@ HAVE_SWIG = @HAVE_SWIG@ +HDF4_FLAGS = @HDF4_FLAGS@ +HDF4_LIBS = @HDF4_LIBS@ HDF5_FLAGS = @HDF5_FLAGS@ HDF5_LIBS = @HDF5_LIBS@ INSTALL = @INSTALL@ @@ -142,6 +144,7 @@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MGL_AGE = @MGL_AGE@ MGL_CURRENT = @MGL_CURRENT@ +MGL_RELEASE = @MGL_RELEASE@ MGL_REVISION = @MGL_REVISION@ MKDIR_P = @MKDIR_P@ MOC = @MOC@ diff --git a/include/mgl/mgl.h b/include/mgl/mgl.h index 2cb4b08..b9aa8a4 100644 --- a/include/mgl/mgl.h +++ b/include/mgl/mgl.h @@ -17,19 +17,16 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#ifdef _MGL_W_H_ +#warning "MathGL wrapper was enabled. So disable original MathGL classes" +#else #ifndef _MGL_H_ #define _MGL_H_ -#define MGL_VERSION 10.2 - #include #include #include "mgl/mgl_data.h" #include "mgl/mgl_font.h" - -#ifndef NUM_COLOR -#define NUM_COLOR 32 -#endif //----------------------------------------------------------------------------- class mglGraph; class mglFormula; @@ -185,7 +182,7 @@ public: /// Write the frame in file (depending extension, write current frame if fname is empty) void WriteFrame(const char *fname=0, const char *descr=0); /// Show currently produced image by Qt or FLTK library - void ShowImage(const char *viewer="kuickshow", bool keep=false); + void ShowImage(const char *viewer=0, bool keep=false); //@} /// Create new frame. virtual int NewFrame(); @@ -245,7 +242,7 @@ public: inline void SetPalColor (int n, float r, float g, float b) { if(n<100) Pal[n] = mglColor(r,g,b); }; /// Set number of colors in palette - inline void SetPalNum(int num) { if(num<100) NumPal = num; }; + inline void SetPalNum(int num) { if(num<100 && num>0) NumPal = num; }; /// Set palette inline void SetPalette(const char *colors) { strcpy(DefPal, colors?colors:MGL_DEF_PAL); SetPal(colors); } @@ -295,24 +292,28 @@ public: * can be used in any place. */ //@{ /// Set angle of view indepently from mglGraph::Rotate(). - virtual void View(mreal tetx,mreal tetz,mreal tety=0); + virtual void View(mreal tetx,mreal tetz,mreal tety=0); + inline int GetWarn() { return WarnCode; }; void DefaultPlotParam(); ///< Set default parameter for plotting /// Zoom in or zoom out (if Zoom(0, 0, 1, 1)) a part of picture void Zoom(mreal x1, mreal y1, mreal x2, mreal y2); /// Clear transformation matrix. void Identity(bool rel=false); - /// Restore transformation matrix after last InPlot() - virtual void RestoreM()=0; + /// Push transformation matrix into stack + virtual void Push()=0; + /// Pop transformation matrix from stack + virtual void Pop()=0; /// Clear up the frame virtual void Clf(mglColor Back=WC); //=0 /// Put further plotting in some region of whole frame surface. void SubPlot(int nx,int ny,int m, mreal dx=0, mreal dy=0); + void SubPlot(int nx,int ny,int m, const char *style); /// Put further plotting in column cell of previous subplot - void ColumnPlot(int num, int i); + void ColumnPlot(int num, int i, mreal d=0); /// Put further plotting in cell of stick rotated on angles tet, phi virtual void StickPlot(int num, int i, mreal tet, mreal phi)=0; /// Put further plotting in some region of whole frame surface. - virtual void InPlot(mreal x1,mreal x2,mreal y1,mreal y2,bool rel=false); //=0 + virtual void InPlot(mreal x1,mreal x2,mreal y1,mreal y2,bool rel=true); //=0 /// Set aspect ratio for further plotting. virtual void Aspect(mreal Ax,mreal Ay,mreal Az)=0; /// Rotate a further plotting. @@ -370,20 +371,19 @@ public: /// Safetly set the cutting off condition (formula). void CutOff(const char *EqCut); /// Set to draw Ternary axis (triangle like axis, grid and so on) - void Ternary(bool tern); + void Ternary(int tern); /// Recalculate internal parameter for correct applies transformation rules. \b Must \b be \b called after any direct changes of members mglGraph::Min, mglGraph::Max, mglGraph::fx, mglGraph::fy, mglGraph::fz. void RecalcBorder(); /// Draw axises with ticks in directions determined by string parameter \a dir. void Axis(const char *dir="xyzt", bool adjust=false); /// Draw grid lines perpendicular to direction determined by string parameter \a dir. - void Grid(const char *dir="xyz",const char *pen="B-"); + void Grid(const char *dir="xyzt",const char *pen="B-"); /// Print the label \a text for axis \a dir. - void Label(char dir, const char *text, mreal pos=+1, mreal size=-1.4, mreal shift=0); + void Label(char dir, const char *text, mreal pos=0, mreal size=-1.4, mreal shift=0); + void Labelw(char dir, const wchar_t *text, mreal pos=0, mreal size=-1.4, mreal shift=0); /// Print the \a text at arbitrary position of the picture \a x, \a y in range [0,1]x[0,1]. void Label(mreal x, mreal y, const char *text, const char *fnt=0, mreal size=-1.4, bool rel=false); void Labelw(mreal x, mreal y, const wchar_t *text, const char *fnt=0, mreal size=-1.4, bool rel=false); - /// Print the label \a text for axis \a dir. - void Labelw(char dir, const wchar_t *text, mreal pos=+1, mreal size=-1.4, mreal shift=0); /// Draw colorbar at edge of axis void Colorbar(const char *sch=0,int where=0); void inline Colorbar(const char *sch, int where, mreal x, mreal y, mreal w, mreal h) { SetScheme(sch); Colorbar(where,x,y,w,h); }; @@ -554,7 +554,9 @@ public: /// Draw legend of accumulated strings by \a font with \a size void Legend(int n, wchar_t **text, char **style, int where=0x3, const char *font="rL", mreal size=-0.8, mreal llen=0.1); /// Switch on/off box around legend - inline void SetLegendBox (bool val) { LegendBox=val; }; + inline void SetLegendBox(bool val) { LegendBox=val; }; + /// Number of marks in legend sample + inline void SetLegendMarks(int num=1) { LegendMarks = num>0?num:1; }; //@} // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ ������� ~~~~~~~~~~~~~~~~~~~~~~~~ /// Plot data depending on its dimensions and \a type parameter @@ -605,9 +607,9 @@ public: /// Draw area plot for points in arrays \a x, \a y, \a z. void Area(const mglData &x, const mglData &y, const mglData &z, const char *pen=0); /// Draw area plot for points in arrays \a x, \a y. - void Area(const mglData &x, const mglData &y, const char *pen=0,bool sum=false,mreal zVal=NAN); + void Area(const mglData &x, const mglData &y, const char *pen=0, mreal zVal=NAN); /// Draw area plot for points in arrays \a y. - void Area(const mglData &y, const char *pen=0,bool sum=false,mreal zVal=NAN); + void Area(const mglData &y, const char *pen=0, mreal zVal=NAN); /// Draw vertical lines from points in arrays \a x, \a y, \a z to mglGraph::Org. void Stem(const mglData &x, const mglData &y, const mglData &z, const char *pen=0); @@ -624,17 +626,17 @@ public: void Step(const mglData &y, const char *pen=0,mreal zVal=NAN); /// Draw vertical bars from points in arrays \a x, \a y, \a z to mglGraph::Org. - void Bars(const mglData &x, const mglData &y, const mglData &z, const char *pen=0, bool above=false); + void Bars(const mglData &x, const mglData &y, const mglData &z, const char *pen=0); /// Draw vertical bars from points in arrays \a x, \a y to mglGraph::Org. - void Bars(const mglData &x, const mglData &y, const char *pen=0,mreal zVal=NAN, bool above=false); + void Bars(const mglData &x, const mglData &y, const char *pen=0,mreal zVal=NAN); /// Draw vertical bars from points in arrays \a y to mglGraph::Org. - void Bars(const mglData &y, const char *pen=0,mreal zVal=NAN, bool above=false); + void Bars(const mglData &y, const char *pen=0,mreal zVal=NAN); /// Draw vertical bars from points in arrays \a x, \a y to mglGraph::Org. - void Barh(const mglData &y, const mglData &v, const char *pen=0,mreal zVal=NAN, bool above=false); + void Barh(const mglData &y, const mglData &v, const char *pen=0,mreal zVal=NAN); /// Draw vertical bars from points in arrays \a y to mglGraph::Org. - void Barh(const mglData &v, const char *pen=0,mreal zVal=NAN, bool above=false); - + void Barh(const mglData &v, const char *pen=0,mreal zVal=NAN); + /// Draw surface of curve {\a r,\a z} rotatation around Z axis void Torus(const mglData &r, const mglData &z, const char *pen=0); /// Draw surface of curve rotatation around Z axis @@ -687,29 +689,6 @@ public: /// Draw tube with constant radial sizes \a r for points in arrays \a y. void Tube(const mglData &y, mreal r, const char *pen=0,mreal zVal=NAN); - /// Draw line plot for points in arrays \a a(0,:),\a a(1,:). - void Plot2(const mglData &a, const char *pen=0,mreal zVal=NAN); - /// Draw line plot for points in arrays \a a(0,:),\a a(1,:),\a a(2,:). - void Plot3(const mglData &a, const char *pen=0); - /// Draw area plot for points in arrays \a a(0,:),\a a(1,:). - void Area2(const mglData &a, const char *pen=0,mreal zVal=NAN); - /// Draw area plot for points in arrays \a a(0,:),\a a(1,:),\a a(2,:). - void Area3(const mglData &a, const char *pen=0); - /// Draw vertical bars from points in arrays \a a(0,:),\a a(1,:) to mglGraph::Org. - void Bars2(const mglData &a, const char *pen=0,mreal zVal=NAN, bool above=false); - /// Draw vertical bars from points in arrays \a a(0,:),\a a(1,:),\a a(2,:) to mglGraph::Org. - void Bars3(const mglData &a, const char *pen=0, bool above=false); - /// Draw vertical lines from points in arrays \a a(0,:),\a a(1,:) to mglGraph::Org. - void Stem2(const mglData &a, const char *pen=0,mreal zVal=NAN); - /// Draw vertical lines from points in arrays \a a(0,:),\a a(1,:),\a a(2,:) to mglGraph::Org. - void Stem3(const mglData &a, const char *pen=0); - /// Draw stairs for points in arrays \a a(0,:),\a a(1,:). - void Step2(const mglData &a, const char *pen=0,mreal zVal=NAN); - /// Draw stairs for points in arrays \a a(0,:),\a a(1,:),\a a(2,:). - void Step3(const mglData &a, const char *pen=0); - /// Draw surface of curve {\a a(0,:),\a a(1,:)} rotatation around Z axis for - void Torus2(const mglData &a, const char *pen=0); - //@} // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /** @name 2D plotting functions @@ -743,12 +722,25 @@ public: void Dots(const mglData &x, const mglData &y, const mglData &z, const mglData &a, const char *sch=0, mreal alpha=1); /// Draw dots in points \a tr. void Dots(const mglData &tr, const char *sch=0); + /// Draw triangle mesh for points in arrays \a x, \a y, \a z with specified color \a c. void TriPlot(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const mglData &c, const char *sch=0); /// Draw triangle mesh for points in arrays \a x, \a y, \a z. void TriPlot(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const char *sch=0); /// Draw triangle mesh for points in arrays \a x, \a y. - void TriPlot(const mglData &nums, const mglData &x, const mglData &y, const char *sch=0, mreal zVal=NAN); + void TriPlot(const mglData &nums, const mglData &x, const mglData &y, const char *sch=0, mreal zVal=NAN); + /// Draw quad mesh for points in arrays \a x, \a y, \a z with specified color \a c. + void QuadPlot(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const mglData &c, const char *sch=0); + /// Draw quad mesh for points in arrays \a x, \a y, \a z. + void QuadPlot(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const char *sch=0); + /// Draw quad mesh for points in arrays \a x, \a y. + void QuadPlot(const mglData &nums, const mglData &x, const mglData &y, const char *sch=0, mreal zVal=NAN); + /// Draw contour lines for triangle mesh for points in arrays \a x, \a y, \a z. + void TriCont(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const char *sch=0,int num=7,mreal zVal=NAN); + void TriContV(const mglData &v, const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const char *sch=0,mreal zVal=NAN); + void TriCont(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const mglData &a, const char *sch=0,int num=7,mreal zVal=NAN); + void TriContV(const mglData &v, const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const mglData &a, const char *sch=0,mreal zVal=NAN); + /// Draw grid lines for density plot of 2d data specified parametrically void Grid(const mglData &x, const mglData &y, const mglData &z, const char *stl=0,mreal zVal=NAN); /// Draw grid lines for density plot of 2d data @@ -897,6 +889,7 @@ public: void Surf3C(const mglData &x, const mglData &y, const mglData &z, const mglData &a, const mglData &b, const char *stl=0, int num=3); /// Draw several isosurface for 3d data \a a with color proportional to \a b void Surf3C(const mglData &a, const mglData &b, const char *stl=0, int num=3); + /// Plot flows for vector field {ax,ay} parametrically depended on coordinate {x,y} with color proportional to value |a| void Flow(const mglData &x, const mglData &y, const mglData &ax, const mglData &ay, const char *sch=0, int num=5, bool central=true, mreal zVal=NAN); /// Plot flows for vector field {ax,ay} with color proportional to value |a| @@ -910,6 +903,11 @@ public: void FlowP(mglPoint p0, const mglData &ax, const mglData &ay, const char *sch=0); void FlowP(mglPoint p0, const mglData &x, const mglData &y, const mglData &z, const mglData &ax, const mglData &ay, const mglData &az, const char *sch=0); void FlowP(mglPoint p0, const mglData &ax, const mglData &ay, const mglData &az, const char *sch=0); + + void Grad(const mglData &x, const mglData &y, const mglData &z, const mglData &phi, const char *sch=0, int num=5); + void Grad(const mglData &x, const mglData &y, const mglData &phi, const char *sch=0, int num=5, mreal zVal=NAN); + void Grad(const mglData &phi, const char *sch=0, int num=5, mreal zVal=NAN); + /// Plot flow pipes for vector field {ax,ay} parametrically depended on coordinate {x,y} with color proportional to value |a| void Pipe(const mglData &x, const mglData &y, const mglData &ax, const mglData &ay, const char *sch=0, mreal r0=0.05, int num=5, bool central=true, mreal zVal=NAN); /// Plot flow pipes for vector field {ax,ay} with color proportional to value |a| @@ -1054,7 +1052,7 @@ public: //@} // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ protected: - bool TernAxis; /// Flag that Ternary axis is used + int TernAxis; /// Flag that Ternary axis is used mreal FogDist; /// Inverse fog distance (fog ~ exp(-FogDist*Z)) mreal FogDz; /// Relative shift of fog int _sx,_sy,_sz,_st; // sign in shift of axis ticks and labels @@ -1063,14 +1061,15 @@ protected: mglFont *fnt; ///< Class for printing vector text mreal font_factor; bool UseAlpha; ///< Flag that Alpha is used - mglColor cmap[NUM_COLOR]; ///< Colors for color scheme + mglColor cmap[MGL_CMAP_COLOR]; ///< Colors for color scheme char PalNames[101]; ///< IDs of colors in the palette char DefPal[101]; ///< Default palette int CurrPal; ///< Current index of palette mglGraph::Pal int NumCol; ///< Actual number of colors in color scheme mglGraph::cmap mreal CloudFactor; ///< Factor of transparency in mglGraph::CloudP and mglGraph::CloudQ bool ScalePuts; ///< Enable/disable point positions scaling in puts - bool SmoothColorbar; ///< Use color interpolation in colorbar (default is true) + bool SmoothColorbar; ///< Use color interpolation in colorbar (default is true) + int LegendMarks; ///< Number of marks in the Legend wchar_t xtt[256]; ///< X-tick template (set NULL to use default one ("%.2g" in simplest case)) @@ -1111,6 +1110,7 @@ protected: /// draw mark with different type at position {x,y,z} (no scaling) virtual void Mark(mreal x,mreal y,mreal z,char mark='.')=0; + void InPlot(mreal x1,mreal x2,mreal y1,mreal y2, const char *style); /// Draw generic colorbar virtual void colorbar(const mglData &v, const mglColor *s, int where, mreal x, mreal y, mreal w, mreal h)=0; /// Draws the point (ball) at position \a p with color \a c. @@ -1139,12 +1139,14 @@ protected: mreal *pp,mreal *cc,mreal *kk,mreal *nn,bool wire)=0; /// Plot quads depending on positions and colors of vertexes on grid virtual void quads_plot(long n, mreal *pp, mreal *cc, bool *tt)=0; - /// Plot quads depending on positions and colors of vertexes on grid + /// Plot independent triangles virtual void trigs_plot(long n, long *nn, long m, mreal *pp, mreal *cc, bool *tt,bool wire, bool bytrig=false)=0; + /// Plot independent quads + virtual void quads_plot(long n, long *nn, long m, mreal *pp, mreal *cc, bool *tt,bool wire, bool byquad)=0; /// Plot series of unconnected lines. - virtual void lines_plot(long n, mreal *pp, mreal *cc, bool *tt, bool ball)=0; + virtual void lines_plot(long n, mreal *pp, mreal *cc, bool *tt, bool ball, bool grad)=0; /// Plot series of unconnected arrows. - virtual void vects_plot(long n, mreal *pp, mreal *cc, bool *tt)=0; + virtual void vects_plot(long n, mreal *pp, mreal *cc, bool *tt, bool grad)=0; /// Draw line between points \a p1,\a p2 with color \a c1, \a c2 at edges virtual void line_plot(mreal *p1,mreal *p2,mreal *c1,mreal *c2,bool all=false)=0; /// Draw glyph by peaces @@ -1165,7 +1167,7 @@ protected: mglColor GetC(mreal x,mreal y,mreal z,bool simple=false); /// add point to contour line chain long add_cpoint(long &pc,mreal **p,mreal **k,bool **t,mreal x,mreal y,mreal z, - mreal k1,mreal k2,bool scale); + mreal k1,mreal k2,bool scale); /// Draw tick virtual void DrawTick(mreal *pp,bool sub); @@ -1186,7 +1188,9 @@ private: mglColor GetC2(mreal x,mreal y); /// Prepare fitted formula - void PrepareFitEq(mreal chi, const char *eq, const char *var, mreal *par, bool print); + void PrepareFitEq(mreal chi, const char *eq, const char *var, mreal *par, bool print); + + void tricont_line(mreal val, long i, long k0, long k1, long k2, const mglData &x, const mglData &y, const mglData &z, const mglData &a, mreal zVal); /// Print curved text void font_curve(long n,mreal *pp,bool *tt,long *nn,const wchar_t *text, int pos,mreal size); @@ -1225,13 +1229,13 @@ private: /// Set color depending on it value void Color(mreal a,mreal a1=0,mreal a2=0); // ���� ����� /// Draw x axis - void AxisX(bool text); + void AxisX(bool text, const char *stl); /// Draw y axis - void AxisY(bool text); + void AxisY(bool text, const char *stl); /// Draw z axis - void AxisZ(bool text); + void AxisZ(bool text, const char *stl); /// Draw y,t-axis for Ternary plot - void AxisT(bool text); + void AxisT(bool text, const char *stl); /// Draw ticks on box void TickBox(); /// Draw X,Y,Z grid line @@ -1248,4 +1252,5 @@ private: }; //----------------------------------------------------------------------------- #endif +#endif //----------------------------------------------------------------------------- diff --git a/include/mgl/mgl_ab.h b/include/mgl/mgl_ab.h index 485d09e..862f52a 100644 --- a/include/mgl/mgl_ab.h +++ b/include/mgl/mgl_ab.h @@ -18,6 +18,9 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ //----------------------------------------------------------------------------- +#ifdef _MGL_W_H_ +#warning "MathGL wrapper was enabled. So disable original MathGL classes" +#else #ifndef _MGL_AB_H_ #define _MGL_AB_H_ #include "mgl/mgl.h" @@ -51,7 +54,6 @@ using mglGraph::Legend; void Light(int n, bool enable); void Light(int n,mglPoint p, mglColor c=WC, mreal br=0.5, bool infty=true); - void RestoreM(); void InPlot(mreal x1,mreal x2,mreal y1,mreal y2, bool rel=false); void StickPlot(int num, int i, mreal tet, mreal phi); void Aspect(mreal Ax,mreal Ay,mreal Az); @@ -117,11 +119,11 @@ using mglGraph::Legend; const char *title, void *par=NULL, void (*reload)(int next, void *p)=NULL, bool maximize=false); /// Create a window for plotting based on class mglDraw. - void Window(int argc, char **argv, mglDraw *draw, const char *title, bool maximize=false); + void Window(int argc, char **argv, const char *title, mglDraw *draw, bool maximize=false); /// Push transformation matrix into stack - void Push(); + virtual void Push(); /// Pop transformation matrix from stack - void Pop(); + virtual void Pop(); /// Set diagonal matrix and its shift void SetPosScale(mreal xp, mreal yp, mreal zp, mreal scl=1); //@} @@ -139,7 +141,6 @@ protected: int Depth; ///< Depth of the image mreal B[9]; ///< Transformation matrix (used by PostScale() function) mreal B1[12]; ///< Transformation matrix for colorbar - mreal BL[13]; ///< Previous transformation matrix mreal inW, inH; ///< Relative width and height of last InPlot unsigned PDef; ///< Pen bit mask mreal pPos; ///< Current position in pen mask @@ -221,10 +222,11 @@ protected: bool *tt,mreal Alpha, bool line); void surf3_plot(long n,long m,long *kx1,long *kx2,long *ky1,long *ky2,long *kz, mreal *pp,mreal *cc,mreal *kk,mreal *nn,bool wire); - void trigs_plot(long n, long *nn, long m, mreal *pp, mreal *cc, bool *tt,bool wire, bool bytrig=false); + void trigs_plot(long n, long *nn, long m, mreal *pp, mreal *cc, bool *tt,bool wire, bool bytrig=false); + void quads_plot(long n, long *nn, long m, mreal *pp, mreal *cc, bool *tt,bool wire, bool byquad); void quads_plot(long n, mreal *pp, mreal *cc, bool *tt); - void lines_plot(long n, mreal *pp, mreal *cc, bool *tt, bool ball); - void vects_plot(long n, mreal *pp, mreal *cc, bool *tt); + void lines_plot(long n, mreal *pp, mreal *cc, bool *tt, bool ball, bool grad); + void vects_plot(long n, mreal *pp, mreal *cc, bool *tt, bool grad); void glyph_fill(mreal x,mreal y, mreal f, int nt, const short *trig, mreal *c); void glyph_wire(mreal x,mreal y, mreal f, int nl, const short *line, mreal *c); void glyph_line(mreal x,mreal y, mreal f, mreal *c, bool solid); @@ -239,4 +241,5 @@ private: }; //----------------------------------------------------------------------------- #endif +#endif //----------------------------------------------------------------------------- diff --git a/include/mgl/mgl_addon.h b/include/mgl/mgl_addon.h index 561a616..bd5224c 100644 --- a/include/mgl/mgl_addon.h +++ b/include/mgl/mgl_addon.h @@ -18,6 +18,9 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ //--------------------------------------------------------------------------- +#ifdef _MGL_W_H_ +#warning "MathGL wrapper was enabled. So disable original MathGL classes" +#else #ifndef _MGL_ADDON_H_ #define _MGL_ADDON_H_ //--------------------------------------------------------------------------- @@ -67,3 +70,4 @@ bool mglDifrAxial(dual *a, int n, dual q, int Border,dual *b, dual *d, int kk, d bool mglDifrGrid(dual *a,int n,dual q,int Border,dual *b,dual *d,int kk); //--------------------------------------------------------------------------- #endif +#endif diff --git a/include/mgl/mgl_c.h b/include/mgl/mgl_c.h index 5d428b1..ca8f9ea 100644 --- a/include/mgl/mgl_c.h +++ b/include/mgl/mgl_c.h @@ -70,7 +70,23 @@ HMGL mgl_create_graph_glut_dr(HMDR dr, const char *title); HMGL mgl_create_graph_fltk_dr(HMDR dr, const char *title); HMGL mgl_create_graph_qt_dr(HMDR dr, const char *title); void mgl_fltk_run(); -void mgl_qt_run(); +void mgl_qt_run(); + +void mgl_wnd_set_delay(HMGL gr, mreal dt); +void mgl_wnd_set_auto_clf(HMGL gr, int val); +void mgl_wnd_set_show_mouse_pos(HMGL gr, int val); +void mgl_wnd_set_clf_update(HMGL gr, int val); +void mgl_wnd_toggle_alpha(HMGL gr); +void mgl_wnd_toggle_light(HMGL gr); +void mgl_wnd_toggle_zoom(HMGL gr); +void mgl_wnd_toggle_rotate(HMGL gr); +void mgl_wnd_toggle_no(HMGL gr); +void mgl_wnd_update(HMGL gr); +void mgl_wnd_reload(HMGL gr, int o); +void mgl_wnd_adjust(HMGL gr); +void mgl_wnd_next_frame(HMGL gr); +void mgl_wnd_prev_frame(HMGL gr); +void mgl_wnd_animation(HMGL gr); #endif void mgl_set_show_mouse_pos(HMGL gr, int enable); void mgl_get_last_mouse_pos(HMGL gr, mreal *x, mreal *y, mreal *z); @@ -87,7 +103,8 @@ HMDT mgl_create_data_file(const char *fname); void mgl_delete_data(HMDT dat); /*****************************************************************************/ HMPR mgl_create_parser(); -void mgl_delete_parser(HMPR p); +void mgl_delete_parser(HMPR p); +void mgl_scan_func(HMPR p, const wchar_t *line); void mgl_add_param(HMPR p, int id, const char *str); void mgl_add_paramw(HMPR p, int id, const wchar_t *str); /*===!!! NOTE !!! You must not delete obtained data arrays !!!===============*/ @@ -128,7 +145,8 @@ void mgl_set_draw_face(HMGL gr, int enable); void mgl_set_scheme(HMGL gr, const char *sch); void mgl_load_font(HMGL gr, const char *name, const char *path); void mgl_copy_font(HMGL gr, HMGL gr_from); -void mgl_restore_font(HMGL gr); +void mgl_restore_font(HMGL gr); +int mgl_get_warn(HMGL gr); /*****************************************************************************/ /* Export to file or to memory */ /*****************************************************************************/ @@ -167,15 +185,19 @@ void mgl_set_ambbr(HMGL gr, mreal i); /*****************************************************************************/ /* Scale and rotate */ /*****************************************************************************/ +void mgl_mat_pop(HMGL gr); +void mgl_mat_push(HMGL gr); void mgl_identity(HMGL graph, int rel); void mgl_clf(HMGL graph); void mgl_flush(HMGL gr); void mgl_clf_rgb(HMGL graph, mreal r, mreal g, mreal b); void mgl_subplot(HMGL graph, int nx,int ny,int m); void mgl_subplot_d(HMGL graph, int nx,int ny,int m, mreal dx, mreal dy); +void mgl_subplot_s(HMGL graph, int nx,int ny,int m,const char *style); void mgl_inplot(HMGL graph, mreal x1,mreal x2,mreal y1,mreal y2); void mgl_relplot(HMGL graph, mreal x1,mreal x2,mreal y1,mreal y2); void mgl_columnplot(HMGL graph, int num, int ind); +void mgl_columnplot_d(HMGL graph, int num, int ind, mreal d); void mgl_stickplot(HMGL graph, int num, int ind, mreal tet, mreal phi); void mgl_aspect(HMGL graph, mreal Ax,mreal Ay,mreal Az); void mgl_rotate(HMGL graph, mreal TetX,mreal TetZ,mreal TetY); @@ -194,6 +216,8 @@ void mgl_set_caxis(HMGL graph, mreal C1,mreal C2); void mgl_set_axis(HMGL graph, mreal x1, mreal y1, mreal z1, mreal x2, mreal y2, mreal z2, mreal x0, mreal y0, mreal z0); void mgl_set_axis_3d(HMGL graph, mreal x1, mreal y1, mreal z1, mreal x2, mreal y2, mreal z2); void mgl_set_axis_2d(HMGL graph, mreal x1, mreal y1, mreal x2, mreal y2); +inline void mgl_set_ranges(HMGL graph, mreal x1, mreal x2, mreal y1, mreal y2, mreal z1, mreal z2) +{ mgl_set_axis_3d(graph, x1,y1,z1,x2,y2,z2); }; void mgl_set_origin(HMGL graph, mreal x0, mreal y0, mreal z0); void mgl_set_tick_origin(HMGL graph, mreal x0, mreal y0, mreal z0); void mgl_set_crange(HMGL graph, const HMDT a, int add); @@ -256,7 +280,8 @@ void mgl_add_legendw(HMGL graph, const wchar_t *text,const char *style); void mgl_clear_legend(HMGL graph); void mgl_legend_xy(HMGL graph, mreal x, mreal y, const char *font, mreal size, mreal llen); void mgl_legend(HMGL graph, int where, const char *font, mreal size, mreal llen); -void mgl_set_legend_box(HMGL gr, int enable); +void mgl_set_legend_box(HMGL gr, int enable); +void mgl_set_legend_marks(HMGL gr, int num); /*****************************************************************************/ /* 1D plotting functions */ /*****************************************************************************/ @@ -265,8 +290,6 @@ void mgl_fplot_xyz(HMGL graph, const char *fx, const char *fy, const char *fz, c void mgl_plot_xyz(HMGL graph, const HMDT x, const HMDT y, const HMDT z, const char *pen); void mgl_plot_xy(HMGL graph, const HMDT x, const HMDT y, const char *pen); void mgl_plot(HMGL graph, const HMDT y, const char *pen); -void mgl_plot_2(HMGL graph, const HMDT a, const char *pen); -void mgl_plot_3(HMGL graph, const HMDT a, const char *pen); void mgl_radar(HMGL graph, const HMDT a, const char *pen, mreal r); void mgl_boxplot_xy(HMGL graph, const HMDT x, const HMDT a, const char *pen); void mgl_boxplot(HMGL graph, const HMDT a, const char *pen); @@ -278,33 +301,24 @@ void mgl_area_xy(HMGL graph, const HMDT x, const HMDT y, const char *pen); void mgl_area_xys(HMGL graph, const HMDT x, const HMDT y, const char *pen); void mgl_area_s(HMGL graph, const HMDT y, const char *pen); void mgl_area(HMGL graph, const HMDT y, const char *pen); -void mgl_area_2(HMGL graph, const HMDT a, const char *pen); -void mgl_area_3(HMGL graph, const HMDT a, const char *pen); void mgl_region_xy(HMGL graph, const HMDT x, const HMDT y1, const HMDT y2, const char *pen, int inside); void mgl_region(HMGL graph, const HMDT y1, const HMDT y2, const char *pen, int inside); void mgl_mark(HMGL graph, mreal x,mreal y,mreal z,char mark); void mgl_stem_xyz(HMGL graph, const HMDT x, const HMDT y, const HMDT z, const char *pen); void mgl_stem_xy(HMGL graph, const HMDT x, const HMDT y, const char *pen); void mgl_stem(HMGL graph, const HMDT y, const char *pen); -void mgl_stem_2(HMGL graph, const HMDT a, const char *pen); -void mgl_stem_3(HMGL graph, const HMDT a, const char *pen); void mgl_step_xyz(HMGL graph, const HMDT x, const HMDT y, const HMDT z, const char *pen); void mgl_step_xy(HMGL graph, const HMDT x, const HMDT y, const char *pen); void mgl_step(HMGL graph, const HMDT y, const char *pen); -void mgl_step_2(HMGL graph, const HMDT a, const char *pen); -void mgl_step_3(HMGL graph, const HMDT a, const char *pen); void mgl_bars_xyz(HMGL graph, const HMDT x, const HMDT y, const HMDT z, const char *pen); void mgl_bars_xy(HMGL graph, const HMDT x, const HMDT y, const char *pen); void mgl_bars(HMGL graph, const HMDT y, const char *pen); -void mgl_bars_2(HMGL graph, const HMDT a, const char *pen); -void mgl_bars_3(HMGL graph, const HMDT a, const char *pen); void mgl_barh_yx(HMGL graph, const HMDT y, const HMDT v, const char *pen); void mgl_barh(HMGL graph, const HMDT v, const char *pen); /*****************************************************************************/ /* Advanced 1D plotting functions */ /*****************************************************************************/ void mgl_torus(HMGL graph, const HMDT r, const HMDT z, const char *pen); -void mgl_torus_2(HMGL graph, const HMDT a, const char *pen); void mgl_text_xyz(HMGL graph, const HMDT x, const HMDT y, const HMDT z,const char *text, const char *font, mreal size); void mgl_text_xy(HMGL graph, const HMDT x, const HMDT y, const char *text, const char *font, mreal size); void mgl_text_y(HMGL graph, const HMDT y, const char *text, const char *font, mreal size); @@ -422,6 +436,10 @@ void mgl_pipe_xyz(HMGL graph, const HMDT x, const HMDT y, const HMDT z, const HM void mgl_pipe_3d(HMGL graph, const HMDT ax, const HMDT ay, const HMDT az, const char *sch, mreal r0, int num, int central); void mgl_dew_xy(HMGL gr, const HMDT x, const HMDT y, const HMDT ax, const HMDT ay, const char *sch,mreal zVal); void mgl_dew_2d(HMGL gr, const HMDT ax, const HMDT ay, const char *sch,mreal zVal); + +void mgl_grad_xyz(HMGL graph, const HMDT x, const HMDT y, const HMDT z, const HMDT ph, const char *sch, int num); +void mgl_grad_xy(HMGL graph, const HMDT x, const HMDT y, const HMDT ph, const char *sch, int num, mreal zVal); +void mgl_grad(HMGL graph, const HMDT ph, const char *sch, int num, mreal zVal); /*****************************************************************************/ /* 3D plotting functions */ /*****************************************************************************/ @@ -461,6 +479,13 @@ void mgl_beam(HMGL graph, const HMDT tr, const HMDT g1, const HMDT g2, const HMD void mgl_triplot_xyzc(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const HMDT c, const char *sch); void mgl_triplot_xyz(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const char *sch); void mgl_triplot_xy(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const char *sch, mreal zVal); +void mgl_quadplot_xyzc(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const HMDT c, const char *sch); +void mgl_quadplot_xyz(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const char *sch); +void mgl_quadplot_xy(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const char *sch, mreal zVal); +void mgl_tricont_xyzcv(HMGL gr, const HMDT v, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const HMDT c, const char *sch, mreal zVal); +void mgl_tricont_xyzv(HMGL gr, const HMDT v, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const char *sch, mreal zVal); +void mgl_tricont_xyzc(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const HMDT c, const char *sch, int n, mreal zVal); +void mgl_tricont_xyz(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const char *sch, int n, mreal zVal); void mgl_dots(HMGL gr, const HMDT x, const HMDT y, const HMDT z, const char *sch); void mgl_dots_a(HMGL gr, const HMDT x, const HMDT y, const HMDT z, const HMDT a, const char *sch); void mgl_dots_tr(HMGL gr, const HMDT tr, const char *sch); @@ -557,7 +582,14 @@ void mgl_data_diff(HMDT dat, const char *dir); void mgl_data_diff_par(HMDT dat, const HMDT v1, const HMDT v2, const HMDT v3); void mgl_data_diff2(HMDT dat, const char *dir); void mgl_data_swap(HMDT dat, const char *dir); +void mgl_data_roll(HMDT dat, char dir, int num); void mgl_data_mirror(HMDT dat, const char *dir); + +void mgl_data_hankel(HMDT dat, const char *dir); +void mgl_data_sinfft(HMDT dat, const char *dir); +void mgl_data_cosfft(HMDT dat, const char *dir); +void mgl_data_fill_sample(HMDT dat, int num, const char *how); + mreal mgl_data_spline(const HMDT dat, mreal x,mreal y,mreal z); mreal mgl_data_spline1(const HMDT dat, mreal x,mreal y,mreal z); mreal mgl_data_linear(const HMDT dat, mreal x,mreal y,mreal z); diff --git a/include/mgl/mgl_data.h b/include/mgl/mgl_data.h index de9212f..0039db9 100644 --- a/include/mgl/mgl_data.h +++ b/include/mgl/mgl_data.h @@ -17,6 +17,9 @@ * Free Software Foundation, Inc., * * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ +#ifdef _MGL_W_H_ +#warning "MathGL wrapper was enabled. So disable original MathGL classes" +#else #ifndef _MGL_DATA_H_ #define _MGL_DATA_H_ //----------------------------------------------------------------------------- @@ -34,16 +37,6 @@ struct gsl_matrix; #endif #include "mgl/mgl_define.h" //----------------------------------------------------------------------------- -/// Class for drawing in windows (like, mglGraphFLTK, mglGraphQT and so on) -/// Make inherited class and redefine Draw() function if you don't want to use function pointers. -class mglGraph; -struct mglDraw -{ - virtual int Draw(mglGraph *) { return 0; }; - virtual void Reload(int) {}; - virtual ~mglDraw() {}; -}; -//----------------------------------------------------------------------------- /// Class for incapsulating point in space struct mglPoint { @@ -79,7 +72,10 @@ inline mreal Norm(const mglPoint &p) //----------------------------------------------------------------------------- /// Class for working with data array class mglData -{ +{ +protected: + /// Read data array from HDF4 file + void ReadHDF4(const char *fname,const char *data); public: long nx; ///< number of points in 1st dimensions ('x' dimension) @@ -136,10 +132,12 @@ public: /// Rearange data dimensions void Rearrange(int mx, int my=0, int mz=0); - /// Read data array from HDF file + /// Read data array from HDF file (parse HDF4 and HDF5 files) void ReadHDF(const char *fname,const char *data); /// Save data to HDF file - void SaveHDF(const char *fname,const char *data,bool rewrite=false) const; + void SaveHDF(const char *fname,const char *data,bool rewrite=false) const; + /// Put HDF data names into buf as '\t' separated. + int DatasHDF(const char *fname, char *buf, long size); /// Read data from tab-separated text file with auto determining size bool Read(const char *fname); /// Read data from text file with specifeid size @@ -180,7 +178,9 @@ public: /// Modify the data by specified formula assuming x,y,z in range [r1,r2] void Fill(const char *eq, mglPoint r1, mglPoint r2, const mglData *v=0, const mglData *w=0); /// Eqidistantly fill the data to range [x1,x2] in direction \a dir - void Fill(mreal x1,mreal x2,char dir='x'); + void Fill(mreal x1,mreal x2,char dir='x'); + /// Fill data by 'x'/'k' samples for Hankel ('h') or Fourier ('f') transform + void FillSample(int n, const char *how); /// Get column (or slice) of the data filled by formulas of other named columns mglData Column(const char *eq); /// Set names for columns (slices) @@ -270,8 +270,17 @@ public: void Diff2(const char *dir); /// Swap left and right part of the data in given direction (useful for fourier spectrums) void Swap(const char *dir); + /// Roll data along direction \a dir by \a num slices + void Roll(char dir, int num); /// Mirror the data in given direction (useful for fourier spectrums) - void Mirror(const char *dir); + void Mirror(const char *dir); + + /// Hankel transform + void Hankel(const char *dir); + /// Sin-Fourier transform + void SinFFT(const char *dir); + /// Cos-Fourier transform + void CosFFT(const char *dir); /// Interpolate by 5-th order splain the data to given point \a x,\a y,\a z which normalized in range [0, 1] and evaluate its derivatives mreal Spline5(mreal x,mreal y,mreal z,mreal &dx,mreal &dy,mreal &dz) const; @@ -364,3 +373,4 @@ mglData mglJacobian(const mglData &x, const mglData &y); mglData mglJacobian(const mglData &x, const mglData &y, const mglData &z); //----------------------------------------------------------------------------- #endif +#endif diff --git a/include/mgl/mgl_define.h b/include/mgl/mgl_define.h index 665881b..8b4fcb7 100644 --- a/include/mgl/mgl_define.h +++ b/include/mgl/mgl_define.h @@ -26,14 +26,21 @@ #endif #include + +#define MGL_VERSION 11.0 -#ifdef WIN32 +//#ifdef WIN32 +#ifdef _MSC_VER #include const unsigned long mgl_nan[2] = {0xffffffff, 0x7fffffff}; #define NANd (*(double*)mgl_nan) #define NANf (*(float*)&(mgl_nan[1])) +#if(MGL_USE_DOUBLE==1) +#define NAN NANd +#else #define NAN NANd -#if defined(_MSC_VER) +#endif +#ifdef _MSC_VER #define chdir _chdir // BORLAND has chdir #endif #endif @@ -60,6 +67,14 @@ typedef double mreal; typedef float mreal; #endif //----------------------------------------------------------------------------- +#ifndef MGL_CMAP_COLOR +#define MGL_CMAP_COLOR 32 +#endif +//----------------------------------------------------------------------------- +#ifndef MGL_DEF_VIEWER +#define MGL_DEF_VIEWER "evince" +#endif +//----------------------------------------------------------------------------- #define mgl_min(a,b) (((a)>(b)) ? (b) : (a)) #define mgl_max(a,b) (((a)>(b)) ? (a) : (b)) //----------------------------------------------------------------------------- @@ -93,6 +108,7 @@ enum{ // types of predefined curvelinear coordinate systems #define MGL_VEC_END 4 // draw vector to point #define MGL_VEC_MID 8 // draw vector with point at center #define MGL_VEC_DOT 16 // draw dot instead of vector +#define MGL_VEC_GRD 32 // enable color gradient along vector/dash //----------------------------------------------------------------------------- enum{ // Codes for warnings/messages mglWarnNone = 0,// Everything OK @@ -110,6 +126,7 @@ enum{ // Codes for warnings/messages mglWarnLId, // Light: ID is out of range mglWarnSize, // Setsize: size(s) is zero or negative mglWarnFmt, // Format is not supported for that build + mglWarnTern, // Axis ranges are incompatible mglWarnEnd // Maximal number of warnings (must be last) }; //----------------------------------------------------------------------------- @@ -139,6 +156,16 @@ mreal mglStartThread(void *(*func)(void *), mreal (*fres)(mreal,mreal), int n, m #define MGL_NTH_DEF 1 #endif extern int mglNumThr; ///< Number of thread for plotting and data handling +//----------------------------------------------------------------------------- +/// Class for drawing in windows (like, mglGraphFLTK, mglGraphQT and so on) +/// Make inherited class and redefine Draw() function if you don't want to use function pointers. +class mglGraph; +struct mglDraw +{ + virtual int Draw(mglGraph *) { return 0; }; + virtual void Reload(int) {}; + virtual ~mglDraw() {}; +}; //----------------------------------------------------------------------------- #endif //----------------------------------------------------------------------------- diff --git a/include/mgl/mgl_eps.h b/include/mgl/mgl_eps.h index ccae661..ece353f 100644 --- a/include/mgl/mgl_eps.h +++ b/include/mgl/mgl_eps.h @@ -18,6 +18,9 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ //----------------------------------------------------------------------------- +#ifdef _MGL_W_H_ +#warning "MathGL wrapper was enabled. So disable original MathGL classes" +#else #ifndef _MGL_PS_H_ #define _MGL_PS_H_ #include "mgl/mgl_ab.h" @@ -33,14 +36,13 @@ struct mglPrim wchar_t m; ///< mark or symbol id (if applicable) int type; ///< type of primitive (0 - point, 1 - line, 2 - trig, 3 - quad, 4 - glyph) int style; ///< style of pen - unsigned short dash;///< mreal pen dashing +// unsigned short dash;///< mreal pen dashing int id; ///< object id int sid; ///< subplot id void Draw(mglGraphPS *gr); void DrawGL(); bool IsSame(mreal wp,mreal *cp,int st); - void SetStyle(unsigned PDef, int pPos); mglPrim(int t=0) { memset(this,0,sizeof(mglPrim)); type = t; c[3]=1; }; // ~mglPrim() { if(raw) delete []raw; }; inline void operator=(mglPrim &a) { memcpy(this,&a,sizeof(mglPrim)); }; @@ -86,10 +88,11 @@ protected: void add_light(mreal *c, mreal n1,mreal n2, mreal n3); void pnt_plot(long x,long y,mreal z,unsigned char c[4]); private: - void put_line(FILE *fp, long i, mreal wp,mreal *cp,int st, const char *ifmt, const char *nfmt, bool neg); - void put_desc(FILE *fp, const char *pre, const char *ln1, const char *ln2, const char *ln3, const char *suf); + void put_line(void *fp, bool gz, long i, mreal wp,mreal *cp,int st, const char *ifmt, const char *nfmt, bool neg); + void put_desc(void *fp, bool gz, const char *pre, const char *ln1, const char *ln2, const char *ln3, const char *suf); void draw_prim(mglPrim *pr, mreal *pp, mreal *c); }; //----------------------------------------------------------------------------- #endif +#endif //----------------------------------------------------------------------------- diff --git a/include/mgl/mgl_eval.h b/include/mgl/mgl_eval.h index d0e28d0..843387e 100644 --- a/include/mgl/mgl_eval.h +++ b/include/mgl/mgl_eval.h @@ -18,6 +18,9 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ //--------------------------------------------------------------------------- +#ifdef _MGL_W_H_ +#warning "MathGL wrapper was enabled. So disable original MathGL classes" +#else #ifndef _MGL_EVAL_H_ #define _MGL_EVAL_H_ //--------------------------------------------------------------------------- @@ -60,3 +63,4 @@ protected: char *mgl_strdup(const char *s); //----------------------------------------------------------------------------- #endif +#endif diff --git a/include/mgl/mgl_evalc.h b/include/mgl/mgl_evalc.h index 39fc290..3fece5a 100644 --- a/include/mgl/mgl_evalc.h +++ b/include/mgl/mgl_evalc.h @@ -18,6 +18,9 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ //--------------------------------------------------------------------------- +#ifdef _MGL_W_H_ +#warning "MathGL wrapper was enabled. So disable original MathGL classes" +#else #ifndef _MGL_EVALC_H_ #define _MGL_EVALC_H_ //--------------------------------------------------------------------------- @@ -51,3 +54,4 @@ protected: }; //--------------------------------------------------------------------------- #endif +#endif diff --git a/include/mgl/mgl_f.h b/include/mgl/mgl_f.h index b128e2f..94c85c4 100644 --- a/include/mgl/mgl_f.h +++ b/include/mgl/mgl_f.h @@ -57,6 +57,22 @@ void mgl_calc_xyz_(uintptr_t *gr, int *xs, int *ys, mreal *x, mreal *y, mreal *z void mgl_calc_scr_(uintptr_t *gr, mreal *x, mreal *y, mreal *z, int *xs, int *ys); //void mgl_fltk_thread_(); //void mgl_qt_thread_(); + +void mgl_wnd_set_delay_(uintptr_t *gr, mreal *dt); +void mgl_wnd_set_auto_clf_(uintptr_t *gr, int *val); +void mgl_wnd_set_show_mouse_pos_(uintptr_t *gr, int *val); +void mgl_wnd_set_clf_update_(uintptr_t *gr, int *val); +void mgl_wnd_toggle_alpha_(uintptr_t *gr); +void mgl_wnd_toggle_light_(uintptr_t *gr); +void mgl_wnd_toggle_zoom_(uintptr_t *gr); +void mgl_wnd_toggle_rotate_(uintptr_t *gr); +void mgl_wnd_toggle_no_(uintptr_t *gr); +void mgl_wnd_update_(uintptr_t *gr); +void mgl_wnd_reload_(uintptr_t *gr, int *o); +void mgl_wnd_adjust_(uintptr_t *gr); +void mgl_wnd_next_frame_(uintptr_t *gr); +void mgl_wnd_prev_frame_(uintptr_t *gr); +void mgl_wnd_animation_(uintptr_t *gr); /*****************************************************************************/ uintptr_t mgl_create_data_(); uintptr_t mgl_create_data_size_(int *nx, int *ny, int *nz); @@ -90,7 +106,8 @@ void mgl_set_draw_face_(uintptr_t *gr, int *enable); void mgl_set_scheme_(uintptr_t *gr, char *sch, int); void mgl_load_font_(uintptr_t *gr, char *name, char *path, int l, int n); void mgl_copy_font_(uintptr_t *gr, uintptr_t *gr_from); -void mgl_restore_font_(uintptr_t *gr); +void mgl_restore_font_(uintptr_t *gr); +int mgl_get_warn_(uintptr_t *gr); /*****************************************************************************/ /* Export to file or to memory */ /*****************************************************************************/ @@ -130,15 +147,19 @@ void mgl_set_ambbr_(uintptr_t *gr, mreal *i); /*****************************************************************************/ /* Scale and rotate */ /*****************************************************************************/ +void mgl_mat_push_(uintptr_t *gr); +void mgl_mat_pop_(uintptr_t *gr); void mgl_identity_(uintptr_t *graph, int *rel); void mgl_clf_(uintptr_t *graph); void mgl_flush_(uintptr_t *gr); void mgl_clf_rgb_(uintptr_t *graph, mreal *r, mreal *g, mreal *b); void mgl_subplot_(uintptr_t *graph, int *nx,int *ny,int *m); void mgl_subplot_d_(uintptr_t *graph, int *nx,int *ny,int *m,mreal *dx,mreal *dy); +void mgl_subplot_s_(uintptr_t *graph, int *nx,int *ny,int *m, const char *s,int); void mgl_inplot_(uintptr_t *graph, mreal *x1,mreal *x2,mreal *y1,mreal *y2); void mgl_relplot_(uintptr_t *graph, mreal *x1,mreal *x2,mreal *y1,mreal *y2); void mgl_columnplot_(uintptr_t *graph, int *num, int *i); +void mgl_columnplot_d_(uintptr_t *graph, int *num, int *i, mreal *d); void mgl_stickplot_(uintptr_t *graph, int *num, int *i, mreal *tet, mreal *phi); void mgl_aspect_(uintptr_t *graph, mreal *Ax,mreal *Ay,mreal *Az); void mgl_rotate_(uintptr_t *graph, mreal *TetX,mreal *TetZ,mreal *TetY); @@ -156,6 +177,8 @@ void mgl_set_caxis_(uintptr_t *graph, mreal *C1,mreal *C2); void mgl_set_axis_(uintptr_t *graph, mreal *x1, mreal *y1, mreal *z1, mreal *x2, mreal *y2, mreal *z2, mreal *x0, mreal *y0, mreal *z0); void mgl_set_axis_3d_(uintptr_t *graph, mreal *x1, mreal *y1, mreal *z1, mreal *x2, mreal *y2, mreal *z2); void mgl_set_axis_2d_(uintptr_t *graph, mreal *x1, mreal *y1, mreal *x2, mreal *y2); +inline void mgl_set_ranges_(uintptr_t *graph, mreal *x1, mreal *x2, mreal *y1, mreal *y2, mreal *z1, mreal *z2) +{ mgl_set_axis_3d_(graph, x1,y1,z1,x2,y2,z2); }; void mgl_set_origin_(uintptr_t *graph, mreal *x0, mreal *y0, mreal *z0); void mgl_set_tick_origin_(uintptr_t *graph, mreal *x0, mreal *y0, mreal *z0); void mgl_set_crange_(uintptr_t *graph, uintptr_t *a, int *add); @@ -208,6 +231,7 @@ void mgl_clear_legend_(uintptr_t *graph); void mgl_legend_xy_(uintptr_t *graph, mreal *x, mreal *y, const char *font, mreal *size, mreal *llen,int); void mgl_legend_(uintptr_t *graph, int *where, const char *font, mreal *size, mreal *llen,int); void mgl_set_legend_box_(uintptr_t *gr, int *enable); +void mgl_set_legend_marks_(uintptr_t *gr, int *num); /*****************************************************************************/ /* 1D plotting functions */ /*****************************************************************************/ @@ -216,8 +240,6 @@ void mgl_fplot_xyz_(uintptr_t *graph, const char *fx, const char *fy, const char void mgl_plot_xyz_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *pen,int); void mgl_plot_xy_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, const char *pen,int); void mgl_plot_(uintptr_t *graph, uintptr_t *y, const char *pen,int); -void mgl_plot_2_(uintptr_t *graph, uintptr_t *a, const char *pen,int); -void mgl_plot_3_(uintptr_t *graph, uintptr_t *a, const char *pen,int); void mgl_radar_(uintptr_t *graph, uintptr_t *a, const char *pen, mreal *r, int); void mgl_boxplot_xy_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, const char *pen,int); void mgl_boxplot_(uintptr_t *graph, uintptr_t *y, const char *pen,int); @@ -228,33 +250,24 @@ void mgl_area_xyz_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, uintptr_t *z, c void mgl_area_xy_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, const char *pen,int); void mgl_area_s_(uintptr_t *graph, uintptr_t *y, const char *pen,int); void mgl_area_(uintptr_t *graph, uintptr_t *y, const char *pen,int); -void mgl_area_2_(uintptr_t *graph, uintptr_t *a, const char *pen,int); -void mgl_area_3_(uintptr_t *graph, uintptr_t *a, const char *pen,int); void mgl_region_xy_(uintptr_t *graph, uintptr_t *x, uintptr_t *y1, uintptr_t *y2, const char *pen, int *inside, int); void mgl_region_(uintptr_t *graph, uintptr_t *y1, uintptr_t *y2, const char *pen, int *inside, int); void mgl_mark_(uintptr_t *graph, mreal *x,mreal *y,mreal *z,const char *mark,int); void mgl_stem_xyz_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *pen,int); void mgl_stem_xy_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, const char *pen,int); void mgl_stem_(uintptr_t *graph, uintptr_t *y, const char *pen,int); -void mgl_stem_2_(uintptr_t *graph, uintptr_t *a, const char *pen,int); -void mgl_stem_3_(uintptr_t *graph, uintptr_t *a, const char *pen,int); void mgl_step_xyz_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *pen,int); void mgl_step_xy_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, const char *pen,int); void mgl_step_(uintptr_t *graph, uintptr_t *y, const char *pen,int); -void mgl_step_2_(uintptr_t *graph, uintptr_t *a, const char *pen,int); -void mgl_step_3_(uintptr_t *graph, uintptr_t *a, const char *pen,int); void mgl_bars_xyz_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *pen,int); void mgl_bars_xy_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, const char *pen,int); void mgl_bars_(uintptr_t *graph, uintptr_t *y, const char *pen,int); -void mgl_bars_2_(uintptr_t *graph, uintptr_t *a, const char *pen,int); -void mgl_bars_3_(uintptr_t *graph, uintptr_t *a, const char *pen,int); void mgl_barh_yx_(uintptr_t *graph, uintptr_t *y, uintptr_t *v, const char *pen,int); void mgl_barh_(uintptr_t *graph, uintptr_t *v, const char *pen,int); /*****************************************************************************/ /* Advanced 1D plotting functions */ /*****************************************************************************/ void mgl_torus_(uintptr_t *graph, uintptr_t *r, uintptr_t *z, const char *pen,int); -void mgl_torus_2_(uintptr_t *graph, uintptr_t *a, const char *pen,int); void mgl_text_xyz_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, uintptr_t *z,const char *text, const char *font, mreal *size,int,int); void mgl_text_xy_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, const char *text, const char *font, mreal *size,int,int); void mgl_text_y_(uintptr_t *graph, uintptr_t *y, const char *text, const char *font, mreal *size,int,int); @@ -371,6 +384,10 @@ void mgl_pipe_xyz_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, uintptr_t *z, u void mgl_pipe_3d_(uintptr_t *graph, uintptr_t *ax, uintptr_t *ay, uintptr_t *az, const char *sch, mreal *r0, int *num, int *central,int); void mgl_dew_xy_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *ax, uintptr_t *ay, const char *sch, mreal *zVal,int l); void mgl_dew_2d_(uintptr_t *gr, uintptr_t *ax, uintptr_t *ay, const char *sch, mreal *zVal,int l); + +void mgl_grad_xyz_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *ph, const char *sch, int *num, int); +void mgl_grad_xy_(uintptr_t *graph, uintptr_t *x, uintptr_t *y, uintptr_t *ph, const char *sch, int *num, mreal *zVal,int); +void mgl_grad_(uintptr_t *graph, uintptr_t *ph, const char *sch, int *num, mreal *zVal,int); /*****************************************************************************/ /* 3D plotting functions */ /*****************************************************************************/ @@ -420,6 +437,15 @@ void mgl_beam_(uintptr_t *gr, uintptr_t *tr, uintptr_t *g1, uintptr_t *g2, uintp void mgl_triplot_xyzc_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *c, const char *sch,int); void mgl_triplot_xyz_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *sch,int); void mgl_triplot_xy_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, const char *sch, mreal *zVal,int); +void mgl_quadplot_xyzc_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *c, const char *sch,int); +void mgl_quadplot_xyz_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *sch,int); +void mgl_quadplot_xy_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, const char *sch, mreal *zVal,int); + +void mgl_tricont_xyzcv_(uintptr_t *gr, uintptr_t *v, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *c, const char *sch, mreal *zVal,int); +void mgl_tricont_xyzv_(uintptr_t *gr, uintptr_t *v, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *sch, mreal *zVal,int); +void mgl_tricont_xyzc_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *c, const char *sch, int *n, mreal *zVal, int); +void mgl_tricont_xyz_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *sch, int *n, mreal *zVal, int); + void mgl_dots_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *sch,int); void mgl_dots_a_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *a, const char *sch,int); void mgl_dots_tr_(uintptr_t *gr, uintptr_t *tr, const char *sch,int); @@ -514,7 +540,14 @@ void mgl_data_diff_(uintptr_t *dat, const char *dir,int); void mgl_data_diff_par_(uintptr_t *dat, uintptr_t *v1, uintptr_t *v2, uintptr_t *v3); void mgl_data_diff2_(uintptr_t *dat, const char *dir,int); void mgl_data_swap_(uintptr_t *dat, const char *dir,int); -void mgl_data_mirror_(uintptr_t *dat, const char *dir,int); +void mgl_data_roll_(uintptr_t *dat, const char *dir, int *num, int); +void mgl_data_mirror_(uintptr_t *dat, const char *dir,int); + +void mgl_data_hankel_(uintptr_t *dat, const char *dir,int); +void mgl_data_sinfft_(uintptr_t *dat, const char *dir,int); +void mgl_data_cosfft_(uintptr_t *dat, const char *dir,int); +void mgl_data_fill_sample_(uintptr_t *dat, int num, const char *how,int); + mreal mgl_data_spline_(uintptr_t *dat, mreal *x,mreal *y,mreal *z); mreal mgl_data_spline1_(uintptr_t *dat, mreal *x,mreal *y,mreal *z); mreal mgl_data_linear_(uintptr_t *dat, mreal *x,mreal *y,mreal *z); diff --git a/include/mgl/mgl_fltk.h b/include/mgl/mgl_fltk.h index 6853003..9cce925 100644 --- a/include/mgl/mgl_fltk.h +++ b/include/mgl/mgl_fltk.h @@ -18,6 +18,9 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ //----------------------------------------------------------------------------- +#ifdef _MGL_W_H_ +#warning "MathGL wrapper was enabled. So disable original MathGL classes" +#else #ifndef _MGL_FLTK_H_ #define _MGL_FLTK_H_ //----------------------------------------------------------------------------- @@ -138,4 +141,5 @@ protected: }; //----------------------------------------------------------------------------- #endif +#endif //----------------------------------------------------------------------------- diff --git a/include/mgl/mgl_font.h b/include/mgl/mgl_font.h index d14725f..8526283 100644 --- a/include/mgl/mgl_font.h +++ b/include/mgl/mgl_font.h @@ -18,6 +18,9 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ //----------------------------------------------------------------------------- +#ifdef _MGL_W_H_ +#warning "MathGL wrapper was enabled. So disable original MathGL classes" +#else #ifndef _MGL_FONT_H_ #define _MGL_FONT_H_ @@ -102,7 +105,7 @@ protected: short *numt[4]; ///< Number of triangles in glyph description (for solid font) short *numl[4]; ///< Number of lines in glyph description (for wire font) short *width[4]; ///< Width of glyph for wire font - mreal fact[4]; ///< Divider for width of glyph + float fact[4]; ///< Divider for width of glyph unsigned numg; ///< Number of glyphs short *buf; ///< Buffer for glyph descriptions long numb; ///< Buffer size @@ -123,13 +126,14 @@ protected: unsigned Symbol(char ch); private: mreal get_ptr(long &i,unsigned *str, unsigned **b1, unsigned **b2,mreal &w1,mreal &w2, mreal f1, mreal f2, int st); - void read_data(FILE *fp, mreal *ff, short *wdt, short *numl, unsigned *posl, short *numt, unsigned *post, unsigned &cur); + bool read_data(const char *fname, float *ff, short *wdt, short *numl, unsigned *posl, short *numt, unsigned *post, unsigned &cur); void main_copy(); - bool read_main(const char *base, const char *path, unsigned &cur); + bool read_main(const char *fname, unsigned &cur); void mem_alloc(); bool read_def(unsigned &cur); void draw_ouline(mglGraph *gr, int st, mreal x, mreal y, mreal f, mreal g, mreal ww, char ccol); }; //----------------------------------------------------------------------------- #endif +#endif //----------------------------------------------------------------------------- diff --git a/include/mgl/mgl_gl.h b/include/mgl/mgl_gl.h index e2f342d..100b0dd 100644 --- a/include/mgl/mgl_gl.h +++ b/include/mgl/mgl_gl.h @@ -18,6 +18,9 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ //----------------------------------------------------------------------------- +#ifdef _MGL_W_H_ +#warning "MathGL wrapper was enabled. So disable original MathGL classes" +#else #ifndef _MGL_GL_H_ #define _MGL_GL_H_ #ifdef WIN32 @@ -52,6 +55,7 @@ public: void SetSize(int ,int ){}; void Ball(mreal x,mreal y,mreal z,mglColor col=RC,mreal alpha=1); + void Glyph(mreal x, mreal y, mreal f, int style, long icode, char col); // void Glyph(mreal x,mreal y, mreal f, int nt, const short *trig, int nl, const short *line); protected: mglColor def_col; @@ -82,4 +86,5 @@ protected: }; //----------------------------------------------------------------------------- #endif +#endif //----------------------------------------------------------------------------- diff --git a/include/mgl/mgl_glut.h b/include/mgl/mgl_glut.h index 047783b..65c4f48 100644 --- a/include/mgl/mgl_glut.h +++ b/include/mgl/mgl_glut.h @@ -18,6 +18,9 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ //----------------------------------------------------------------------------- +#ifdef _MGL_W_H_ +#warning "MathGL wrapper was enabled. So disable original MathGL classes" +#else #ifndef _MGL_GLUT_H_ #define _MGL_GLUT_H_ #include "mgl/mgl_gl.h" @@ -54,4 +57,5 @@ private: }; //----------------------------------------------------------------------------- #endif +#endif //----------------------------------------------------------------------------- diff --git a/include/mgl/mgl_idtf.h b/include/mgl/mgl_idtf.h index 417872d..198e8a6 100644 --- a/include/mgl/mgl_idtf.h +++ b/include/mgl/mgl_idtf.h @@ -18,6 +18,9 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ //----------------------------------------------------------------------------- +#ifdef _MGL_W_H_ +#warning "MathGL wrapper was enabled. So disable original MathGL classes" +#else #ifndef _MGL_IDTF_H_ #define _MGL_IDTF_H_ @@ -372,4 +375,5 @@ protected: }; //----------------------------------------------------------------------------- #endif +#endif //----------------------------------------------------------------------------- diff --git a/include/mgl/mgl_parse.h b/include/mgl/mgl_parse.h index 31444ed..50cb48b 100644 --- a/include/mgl/mgl_parse.h +++ b/include/mgl/mgl_parse.h @@ -18,6 +18,9 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ //----------------------------------------------------------------------------- +#ifdef _MGL_W_H_ +#warning "MathGL wrapper was enabled. So disable original MathGL classes" +#else #ifndef _MGL_PARSE_H_ #define _MGL_PARSE_H_ #include "mgl/mgl.h" @@ -79,6 +82,24 @@ struct mglNum void MoveAfter(mglNum *var); }; //----------------------------------------------------------------------------- +/// Structure for function name and position. +struct mglFunc +{ + long pos; + int narg; + wchar_t func[32]; + mglFunc *next; + mglFunc(long p, const wchar_t *f, mglFunc *prev=0); + ~mglFunc() { if(next) delete next; }; +}; +//----------------------------------------------------------------------------- +/// Structure for stack of functions and its arguments. +struct mglFnStack +{ + long pos; + wchar_t *par[9]; +}; +//----------------------------------------------------------------------------- /// Structure for the command argument (see mglGraph::Exec()). class mglParse { @@ -110,6 +131,10 @@ public: void Execute(mglGraph *gr, const wchar_t *text, void (*error)(int line, int kind, mglGraph *gr)=NULL); /// Execute MGL script text with '\n' separated lines void Execute(mglGraph *gr, const char *text, void (*error)(int line, int kind, mglGraph *gr)=NULL); + /// Scan for functions (use NULL for reset) + void ScanFunc(const wchar_t *line); + /// Check if name is function and return its address (or 0 if no) + long IsFunc(const wchar_t *name, int *narg=0); /// Find variable or return 0 if absent mglVar *FindVar(const char *name); /// Find variable or return 0 if absent @@ -142,18 +167,22 @@ public: void DeleteVar(const wchar_t *name); private: long parlen; ///< Length of parameter strings - wchar_t *par[10]; ///< Parameter for substituting instead of $1, ..., $9 + wchar_t *par[40]; ///< Parameter for substituting instead of $1, ..., $9 wchar_t *out; ///< Buffer for writing C++ code (if not NULL) wchar_t leg[128]; ///< Buffer for legend bool opt[16]; ///< Set on/off optional parameters for command argument mreal val[20]; ///< Values for optional parameters bool Once; ///< Flag for command which should be executed only once bool Skip; ///< Flag that commands should be skiped (inside 'once' block) - int if_stack[20]; ///< Stack for if-else-endif commands + int if_stack[40]; ///< Stack for if-else-endif commands int if_pos; ///< position in if_stack - int if_for[10]; ///< position in if_stack for for-cycle start + mglFunc *func; ///< function names and position + mglFnStack *fn_stack; ///< function calls stack + int fn_pos; ///< position in function stack + int fn_num; ///< size of function stack + int if_for[40]; ///< position in if_stack for for-cycle start mglData *fval; ///< Values for for-cycle. Note that nx - number of elements, ny - next element, nz - address (or string number) of first cycle command - int for_stack[10]; ///< The order of for-variables + int for_stack[40]; ///< The order of for-variables int for_addr; ///< Flag for saving address in variable (for_addr-1) bool for_br; ///< Break is switched on (skip all comands until 'next') @@ -169,11 +198,14 @@ private: int FlowExec(mglGraph *gr, const wchar_t *com, long n, mglArg *a); /// Parse and execute the unicode string of MGL script int ParseDat(mglGraph *gr, const wchar_t *str, mglData &res); + /// Parse $N arguments + void PutArg(const wchar_t *string, wchar_t *str, bool def); /// In skip mode bool inline ifskip() { return (if_pos>0 && !(if_stack[if_pos-1]&1)); }; bool inline skip() { return (Skip || ifskip() || for_br); }; }; //----------------------------------------------------------------------------- #endif +#endif //----------------------------------------------------------------------------- diff --git a/include/mgl/mgl_qt.h b/include/mgl/mgl_qt.h index d721b17..cf83eec 100644 --- a/include/mgl/mgl_qt.h +++ b/include/mgl/mgl_qt.h @@ -18,6 +18,9 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ //----------------------------------------------------------------------------- +#ifdef _MGL_W_H_ +#warning "MathGL wrapper was enabled. So disable original MathGL classes" +#else #ifndef MGL_QT_H #define MGL_QT_H //----------------------------------------------------------------------------- @@ -55,7 +58,7 @@ using mglGraphAB::Window; /// Create a window for plotting. Now implemeted only for GLUT. void Window(int argc, char **argv, int (*draw)(mglGraph *gr, void *p), const char *title,void *par=NULL, - void (*reload)(int next, void *p)=NULL, bool maximize=false); + void (*reload)(int next, void *p)=NULL, bool maximize=false); /// Switch on/off transparency (do not overwrite switches in user drawing function) void ToggleAlpha(); /// Switch on/off lighting (do not overwrite switches in user drawing function) @@ -185,4 +188,5 @@ private: void convertFromGraph(QPixmap &pic, mglGraphAB *gr, uchar **buf); //----------------------------------------------------------------------------- #endif +#endif //----------------------------------------------------------------------------- diff --git a/include/mgl/mgl_w.h b/include/mgl/mgl_w.h index c375672..65fbee1 100644 --- a/include/mgl/mgl_w.h +++ b/include/mgl/mgl_w.h @@ -20,6 +20,7 @@ #ifdef _MGL_DATA_H_ #warning "MathGL wrapper is disabled due to using original MathGL classes" #else +#ifndef _MGL_W_H_ #define _MGL_W_H_ #ifndef NO_GSL @@ -152,6 +153,7 @@ public: { mgl_data_modify_vw(a,eq,v.a, w.a); }; inline void Modify(const char *eq,const mglData &v){ mgl_data_modify_vw(a,eq,v.a, NULL); }; inline void Fill(double x1,double x2,char dir='x') { mgl_data_fill(a,x1,x2,dir); }; + inline void FillSample(int n, const char *how) { mgl_data_fill_sample(a,n,how); }; inline mglData Column(const char *eq) { return mglData(mgl_data_column(a,eq)); }; inline void SetColumnId(const char *ids) { mgl_data_set_id(a,ids); }; inline void Squeeze(int rx,int ry=1,int rz=1,bool smooth=false) @@ -211,8 +213,13 @@ public: { mgl_data_diff_par(a,v1.a,v2.a,v3.a); }; inline void Diff2(const char *dir) { mgl_data_diff2(a,dir); }; inline void Swap(const char *dir) { mgl_data_swap(a,dir); }; - inline void Mirror(const char *dir) { mgl_data_mirror(a,dir); }; - + inline void Roll(char dir, int num) { mgl_data_roll(a,dir,num); }; + inline void Mirror(const char *dir) { mgl_data_mirror(a,dir); }; + + inline void Hankel(const char *dir) { mgl_data_hankel(a,dir); }; + inline void SinFFT(const char *dir) { mgl_data_sinfft(a,dir); }; + inline void CosFFT(const char *dir) { mgl_data_cosfft(a,dir); }; + inline double Spline(double x,double y=0,double z=0) { return mgl_data_spline(a,x,y,z); }; inline double Spline1(double x,double y=0,double z=0) @@ -286,6 +293,7 @@ public: ~mglGraph() { mgl_delete_graph(self); }; inline HMGL Self() { return self; }; + inline int GetWarn() { return mgl_get_warn(self); }; inline void DefaultPlotParam() { mgl_set_def_param(self); }; inline void SetPalColor(int n, float r, float g, float b) { if(n>=0 && n<100) mgl_set_pal_color(self, n, r, g, b); }; @@ -315,12 +323,13 @@ public: inline void SetPlotFactor(float val) { mgl_set_plotfactor(self, val); }; inline void SetDrawFace(bool enable) { mgl_set_draw_face(self, enable);}; inline void SetLegendBox(bool enable) { mgl_set_legend_box(self, enable); }; + inline void SetLegendMarks(int num) { mgl_set_legend_marks(self, num); }; inline void LoadFont(const char *name, const char *path=NULL) { mgl_load_font(self, name, path); }; inline void CopyFont(mglGraph *gr) { mgl_copy_font(self, gr->Self());}; inline void RestoreFont() { mgl_restore_font(self); }; - inline void ShowImage(const char *viewer="kuickshow", bool keep=0) + inline void ShowImage(const char *viewer=0, bool keep=0) { mgl_show_image(self, viewer, keep); }; inline void WriteFrame(const char *fname,const char *descr="") { mgl_write_frame(self, fname, descr); }; @@ -346,7 +355,7 @@ public: inline void ResetFrames() { mgl_reset_frames(self); }; inline void Flush() { mgl_flush(self); }; - void GetRGB(char *imgdata, int imglen) + inline void GetRGB(char *imgdata, int imglen) { int w=mgl_get_width(self); int h=mgl_get_height(self); @@ -414,11 +423,13 @@ public: { mgl_clf_rgb(self, r, g, b); }; inline void SubPlot(int nx,int ny,int m, float dx=0, float dy=0) { mgl_subplot_d(self, nx, ny, m, dx, dy); }; - inline void InPlot(float x1,float x2,float y1,float y2, bool rel=false) + inline void SubPlot(int nx,int ny,int m, const char *style) + { mgl_subplot_s(self, nx, ny, m, style); }; + inline void InPlot(float x1,float x2,float y1,float y2, bool rel=true) { if(rel) mgl_inplot(self, x1, x2, y1, y2); else mgl_relplot(self, x1, x2, y1, y2); }; - inline void ColumnPlot(int num, int ind) - { mgl_columnplot(self,num,ind); }; + inline void ColumnPlot(int num, int ind, float d=0) + { mgl_columnplot_d(self,num,ind,d); }; inline void StickPlot(int num, int i, float tet, float phi) { mgl_stickplot(self,num,i,tet,phi); }; inline void Aspect(float Ax,float Ay,float Az) @@ -459,13 +470,13 @@ public: inline void Box(const char *col="k", bool ticks=true) { mgl_box_str(self, col, ticks); }; - inline void Axis(const char *dir="xyz", bool adjust=false) + inline void Axis(const char *dir="xyzt", bool adjust=false) { if(adjust) mgl_adjust_ticks(self,dir); mgl_axis(self, dir); }; - inline void Grid(const char *dir="xyz",const char *pen="B") + inline void Grid(const char *dir="xyzt",const char *pen="B") { mgl_axis_grid(self, dir, pen); }; inline void Label(char dir, const char *text, float pos=+1, float size=-1.4, float shift=0) { mgl_label_ext(self, dir, text, pos, size, shift); }; - inline void Label(char dir, const wchar_t *text, float pos=+1, float size=-1.4, float shift=0) + inline void Label(char dir, const wchar_t *text, float pos=0, float size=-1.4, float shift=0) { mgl_labelw_ext(self, dir, text, pos, size, shift); }; void Label(double x, double y, const char *text, const char *fnt=0, double size=-1.4) { mgl_label_xy(self,x,y,text,fnt,size); } @@ -562,10 +573,10 @@ public: { mgl_tens(self, y.a, c.a, pen); }; inline void Area(mglData &x, mglData &y, mglData &z, const char *pen="") { mgl_area_xyz(self, x.a, y.a, z.a, pen); }; - inline void Area(mglData &x, mglData &y, const char *pen="", bool sum=false) - { if(sum) mgl_area_xy(self, x.a, y.a, pen); else mgl_area_xys(self, x.a, y.a, pen); }; - inline void Area(mglData &y, const char *pen="", bool sum=false) - { if(sum) mgl_area(self, y.a, pen); else mgl_area_s(self, y.a, pen); }; + inline void Area(mglData &x, mglData &y, const char *pen="") + { mgl_area_xy(self, x.a, y.a, pen); }; + inline void Area(mglData &y, const char *pen="") + { mgl_area(self, y.a, pen); }; inline void Stem(mglData &x, mglData &y, mglData &z, const char *pen="") { mgl_stem_xyz(self, x.a, y.a, z.a, pen); }; inline void Stem(mglData &x, mglData &y, const char *pen="") @@ -799,6 +810,13 @@ public: inline void FlowP(float x0, float y0, float z0, mglData &ax, mglData &ay, mglData &az, const char *sch="") { mgl_flowp_3d(self, x0, y0, z0, ax.a, ay.a, az.a, sch); }; + inline void Grad(const mglData &x, const mglData &y, const mglData &z, const mglData &phi, const char *sch=0, int num=3) + { mgl_grad_xyz(self,x.a,y.a,z.a,phi.a,sch,num); } + inline void Grad(const mglData &x, const mglData &y, const mglData &phi, const char *sch=0, int num=5, mreal zVal=NAN) + { mgl_grad_xy(self,x.a,y.a,phi.a,sch,num,zVal); } + inline void Grad(const mglData &phi, const char *sch=0, int num=5, mreal zVal=NAN) + { mgl_grad(self,phi.a,sch,num,zVal); } + inline void Pipe(mglData &x, mglData &y, mglData &ax, mglData &ay, const char *sch="", float r0=0.05, int num=5, bool central=true, float zVal=NAN) { mgl_pipe_xy(self, x.a, y.a, ax.a, ay.a, sch, r0, num, central, zVal); }; inline void Pipe(mglData &ax, mglData &ay, const char *sch="", float r0=0.05, int num=5, bool central=true, float zVal=NAN) @@ -876,6 +894,22 @@ public: { mgl_triplot_xyz(self, nums.a, x.a, y.a, z.a, sch); }; inline void TriPlot(mglData &nums, mglData &x, mglData &y, const char *sch="", float zVal=NAN) { mgl_triplot_xy(self, nums.a, x.a, y.a, sch, zVal); }; + inline void QuadPlot(mglData &nums, mglData &x, mglData &y, mglData &z, mglData &c, const char *sch="") + { mgl_quadplot_xyzc(self, nums.a, x.a, y.a, z.a, c.a, sch); }; + inline void QuadPlot(mglData &nums, mglData &x, mglData &y, mglData &z, const char *sch="") + { mgl_quadplot_xyz(self, nums.a, x.a, y.a, z.a, sch); }; + inline void QuadPlot(mglData &nums, mglData &x, mglData &y, const char *sch="", float zVal=NAN) + { mgl_quadplot_xy(self, nums.a, x.a, y.a, sch, zVal); }; + + inline void TriCont(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const char *sch=0,int num=7,mreal zVal=NAN) + { mgl_tricont_xyz(self, nums.a, x.a, y.a, z.a, sch, num, zVal); }; + inline void TriContV(const mglData &v, const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const char *sch=0,mreal zVal=NAN) + { mgl_tricont_xyzv(self, v.a, nums.a, x.a, y.a, z.a, sch, zVal); }; + inline void TriCont(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const mglData &a, const char *sch=0,int num=7,mreal zVal=NAN) + { mgl_tricont_xyzc(self, nums.a, x.a, y.a, z.a, a.a, sch, num, zVal); }; + inline void TriContV(const mglData &v, const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const mglData &a, const char *sch=0,mreal zVal=NAN) + { mgl_tricont_xyzcv(self, v.a, nums.a, x.a, y.a, z.a, a.a, sch, zVal); }; + inline void Dots(mglData &x, mglData &y, mglData &z, const char *sch="") { mgl_dots(self, x.a, y.a, z.a, sch); }; inline void Dots(mglData &x, mglData &y, mglData &z, mglData &a, const char *sch="") @@ -990,6 +1024,7 @@ public: { return mgl_parse(gr->Self(), self, str, pos); }; inline int Parse(mglGraph *gr, const wchar_t *str, int pos) { return mgl_parsew(gr->Self(), self, str, pos); }; + inline void ScanFunc(const wchar_t *line){ mgl_scan_func(self, line); }; inline void Execute(mglGraph *gr, const char *str) { mgl_parse_text(gr->Self(), self, str); }; inline void Execute(mglGraph *gr, const wchar_t *str) @@ -999,3 +1034,4 @@ public: }; //----------------------------------------------------------------------------- #endif +#endif diff --git a/include/mgl/mgl_wx.h b/include/mgl/mgl_wx.h index 940993b..f7ddf66 100644 --- a/include/mgl/mgl_wx.h +++ b/include/mgl/mgl_wx.h @@ -23,6 +23,7 @@ #include #include #include +#include #include //----------------------------------------------------------------------------- /// Class is Wx widget which display MathGL graphics diff --git a/include/mgl/mgl_zb.h b/include/mgl/mgl_zb.h index c4c2c0d..356c632 100644 --- a/include/mgl/mgl_zb.h +++ b/include/mgl/mgl_zb.h @@ -18,6 +18,9 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ //----------------------------------------------------------------------------- +#ifdef _MGL_W_H_ +#warning "MathGL wrapper was enabled. So disable original MathGL classes" +#else #ifndef _MGL_ZB_H_ #define _MGL_ZB_H_ #include "mgl/mgl_ab.h" @@ -55,4 +58,5 @@ protected: }; //----------------------------------------------------------------------------- #endif +#endif //----------------------------------------------------------------------------- diff --git a/lang/Makefile.in b/lang/Makefile.in index 59616cc..af61832 100644 --- a/lang/Makefile.in +++ b/lang/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.11 from Makefile.am. +# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, @@ -149,6 +149,8 @@ GREP = @GREP@ GSL_FLAGS = @GSL_FLAGS@ GSL_LIBS = @GSL_LIBS@ HAVE_SWIG = @HAVE_SWIG@ +HDF4_FLAGS = @HDF4_FLAGS@ +HDF4_LIBS = @HDF4_LIBS@ HDF5_FLAGS = @HDF5_FLAGS@ HDF5_LIBS = @HDF5_LIBS@ INSTALL = @INSTALL@ @@ -169,6 +171,7 @@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MGL_AGE = @MGL_AGE@ MGL_CURRENT = @MGL_CURRENT@ +MGL_RELEASE = @MGL_RELEASE@ MGL_REVISION = @MGL_REVISION@ MKDIR_P = @MKDIR_P@ MOC = @MOC@ diff --git a/mgl/CMakeLists.txt b/mgl/CMakeLists.txt index 31f8a6f..6016ce0 100644 --- a/mgl/CMakeLists.txt +++ b/mgl/CMakeLists.txt @@ -53,6 +53,12 @@ if(use_hdf5 OR use_hdf5_18) include_directories(${HDF5_INCLUDE_DIR}) endif(use_hdf5 OR use_hdf5_18) +if(use_hdf4) + target_link_libraries(mgl ${HDF4_LIB}) + add_definitions(-DHAVE_HDF4) + include_directories(${HDF4_INCLUDE_DIR}) +endif(use_hdf4) + if(use_gsl) target_link_libraries(mgl ${GSL_LIB} ${GSL_CBLAS_LIB} ) add_definitions(-DHAVE_GSL) @@ -72,7 +78,7 @@ endif(UNIX) set_target_properties(mgl PROPERTIES SOVERSION 5.0.0) install( - TARGETS mgl + TARGETS mgl mgl-static RUNTIME DESTINATION bin ARCHIVE DESTINATION lib LIBRARY DESTINATION lib diff --git a/mgl/Makefile.am b/mgl/Makefile.am index 46a6086..c2ad4a4 100644 --- a/mgl/Makefile.am +++ b/mgl/Makefile.am @@ -20,7 +20,7 @@ libmgl_la_LIBADD = $(PNG_LIBS) $(GL_LIBS) $(LOPENMP) libmgl_la_LDFLAGS = -no-undefined -version-info $(MGL_CURRENT):$(MGL_REVISION):$(MGL_AGE) libmgl_la_CXXFLAGS = $(WIDGETS) -DMGL_FONT_PATH=\"$(datadir)/$(PACKAGE)/fonts/\" \ - -DMOD_LIB_DIR=\"$(libdir)/mgl/\" $(HDF5_FLAGS) $(GIF_FLAGS) $(JPEG_FLAGS) \ + -DMOD_LIB_DIR=\"$(libdir)/mgl/\" $(HDF5_FLAGS) $(HDF4_FLAGS) $(GIF_FLAGS) $(JPEG_FLAGS) \ $(TIFF_FLAGS) $(PNG_FLAGS) $(FLTK_FLAGS) $(ADDON_FLAGS) $(AM_CXXFLAGS) \ $(PTHREAD_FLAGS) @@ -32,6 +32,10 @@ if USE_GSL libmgl_la_LIBADD += $(GSL_LIBS) endif +if USE_HDF4 +libmgl_la_LIBADD += $(HDF4_LIBS) +endif + if USE_HDF5 libmgl_la_LIBADD += $(HDF5_LIBS) endif diff --git a/mgl/Makefile.in b/mgl/Makefile.in index b5738df..899e46b 100644 --- a/mgl/Makefile.in +++ b/mgl/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.11 from Makefile.am. +# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, @@ -40,9 +40,10 @@ host_triplet = @host@ @USE_GLUT_TRUE@am__append_4 = -DWITH_GLUT @USE_PTHREAD_TRUE@am__append_5 = $(PTHREAD_LIBS) @USE_GSL_TRUE@am__append_6 = $(GSL_LIBS) -@USE_HDF5_TRUE@am__append_7 = $(HDF5_LIBS) -@USE_GIF_TRUE@am__append_8 = $(GIF_LIBS) -@USE_JPEG_TRUE@am__append_9 = $(JPEG_LIBS) +@USE_HDF4_TRUE@am__append_7 = $(HDF4_LIBS) +@USE_HDF5_TRUE@am__append_8 = $(HDF5_LIBS) +@USE_GIF_TRUE@am__append_9 = $(GIF_LIBS) +@USE_JPEG_TRUE@am__append_10 = $(JPEG_LIBS) subdir = mgl DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 @@ -80,13 +81,14 @@ LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @USE_PTHREAD_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) @USE_GSL_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1) -@USE_HDF5_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1) -@USE_GIF_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1) -@USE_JPEG_TRUE@am__DEPENDENCIES_6 = $(am__DEPENDENCIES_1) +@USE_HDF4_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1) +@USE_HDF5_TRUE@am__DEPENDENCIES_5 = $(am__DEPENDENCIES_1) +@USE_GIF_TRUE@am__DEPENDENCIES_6 = $(am__DEPENDENCIES_1) +@USE_JPEG_TRUE@am__DEPENDENCIES_7 = $(am__DEPENDENCIES_1) libmgl_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_5) \ - $(am__DEPENDENCIES_6) + $(am__DEPENDENCIES_6) $(am__DEPENDENCIES_7) am_libmgl_la_OBJECTS = libmgl_la-mgl_data_cf.lo libmgl_la-mgl_axis.lo \ libmgl_la-mgl_data_png.lo libmgl_la-mgl_zb2.lo \ libmgl_la-mgl_c.lo libmgl_la-mgl_eps.lo libmgl_la-mgl_font.lo \ @@ -167,6 +169,8 @@ GREP = @GREP@ GSL_FLAGS = @GSL_FLAGS@ GSL_LIBS = @GSL_LIBS@ HAVE_SWIG = @HAVE_SWIG@ +HDF4_FLAGS = @HDF4_FLAGS@ +HDF4_LIBS = @HDF4_LIBS@ HDF5_FLAGS = @HDF5_FLAGS@ HDF5_LIBS = @HDF5_LIBS@ INSTALL = @INSTALL@ @@ -187,6 +191,7 @@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MGL_AGE = @MGL_AGE@ MGL_CURRENT = @MGL_CURRENT@ +MGL_RELEASE = @MGL_RELEASE@ MGL_REVISION = @MGL_REVISION@ MKDIR_P = @MKDIR_P@ MOC = @MOC@ @@ -301,10 +306,10 @@ WIDGETS = $(am__append_1) $(am__append_2) $(am__append_3) \ $(am__append_4) libmgl_la_LIBADD = $(PNG_LIBS) $(GL_LIBS) $(LOPENMP) $(am__append_5) \ $(am__append_6) $(am__append_7) $(am__append_8) \ - $(am__append_9) + $(am__append_9) $(am__append_10) libmgl_la_LDFLAGS = -no-undefined -version-info $(MGL_CURRENT):$(MGL_REVISION):$(MGL_AGE) libmgl_la_CXXFLAGS = $(WIDGETS) -DMGL_FONT_PATH=\"$(datadir)/$(PACKAGE)/fonts/\" \ - -DMOD_LIB_DIR=\"$(libdir)/mgl/\" $(HDF5_FLAGS) $(GIF_FLAGS) $(JPEG_FLAGS) \ + -DMOD_LIB_DIR=\"$(libdir)/mgl/\" $(HDF5_FLAGS) $(HDF4_FLAGS) $(GIF_FLAGS) $(JPEG_FLAGS) \ $(TIFF_FLAGS) $(PNG_FLAGS) $(FLTK_FLAGS) $(ADDON_FLAGS) $(AM_CXXFLAGS) \ $(PTHREAD_FLAGS) diff --git a/mgl/mgl_1d.cpp b/mgl/mgl_1d.cpp index 7d31b46..8806b12 100644 --- a/mgl/mgl_1d.cpp +++ b/mgl/mgl_1d.cpp @@ -193,7 +193,6 @@ void mglGraph::Plot(const char *eqX, const char *eqY, const char *eqZ, const cha } delete ex; delete ey; delete ez; - // TODO Add s1trong function variation analisys mglData xx,yy,zz; xx.Set(x,n); yy.Set(y,n); zz.Set(z,n); free(x); free(y); free(z); free(t); @@ -250,25 +249,42 @@ void mglGraph::Plot(const mglData &x, const mglData &y, const mglData &z, const if(n<2) { SetWarn(mglWarnLow,"Plot"); return; } static int cgid=1; StartGroup("Plot",cgid++); m = x.ny > y.ny ? x.ny : y.ny; m = z.ny > m ? z.ny : m; - mreal *pp = new mreal[3*n]; - bool *tt = new bool[n]; + mreal *pp = new mreal[6*n]; + bool *tt = new bool[2*n],inan,onan; if(pen && *pen) mk=SelectPen(pen); else Pen(NC, '-', BaseLineWidth); SetPal(pen); for(j=0;j0) onan = isnan(pp[k-3]) || isnan(pp[k-2]) || isnan(pp[k-1]); + tt[jj] = ScalePoint(pp[k],pp[k+1],pp[k+2]); + if(mk && tt[jj]) Mark(pp[k],pp[k+1],pp[k+2],mk); + if(jj>0 && ((tt[jj] && !tt[jj-1] && !onan) || (tt[jj-1] && !tt[jj] && !inan))) // do smoothing + { + float i1=0, i2=1, ii; + pp[k+3] = pp[k+0]; pp[k+4] = pp[k+1]; // copy current + pp[k+5] = pp[k+2]; tt[jj+1] = tt[jj]; + do { + ii = (i1+i2)/2; + pp[k+0] = x.a[i+mx*n]*ii+x.a[i-1+mx*n]*(1-ii); + pp[k+1] = y.a[i+my*n]*ii+y.a[i-1+my*n]*(1-ii); + pp[k+2] = z.a[i+mz*n]*ii+z.a[i-1+mz*n]*(1-ii); + tt[jj] = ScalePoint(pp[k],pp[k+1],pp[k+2]); + if((tt[jj] && tt[jj+1]) || (tt[jj-1] && !tt[jj])) i2 = ii; + else i1 = ii; + } while(fabs(i2-i1)>1e-3); + tt[jj] = true; jj++; + } } - curv_plot(n,pp,tt); + curv_plot(jj,pp,tt); } SetPal(0); EndGroup(); delete []tt; delete []pp; @@ -304,29 +320,43 @@ void mglGraph::Tens(const mglData &x, const mglData &y, const mglData &z, const if(n<2) { SetWarn(mglWarnLow,"Tens"); return; } static int cgid=1; StartGroup("Tens",cgid++); m = x.ny > y.ny ? x.ny : y.ny; m = z.ny > m ? z.ny : m; - mreal *pp = new mreal[3*n], *cc = new mreal[n]; - bool *tt = new bool[n]; + mreal *pp = new mreal[6*n], *cc = new mreal[2*n]; + bool *tt = new bool[2*n]; if(pen && *pen) { SetScheme(pen,false); mk=SelectPen(pen); } for(j=0;j0 && ((tt[jj] && !tt[jj-1]) || (tt[jj-1] && !tt[jj]))) // do smoothing + { + float i1=0, i2=1, ii; + pp[k+3] = pp[k+0]; pp[k+4] = pp[k+1]; // copy current + pp[k+5] = pp[k+2]; tt[jj+1] = tt[jj]; + do { + ii = (i1+i2)/2; + pp[k+0] = x.a[i+mx*n]*ii+x.a[i-1+mx*n]*(1-ii); + pp[k+1] = y.a[i+my*n]*ii+y.a[i-1+my*n]*(1-ii); + pp[k+2] = z.a[i+mz*n]*ii+z.a[i-1+mz*n]*(1-ii); + tt[jj] = ScalePoint(pp[k],pp[k+1],pp[k+2]); + if((tt[jj] && tt[jj+1]) || (tt[jj-1] && !tt[jj])) i2 = ii; + else i1 = ii; + } while(fabs(i2-i1)>1e-3); + tt[jj] = true; jj++; + } } - memcpy(cc,c.a+mc*n,n*sizeof(mreal)); - curv_plot(n,pp,cc,tt); + curv_plot(jj,pp,cc,tt); } EndGroup(); delete []tt; delete []pp; delete []cc; @@ -359,71 +389,80 @@ void mglGraph::Area(const mglData &x, const mglData &y, const mglData &z, const if(n<2) { SetWarn(mglWarnLow,"Area"); return; } static int cgid=1; StartGroup("Area3",cgid++); m = x.ny > y.ny ? x.ny : y.ny; m = z.ny > m ? z.ny : m; - mreal *pp = new mreal[6*n],z0=GetOrgZ('x'); - bool *tt = new bool[2*n]; + mreal *pp = new mreal[6*n], *cc = new mreal[8*n], z0=GetOrgZ('x'); + bool *tt = new bool[2*n]; + mglColor c1,c2; SetPal(pen); for(j=0;j0 ? f.a[i+j*n-n] : y0; pp[6*i+5] = znan ? Min.z + (m-1-j)*(Max.z-Min.z)/m : zVal; tt[2*i+1] = ScalePoint(pp[6*i+3],pp[6*i+4],pp[6*i+5]); } - surf_plot(2,n,pp,0,tt); + surf_plot(2,n,pp,cc,tt); } SetPal(0); EndGroup(); - delete []pp; delete []tt; + delete []pp; delete []tt; delete []cc; } //----------------------------------------------------------------------------- -void mglGraph::Area(const mglData &y, const char *pen,bool sum,mreal zVal) +void mglGraph::Area(const mglData &y, const char *pen, mreal zVal) { if(y.nx<2) { SetWarn(mglWarnLow,"Area"); return; } mglData x(y.nx); x.Fill(Min.x,Max.x); - Area(x,y,pen,sum,zVal); + Area(x,y,pen,zVal); } //----------------------------------------------------------------------------- // @@ -437,17 +476,22 @@ void mglGraph::Region(const mglData &x, const mglData &y1, const mglData &y2, co { SetWarn(mglWarnDim,"Region"); return; } if(n<2) { SetWarn(mglWarnLow,"Region"); return; } static int cgid=1; StartGroup("Region",cgid++); - mreal *pp = new mreal[6*n], f1,f2; + mreal *pp = new mreal[6*n], *cc = new mreal[8*n], f1,f2; bool *tt = new bool[2*n]; if(isnan(zVal)) zVal = Min.z; + mglColor c1,c2; SetPal(pen); for(j=0;jf2 && inside) { tt[2*i] = tt[2*i+1] = false; } } - surf_plot(2,n,pp,0,tt); + surf_plot(2,n,pp,cc,tt); } SetPal(0); EndGroup(); - delete []pp; delete []tt; + delete []pp; delete []tt; delete []cc; } //----------------------------------------------------------------------------- void mglGraph::Region(const mglData &y1, const mglData &y2, const char *pen, mreal zVal, bool inside) @@ -647,22 +691,27 @@ void mglGraph::Stem(const mglData &y, const char *pen,mreal zVal) // Bars series // //----------------------------------------------------------------------------- -void mglGraph::Bars(const mglData &x, const mglData &y, const mglData &z, const char *pen, bool above) +void mglGraph::Bars(const mglData &x, const mglData &y, const mglData &z, const char *pen) { long i,j,m,mx,my,mz,n=y.nx; if(x.nx!=n || z.nx!=n) { SetWarn(mglWarnDim,"Bars"); return; } if(n<2) { SetWarn(mglWarnLow,"Bars"); return; } static int cgid=1; StartGroup("Bars3",cgid++); m = x.ny > y.ny ? x.ny : y.ny; m = z.ny > m ? z.ny : m; - mreal *pp = new mreal[12*n],x1,x2,y1,y2,z0=GetOrgZ('x'),zz; - bool *tt = new bool[4*n], wire = pen && strchr(pen,'#'); + mreal *pp = new mreal[12*n],*cc = new mreal[16*n],x1,x2,y1,y2,z0,zz,zp; + bool *tt = new bool[4*n], wire = pen && strchr(pen,'#'); + bool above = pen && strchr(pen,'a')!=0, fall = pen && strchr(pen,'f')!=0; + if(above) fall = false; mglData dd(above ? n : 1); - + + mglColor c1,c2,c; SetPal(pen); for(j=0;j y.ny ? x.ny : y.ny; - mreal *pp = new mreal[12*n],x1,x2,yy,y0=GetOrgY('x'); + mreal *pp = new mreal[12*n],*cc = new mreal[16*n],x1,x2,yy,y0,yp; bool *tt = new bool[4*n], wire = pen && strchr(pen,'#'); if(isnan(zVal)) zVal = Min.z; + bool above = pen && strchr(pen,'a')!=0, fall = pen && strchr(pen,'f')!=0; + if(above) fall = false; mglData dd(above ? n : 1); + mglColor c1,c2,c; SetPal(pen); for(j=0;j v.ny ? y.ny : v.ny; - mreal *pp = new mreal[12*n],y1,y2,xx,x0=GetOrgX('y'); + mreal *pp = new mreal[12*n],*cc = new mreal[16*n],y1,y2,xx,x0,xp; bool *tt = new bool[4*n], wire = pen && strchr(pen,'#'); if(isnan(zVal)) zVal = Min.z; + bool above = pen && strchr(pen,'a')!=0, fall = pen && strchr(pen,'f')!=0; + if(above) fall = false; mglData dd(above ? n : 1); + mglColor c1,c2,c; SetPal(pen); for(j=0;jPlot(*y,pen); } -/// Draw line plot for points in arrays \a a(0,:),\a a(1,:). -void mgl_plot_2(HMGL gr, const HMDT a, const char *pen) -{ if(gr && a) gr->Plot2(*a,pen); } -/// Draw line plot for points in arrays \a a(0,:),\a a(1,:),\a a(2,:). -void mgl_plot_3(HMGL gr, const HMDT a, const char *pen) -{ if(gr && a) gr->Plot3(*a,pen); } /// Draw boxplot for points in arrays \a x, \a y. void mgl_boxplot_xy(HMGL gr, const HMDT x, const HMDT y, const char *pen) { if(gr && x && y) gr->BoxPlot(*x,*y,pen); } @@ -1496,20 +1448,9 @@ void mgl_area_xyz(HMGL gr, const HMDT x, const HMDT y, const HMDT z, const char /// Draw area plot for points in arrays \a x, \a y. void mgl_area_xy(HMGL gr, const HMDT x, const HMDT y, const char *pen) { if(gr && x && y) gr->Area(*x,*y,pen); } -/// Draw area plot for points in arrays \a x, \a y. -void mgl_area_xys(HMGL gr, const HMDT x, const HMDT y, const char *pen) -{ if(gr && x && y) gr->Area(*x,*y,pen,true); } /// Draw area plot for points in arrays \a y. -void mgl_area_s(HMGL gr, const HMDT y, const char *pen) -{ if(gr && y) gr->Area(*y,pen,true); } void mgl_area(HMGL gr, const HMDT y, const char *pen) { if(gr && y) gr->Area(*y,pen); } -/// Draw area plot for points in arrays \a a(0,:),\a a(1,:). -void mgl_area_2(HMGL gr, const HMDT a, const char *pen) -{ if(gr && a) gr->Area2(*a, pen); } -/// Draw area plot for points in arrays \a a(0,:),\a a(1,:),\a a(2,:). -void mgl_area_3(HMGL gr, const HMDT a, const char *pen) -{ if(gr && a) gr->Area3(*a,pen); } /// Fill area between curves \a y1, \a y2 parametrically dependent on \a x. void mgl_region_xy(HMGL gr, const HMDT x, const HMDT y1, const HMDT y2, const char *pen, int inside) { if(gr && x && y1 && y2) gr->Region(*x,*y1,*y2,pen,NAN,inside); } @@ -1528,12 +1469,6 @@ void mgl_stem_xy(HMGL gr, const HMDT x, const HMDT y, const char *pen) /// Draw vertical lines from points in arrays \a y to mglGraph::Org. void mgl_stem(HMGL gr, const HMDT y, const char *pen) { if(gr && y) gr->Stem(*y,pen); } -/// Draw vertical lines from points in arrays \a a(0,:),\a a(1,:) to mglGraph::Org. -void mgl_stem_2(HMGL gr, const HMDT a, const char *pen) -{ if(gr && a) gr->Stem2(*a, pen); } -/// Draw vertical lines from points in arrays \a a(0,:),\a a(1,:),\a a(2,:) to mglGraph::Org. -void mgl_stem_3(HMGL gr, const HMDT a, const char *pen) -{ if(gr && a) gr->Stem3(*a, pen); } /// Draw stairs for points in arrays \a x, \a y, \a z. void mgl_step_xyz(HMGL gr, const HMDT x, const HMDT y, const HMDT z, const char *pen) { if(gr && x && y && z) gr->Step(*x,*y,*z,pen); } @@ -1543,12 +1478,6 @@ void mgl_step_xy(HMGL gr, const HMDT x, const HMDT y, const char *pen) /// Draw line plot for points in arrays \a y. void mgl_step(HMGL gr, const HMDT y, const char *pen) { if(gr && y) gr->Step(*y,pen); } -/// Draw stairs for points in arrays \a a(0,:),\a a(1,:). -void mgl_step_2(HMGL gr, const HMDT a, const char *pen) -{ if(gr && a) gr->Step2(*a, pen); } -/// Draw stairs for points in arrays \a a(0,:),\a a(1,:),\a a(2,:). -void mgl_step_3(HMGL gr, const HMDT a, const char *pen) -{ if(gr && a) gr->Step3(*a, pen); } /// Draw vertical bars from points in arrays \a x, \a y, \a z to mglGraph::Org. void mgl_bars_xyz(HMGL gr, const HMDT x, const HMDT y, const HMDT z, const char *pen) { if(gr && x && y && z) gr->Bars(*x,*y,*z,pen); } @@ -1558,12 +1487,6 @@ void mgl_bars_xy(HMGL gr, const HMDT x, const HMDT y, const char *pen) /// Draw vertical bars from points in arrays \a y to mglGraph::Org. void mgl_bars(HMGL gr, const HMDT y, const char *pen) { if(gr && y) gr->Bars(*y,pen); } -/// Draw vertical bars from points in arrays \a a(0,:),\a a(1,:) to mglGraph::Org. -void mgl_bars_2(HMGL gr, const HMDT a, const char *pen) -{ if(gr && a) gr->Bars2(*a, pen); } -/// Draw vertical bars from points in arrays \a a(0,:),\a a(1,:),\a a(2,:) to mglGraph::Org. -void mgl_bars_3(HMGL gr, const HMDT a, const char *pen) -{ if(gr && a) gr->Bars3(*a, pen); } /// Draw vertical bars from points in arrays \a x, \a y to mglGraph::Org. void mgl_barh_yx(HMGL gr, const HMDT y, const HMDT v, const char *pen) { if(gr && v && y) gr->Barh(*y,*v,pen); } @@ -1573,9 +1496,6 @@ void mgl_barh(HMGL gr, const HMDT v, const char *pen) /// Draw surface of curve {\a r,\a z} rotatation around Z axis void mgl_torus(HMGL gr, const HMDT r, const HMDT z, const char *pen) { if(gr && r && z) gr->Torus(*r, *z, pen); } -/// Draw surface of curve {\a a(0,:),\a a(1,:)} rotatation around Z axis for -void mgl_torus_2(HMGL gr, const HMDT a, const char *pen) -{ if(gr && a) gr->Torus2(*a, pen); } //----------------------------------------------------------------------------- /// Draw chart for data a void mgl_chart(HMGL gr, const HMDT a, const char *col) @@ -1640,20 +1560,6 @@ void mgl_plot_(uintptr_t *gr, uintptr_t *y, const char *pen,int l) if(gr && y) _GR_->Plot(_D_(y),s); delete []s; } -/// Draw line plot for points in arrays \a a(0,:),\a a(1,:). -void mgl_plot_2_(uintptr_t *gr, uintptr_t *a, const char *pen,int l) -{ - char *s=new char[l+1]; memcpy(s,pen,l); s[l]=0; - if(gr && a) _GR_->Plot2(_D_(a),s); - delete []s; -} -/// Draw line plot for points in arrays \a a(0,:),\a a(1,:),\a a(2,:). -void mgl_plot_3_(uintptr_t *gr, uintptr_t *a, const char *pen,int l) -{ - char *s=new char[l+1]; memcpy(s,pen,l); s[l]=0; - if(gr && a) _GR_->Plot3(_D_(a),s); - delete []s; -} /// Draw boxplot for points in arrays \a x, \a y. void mgl_boxplot_xy_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, const char *pen,int l) { @@ -1712,32 +1618,12 @@ void mgl_area_xy_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, const char *pen,int delete []s; } /// Draw area plot for points in arrays \a y. -void mgl_area_s_(uintptr_t *gr, uintptr_t *y, const char *pen,int l) -{ - char *s=new char[l+1]; memcpy(s,pen,l); s[l]=0; - if(gr && y) _GR_->Area(_D_(y),s,true); - delete []s; -} void mgl_area_(uintptr_t *gr, uintptr_t *y, const char *pen,int l) { char *s=new char[l+1]; memcpy(s,pen,l); s[l]=0; if(gr && y) _GR_->Area(_D_(y),s); delete []s; } -/// Draw area plot for points in arrays \a a(0,:),\a a(1,:). -void mgl_area_2_(uintptr_t *gr, uintptr_t *a, const char *pen,int l) -{ - char *s=new char[l+1]; memcpy(s,pen,l); s[l]=0; - if(gr && a) _GR_->Area2(_D_(a), s); - delete []s; -} -/// Draw area plot for points in arrays \a a(0,:),\a a(1,:),\a a(2,:). -void mgl_area_3_(uintptr_t *gr, uintptr_t *a, const char *pen,int l) -{ - char *s=new char[l+1]; memcpy(s,pen,l); s[l]=0; - if(gr && a) _GR_->Area3(_D_(a),s); - delete []s; -} /// Fill area between the curves \a y1, \a y2 parametrically dependent on \a x. void mgl_region_xy_(uintptr_t *gr, uintptr_t *x, uintptr_t *y1, uintptr_t *y2, const char *pen, int *inside, int l) { @@ -1776,20 +1662,6 @@ void mgl_stem_(uintptr_t *gr, uintptr_t *y, const char *pen,int l) if(gr && y) _GR_->Stem(_D_(y),s); delete []s; } -/// Draw vertical lines from points in arrays \a a(0,:),\a a(1,:) to mglGraph::Org. -void mgl_stem_2_(uintptr_t *gr, uintptr_t *a, const char *pen,int l) -{ - char *s=new char[l+1]; memcpy(s,pen,l); s[l]=0; - if(gr && a) _GR_->Stem2(_D_(a), s); - delete []s; -} -/// Draw vertical lines from points in arrays \a a(0,:),\a a(1,:),\a a(2,:) to mglGraph::Org. -void mgl_stem_3_(uintptr_t *gr, uintptr_t *a, const char *pen,int l) -{ - char *s=new char[l+1]; memcpy(s,pen,l); s[l]=0; - if(gr && a) _GR_->Stem3(_D_(a), s); - delete []s; -} /// Draw stairs for points in arrays \a x, \a y, \a z. void mgl_step_xyz_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *pen,int l) { @@ -1811,20 +1683,6 @@ void mgl_step_(uintptr_t *gr, uintptr_t *y, const char *pen,int l) if(gr && y) _GR_->Step(_D_(y),s); delete []s; } -/// Draw stairs for points in arrays \a a(0,:),\a a(1,:). -void mgl_step_2_(uintptr_t *gr, uintptr_t *a, const char *pen,int l) -{ - char *s=new char[l+1]; memcpy(s,pen,l); s[l]=0; - if(gr && a) _GR_->Step2(_D_(a), s); - delete []s; -} -/// Draw stairs for points in arrays \a a(0,:),\a a(1,:),\a a(2,:). -void mgl_step_3_(uintptr_t *gr, uintptr_t *a, const char *pen,int l) -{ - char *s=new char[l+1]; memcpy(s,pen,l); s[l]=0; - if(gr && a) _GR_->Step3(_D_(a), s); - delete []s; -} /// Draw vertical bars from points in arrays \a x, \a y, \a z to mglGraph::Org. void mgl_bars_xyz_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *pen,int l) { @@ -1846,20 +1704,6 @@ void mgl_bars_(uintptr_t *gr, uintptr_t *y, const char *pen,int l) if(gr && y) _GR_->Bars(_D_(y),s); delete []s; } -/// Draw vertical bars from points in arrays \a a(0,:),\a a(1,:) to mglGraph::Org. -void mgl_bars_2_(uintptr_t *gr, uintptr_t *a, const char *pen,int l) -{ - char *s=new char[l+1]; memcpy(s,pen,l); s[l]=0; - if(gr && a) _GR_->Bars2(_D_(a), s); - delete []s; -} -/// Draw vertical bars from points in arrays \a a(0,:),\a a(1,:),\a a(2,:) to mglGraph::Org. -void mgl_bars_3_(uintptr_t *gr, uintptr_t *a, const char *pen,int l) -{ - char *s=new char[l+1]; memcpy(s,pen,l); s[l]=0; - if(gr && a) _GR_->Bars3(_D_(a), s); - delete []s; -} /// Draw vertical bars from points in arrays \a x, \a y to mglGraph::Org. void mgl_barh_yx_(uintptr_t *gr, uintptr_t *y, uintptr_t *v, const char *pen,int l) { @@ -1881,13 +1725,6 @@ void mgl_torus_(uintptr_t *gr, uintptr_t *r, uintptr_t *z, const char *pen,int l if(gr && r && z) _GR_->Torus(_D_(r), _D_(z), s); delete []s; } -/// Draw surface of curve {\a a(0,:),\a a(1,:)} rotatation around Z axis for -void mgl_torus_2_(uintptr_t *gr, uintptr_t *a, const char *pen,int l) -{ - char *s=new char[l+1]; memcpy(s,pen,l); s[l]=0; - if(gr && a) _GR_->Torus2(_D_(a), s); - delete []s; -} //----------------------------------------------------------------------------- /// Draw chart for data a void mgl_chart_(uintptr_t *gr, uintptr_t *a, const char *col,int l) diff --git a/mgl/mgl_ab.cpp b/mgl/mgl_ab.cpp index 3a9b3d5..53dba12 100644 --- a/mgl/mgl_ab.cpp +++ b/mgl/mgl_ab.cpp @@ -19,7 +19,7 @@ ***************************************************************************/ #include #include -#include +#include #include "mgl/mgl_ab.h" #define imax(a,b) (a)>(b) ? (a) : (b) @@ -37,14 +37,14 @@ mglGraphAB::mglGraphAB(int w,int h) : mglGraph() G = 0; UseLight = false; st_pos=-1; memset(stack,0,MGL_STACK_ENTRY*13*sizeof(mreal)); SetSize(w,h); ClfOnUpdate = true; SetDrawReg(1,1,0); - AutoClf=true; Delay = 100; ObjId=0; + AutoClf=true; Delay = 1; ObjId=0; pPos=0; NoAutoFactor = false; ShowMousePos = true; BDef[0] = BDef[1] = BDef[2] = BDef[3] = 255; DefaultPlotParam(); } //----------------------------------------------------------------------------- mglGraphAB::~mglGraphAB() -{ if(G) { delete []G; delete []G4; } } +{ if(G) { delete []G; delete []G4; delete []OI; } } //----------------------------------------------------------------------------- void mglGraphAB::Pop() { @@ -92,11 +92,12 @@ void mglGraphAB::Pen(mglColor col, char style,mreal width) switch(style) { case '-': PDef = 0xffff; break; - case '|': PDef = 0xff00; break; - case ';': PDef = 0xf0f0; break; - case ':': PDef = 0x8888; break; - case 'j': PDef = 0xfe10; break; - case 'i': PDef = 0xe4e4; break; + case '|': PDef = 0x00ff; break; + case ';': PDef = 0x0f0f; break; + case '=': PDef = 0x3333; break; + case ':': PDef = 0x1111; break; + case 'j': PDef = 0x087f; break; + case 'i': PDef = 0x2727; break; case ' ': PDef = 0x0000; break; // case 0: PDef = 0x0000; break; // default: PDef = 0xffff; @@ -132,21 +133,8 @@ void mglGraphAB::RotateN(mreal Tet,mreal x,mreal y,mreal z) void mglGraphAB::Perspective(mreal a) // I'm too lazy for using 4*4 matrix { Persp = fabs(a)/Depth; } //----------------------------------------------------------------------------- -void mglGraphAB::RestoreM() -{ - memcpy(B,BL,9*sizeof(mreal)); - xPos = BL[9]; yPos = BL[10]; zPos = BL[11]; - PlotFactor = BL[12]; -} -//----------------------------------------------------------------------------- void mglGraphAB::InPlot(mreal x1,mreal x2,mreal y1,mreal y2, bool rel) { - if(!rel) - { - memcpy(BL,B,9*sizeof(mreal)); - BL[9] = xPos; BL[10] = yPos; BL[11] = zPos; - BL[12] = PlotFactor; - } SelectPen("k-1"); if(Width<=0 || Height<=0 || Depth<=0) return; memset(B,0,9*sizeof(mreal)); @@ -370,23 +358,24 @@ void mglGraphAB::Putsw(mglPoint p, const wchar_t *wcs, const char *font, mreal s if(font && strchr(font, 'a')) { Labelw(p.x, p.y, wcs,font,size,true); return; } wchar_t *wcl; - int wn=0; + unsigned wn=0; const wchar_t *wnl=0; for(wn=0;wnPuts(wcs,font1,col); Pop(); delete []font1; EndGroup(); } @@ -500,7 +488,8 @@ void mglGraphAB::Legend(int n, wchar_t **text,char **style, mreal x, mreal y, static int cgid=1; StartGroup("Legend",cgid++); mreal pp[15], r=GetRatio(), rh, rw, s3=PlotFactor; if(size<=0) size = -size*FontSize; - if(!font || !(*font)) font="L"; + if(!font || !(*font)) font="L"; + char *pA, *ff = new char[strlen(font)+1]; strcpy(ff,font); llen *= 1.5; rh=(r<1?r:1.)*size/6.; rw=(r>1?1./r:1.)*size/8.; @@ -514,8 +503,14 @@ void mglGraphAB::Legend(int n, wchar_t **text,char **style, mreal x, mreal y, w = w>j ? w:j; } w = (w + llen*1.1f); // add space for lines - - Push(); memcpy(B,B1,9*sizeof(mreal)); + + bool rel = true; + if((pA=strchr(ff,'A'))) + { + *pA = 'L'; + rel = false; + } + Push(); Identity(rel); // memcpy(B,B1,9*sizeof(mreal)); if(LegendBox) // draw bounding box { pp[2] = pp[5] = pp[8] = pp[11] = pp[14] = s3-0.01; @@ -540,13 +535,19 @@ void mglGraphAB::Legend(int n, wchar_t **text,char **style, mreal x, mreal y, pp[0] = x+0.1f*llen; pp[3] = x+0.9f*llen; pp[6] = x+0.5f*llen; // ScalePoint(pp[0],pp[1],pp[2]); ScalePoint(pp[3],pp[4],pp[5]); ScalePoint(pp[6],pp[7],pp[8]); - curv_plot(2,pp,0); - if(m) Mark(pp[6],pp[7],pp[8],m); + pPos=0; curv_plot(2,pp,0); + if(m) for(int j=0;j0 ? Max.x:Min.x; } return res; @@ -896,6 +898,7 @@ mreal mglGraphAB::GetOrgY(char dir) if(dir=='x') res = ax[1]; else if(dir=='y') res = ay[1]; else if(dir=='z') res = az[1]; + else if(dir=='t') res = Min.y; else res = B[7]>0 ? Max.y:Min.y; } return res; @@ -911,6 +914,7 @@ mreal mglGraphAB::GetOrgZ(char dir) if(dir=='x') res = ax[2]; else if(dir=='y') res = ay[2]; else if(dir=='z') res = az[2]; + else if(dir=='t') res = Min.z; else res = B[8]>0 ? Max.z:Min.z; } return res; @@ -956,7 +960,7 @@ int mgl_draw_class(mglGraph *gr, void *p) { return p ? ((mglDraw *)p)->Draw(gr) : 0; } void mgl_reload_class(int next, void *p) { if(p) ((mglDraw *)p)->Reload(next); } -void mglGraphAB::Window(int argc, char **argv, mglDraw *draw, const char *title, bool maximize) +void mglGraphAB::Window(int argc, char **argv, const char *title, mglDraw *draw, bool maximize) { Window(argc, argv, mgl_draw_class, title, draw, mgl_reload_class, maximize); } diff --git a/mgl/mgl_addon.cpp b/mgl/mgl_addon.cpp index b3b6c53..bf8e29c 100644 --- a/mgl/mgl_addon.cpp +++ b/mgl/mgl_addon.cpp @@ -39,8 +39,8 @@ void mgl_strcls(char *str) } for(n=0;n0;i--) if(tmp[i]!=' ') break; - tmp[i+1]=0; - strcpy(str,&(tmp[n])); + tmp[i+1]=0; strcpy(str,&(tmp[n])); + delete []tmp; } //--------------------------------------------------------------------------- int mgl_strpos(const char *str,char *fnd) @@ -66,7 +66,7 @@ char *mgl_fgetstr(FILE *fp) static char s[256]; do { - fgets(s,256,fp); + if(!fgets(s,256,fp)) break; mgl_strtrim(s); // strlwr(s); } while(!feof(fp) && (s[0]==0 || s[0]=='%' || s[0]=='#')); @@ -109,8 +109,8 @@ FILE *mgl_next_data(const char *fname,int p) if(p>0) pos = p; if(fname==NULL) return NULL; - if(pos==0) getcwd(path,256); // remember ini dyrectory - else chdir(path); + if(pos==0) { if(!getcwd(path,256)) return 0; } // remember ini dyrectory + else { if(chdir(path)==-1) return 0; } // read the initial (common) date from "mbrs.ini" FILE *fp=fopen(fname,"rt"); @@ -125,6 +125,8 @@ FILE *mgl_next_data(const char *fname,int p) { s = mgl_fgetstr(fp); fflush(stdout); + if(s[0]=='$' || s[1]=='$' || s[3]=='$') + { fclose(fp); return NULL; } } while(!feof(fp) && (s[0]!='-' || s[1]!='-' || s[3]!='-')); if(feof(fp)) // no more data { fclose(fp); return NULL; } diff --git a/mgl/mgl_axis.cpp b/mgl/mgl_axis.cpp index fc9dd84..f5ffc71 100644 --- a/mgl/mgl_axis.cpp +++ b/mgl/mgl_axis.cpp @@ -46,12 +46,10 @@ void wcstrim_mgl(wchar_t *str) wchar_t *c = mgl_wcsdup(str); unsigned long n=wcslen(str); long k; - for(k=0;k=0;k--) // óäàëÿåì íà÷àëüíûå ïðîáåëû - if(!isspace(c[k])) break; + for(k=n-1;k>=0;k--) if(!isspace(c[k])) break; c[k+1] = 0; wcscpy(str,c); free(c); } @@ -73,8 +71,7 @@ void mglGraph::DrawXGridLine(mreal t, mreal y0, mreal z0) bool *tt = new bool[GridPnts+1]; for(i=0;i=Min.z*FLT_EPS;t*=10) DrawZGridLine(t,x0,y0); } } - if(strchr(dir,'t')) + if(strchr(dir,'t') && TernAxis) { z0 = isnan(OrgT.z) ? GetOrgZ('z') : OrgT.z; z0 = z0 - ddz*floor((z0-Min.z)/ddz); if(xnum) for(int i=0;i0.2) font[0]='R'; + strcat(font,FontDef); x0 = GetOrgX(dir); y0 = GetOrgY(dir); z0 = GetOrgZ(dir); if(size<=0) size = -size*FontSize; if(dir=='x') { if(dx) t = (Min.x+Max.x+pos*(Max.x-Min.x))/2; else t = Min.x*pow(Max.x/Min.x, (pos+1)/2); - Putsw(mglPoint(t,y0,z0),text,FontDef,size,'X',shift); + Putsw(mglPoint(t,y0,z0),text,font,size,'X',shift); } if(dir=='y') { if(TernAxis) { - t = (pos+1)/2; - Putsw(mglPoint(Max.x-t,t,z0),text,FontDef,size,'T',shift); + t = (Min.y+Max.y+pos*(Max.y-Min.y))/2; + Putsw(mglPoint(Max.x+Min.y-t,t,z0),text,font,size,'T',shift); } else { - if(dx) t = (Min.y+Max.y+pos*(Max.y-Min.y))/2; + if(dy) t = (Min.y+Max.y+pos*(Max.y-Min.y))/2; else t = Min.y*pow(Max.y/Min.y, (pos+1)/2); - Putsw(mglPoint(x0,t,z0),text,FontDef,size,'Y',shift); + Putsw(mglPoint(x0,t,z0),text,font,size,'Y',shift); } } if(dir=='z') { - if(dx) t = (Min.z+Max.z+pos*(Max.z-Min.z))/2; + if(dz) t = (Min.z+Max.z+pos*(Max.z-Min.z))/2; else t = Min.z*pow(Max.z/Min.z, (pos+1)/2); - Putsw(mglPoint(x0,y0,t),text,FontDef,size,'Z',shift); + Putsw(mglPoint(x0,y0,t),text,font,size,'Z',shift); } if(dir=='t' && TernAxis) { - if(dx) t = (Min.x+Max.x-pos*(Max.x-Min.x))/2; - else t = Max.x*pow(Min.x/Max.x, (pos+1)/2); - Putsw(mglPoint(x0,t,z0),text,FontDef,size,'Y',shift); + t = (Min.y+Max.y-pos*(Max.y-Min.y))/2; + Putsw(mglPoint(Min.x,t,Min.z),text,font,size,'Y',shift); } } //----------------------------------------------------------------------------- @@ -328,16 +327,16 @@ void _mgl_tick_text(mreal z, mreal z0, mreal d, mreal v, int kind, wchar_t str[6 if((kind&1) && z>z0) { int n1,n2; - mglprintf(str, 64, fabs(u)<1 ? L"@{(+%.2g)}" : L"@{(+%.3g)}",u); n1=wcslen(str); - mglprintf(str, 64, L"@{(+%g)}",u); n2=wcslen(str); - if(n1fabs(Max.z-Min.z) ? 0.3*fabs(Max.z-Min.z) : z0*3; if(y0>(Max.y+Min.y)/2) ddy = -ddy; if(z0>(Max.z+Min.z)/2) ddz = -ddz; - SelectPen(TranspType!=2 ? "k-1":"w-1"); + SelectPen(stl); for(i=0;i<31;i++) // draw axis line { pp[3*i+1]=y0; pp[3*i+2]=z0; pp[3*i]=Min.x+(Max.x-Min.x)*i/30.; - tt[i] = ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]); + ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]); + } + if(stl[3]) + { + pp[3*31+1]=y0; pp[3*31+2]=z0; + pp[3*31]=Min.x+(Max.x-Min.x)*1.05; + ScalePoint(pp[3*31],pp[3*31+1],pp[3*31+2]); + curv_plot(32,pp,0); } - curv_plot(31,pp,tt); + else curv_plot(31,pp,0); if(xnum) for(int i=0;ifabs(Max.z-Min.z) ? 0.3*fabs(Max.z-Min.z) : z0*3; if(x0>(Max.x+Min.x)/2) ddx = -ddx; if(z0>(Max.z+Min.z)/2) ddz = -ddz; - SelectPen(TranspType!=2 ? "k-1":"w-1"); + SelectPen(stl); for(i=0;i<31;i++) // ñàìà îñü { pp[3*i]=x0; pp[3*i+2]=z0; pp[3*i+1]=Min.y+(Max.y-Min.y)*i/30.; - tt[i] = ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]); + ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]); + } + if(stl[3]) + { + pp[3*31]=x0; pp[3*31+2]=z0; + pp[3*31+1]=Min.y+(Max.y-Min.y)*1.05; + ScalePoint(pp[3*31],pp[3*31+1],pp[3*31+2]); + curv_plot(32,pp,0); } - curv_plot(31,pp,tt); + else curv_plot(31,pp,0); if(ynum) for(int i=0;ifabs(Max.y-Min.y) ? 0.3*fabs(Max.y-Min.y) : y0*3; if(x0>(Max.x+Min.x)/2) ddx = -ddx; if(y0>(Max.y+Min.y)/2) ddy = -ddy; - SelectPen(TranspType!=2 ? "k-1":"w-1"); + SelectPen(stl); for(i=0;i<31;i++) // ñàìà îñü { pp[3*i]=x0; pp[3*i+1]=y0; pp[3*i+2]=Min.z+(Max.z-Min.z)*i/30.; - tt[i] = ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]); + ScalePoint(pp[3*i],pp[3*i+1],pp[3*i+2]); + } + if(stl[3]) + { + pp[3*31]=x0; pp[3*31+1]=y0; + pp[3*31+2]=Min.z+(Max.z-Min.z)*1.05; + ScalePoint(pp[3*31],pp[3*31+1],pp[3*31+2]); + curv_plot(32,pp,0); } - curv_plot(31,pp,tt); + else curv_plot(31,pp,0); if(znum) for(int i=0;iMin.y && yMin.y && yMin.y && y0) { ddy /= (NSy+1); // subticks drawing - for(y=0;y<=Max.y;y+=ddy) + for(y=Min.y;y<=Max.y;y+=ddy) { DrawTTick(y,Max.x,z0,ddx,ddz,1); - DrawYTick(Max.y-y,Min.x,z0,ddx,ddz,1); + DrawYTick(Max.y+Min.y-y,Min.x,z0,ddx,ddz,1); } } } diff --git a/mgl/mgl_c.cpp b/mgl/mgl_c.cpp index 3d6b710..902c7b0 100644 --- a/mgl/mgl_c.cpp +++ b/mgl/mgl_c.cpp @@ -157,28 +157,31 @@ void mgl_set_ambbr(HMGL gr, mreal i) //----------------------------------------------------------------------------- // Scale and rotate //----------------------------------------------------------------------------- +/// Push transformation matrix into stack. +void mgl_mat_push(HMGL gr) { gr->Push(); } +/// Pop transformation matrix into stack. +void mgl_mat_pop(HMGL gr) { gr->Pop(); } /// Clear transformation matrix. -void mgl_identity(HMGL gr, int rel) -{ gr->Identity(rel); } +void mgl_identity(HMGL gr, int rel) { gr->Identity(rel); } /// Clear up the frame -void mgl_clf(HMGL gr) -{ gr->Clf(); } +void mgl_clf(HMGL gr) { gr->Clf(); } /// Clear up the frame -void mgl_clf_rgb(HMGL gr, mreal r, mreal g, mreal b) -{ gr->Clf(mglColor(r,g,b)); } -/// Put further plotting in some region of whole frame surface. -void mgl_subplot(HMGL gr, int nx,int ny,int m) -{ gr->SubPlot(nx,ny,m); } +void mgl_clf_rgb(HMGL gr, mreal r, mreal g, mreal b){ gr->Clf(mglColor(r,g,b)); } /// Put further plotting in some region of whole frame surface. +void mgl_subplot(HMGL gr, int nx,int ny,int m) { gr->SubPlot(nx,ny,m); } void mgl_subplot_d(HMGL gr, int nx,int ny,int m,mreal dx,mreal dy) { gr->SubPlot(nx,ny,m,dx,dy); } +void mgl_subplot_s(HMGL gr, int nx,int ny,int m,const char *style) +{ gr->SubPlot(nx,ny,m,style); } /// Put further plotting in some region of whole frame surface. void mgl_inplot(HMGL gr, mreal x1,mreal x2,mreal y1,mreal y2) -{ gr->InPlot(x1,x2,y1,y2); } +{ gr->InPlot(x1,x2,y1,y2,false); } void mgl_relplot(HMGL gr, mreal x1,mreal x2,mreal y1,mreal y2) { gr->InPlot(x1,x2,y1,y2,true); } void mgl_columnplot(HMGL gr, int num, int i) { gr->ColumnPlot(num,i); } +void mgl_columnplot_d(HMGL gr, int num, int i, mreal d) +{ gr->ColumnPlot(num,i,d); } void mgl_stickplot(HMGL gr, int num, int i, mreal tet, mreal phi) { gr->StickPlot(num, i, tet, phi); } /// Set aspect ratio for further plotting. @@ -341,6 +344,8 @@ void mgl_legend(HMGL gr, int where, const char *font, mreal size, mreal llen) { if(gr) gr->Legend(where, font, size, llen); } void mgl_set_legend_box(HMGL gr, int enable) { gr->LegendBox = enable; } +void mgl_set_legend_marks(HMGL gr, int num) +{ gr->SetLegendMarks(num); } //----------------------------------------------------------------------------- const unsigned char *mgl_get_rgb(HMGL graph) { @@ -393,6 +398,37 @@ void mgl_calc_scr(HMGL gr, mreal x, mreal y, mreal z, int *xs, int *ys) if(g && xs && ys) g->CalcScr(mglPoint(x,y,z),xs,ys); } //----------------------------------------------------------------------------- +void mgl_wnd_set_delay(HMGL gr, mreal dt) +{ mglGraphAB *g = dynamic_cast(gr); if(g) g->Delay = dt; } +void mgl_wnd_set_auto_clf(HMGL gr, int val) +{ mglGraphAB *g = dynamic_cast(gr); if(g) g->AutoClf = val; } +void mgl_wnd_set_show_mouse_pos(HMGL gr, int val) +{ mglGraphAB *g = dynamic_cast(gr); if(g) g->ShowMousePos = val; } +void mgl_wnd_set_clf_update(HMGL gr, int val) +{ mglGraphAB *g = dynamic_cast(gr); if(g) g->ClfOnUpdate = val; } +void mgl_wnd_toggle_alpha(HMGL gr) +{ mglGraphAB *g = dynamic_cast(gr); if(g) g->ToggleAlpha(); } +void mgl_wnd_toggle_light(HMGL gr) +{ mglGraphAB *g = dynamic_cast(gr); if(g) g->ToggleLight(); } +void mgl_wnd_toggle_zoom(HMGL gr) +{ mglGraphAB *g = dynamic_cast(gr); if(g) g->ToggleZoom(); } +void mgl_wnd_toggle_rotate(HMGL gr) +{ mglGraphAB *g = dynamic_cast(gr); if(g) g->ToggleRotate(); } +void mgl_wnd_toggle_no(HMGL gr) +{ mglGraphAB *g = dynamic_cast(gr); if(g) g->ToggleNo(); } +void mgl_wnd_update(HMGL gr) +{ mglGraphAB *g = dynamic_cast(gr); if(g) g->Update(); } +void mgl_wnd_reload(HMGL gr, int o) +{ mglGraphAB *g = dynamic_cast(gr); if(g) g->ReLoad(o); } +void mgl_wnd_adjust(HMGL gr) +{ mglGraphAB *g = dynamic_cast(gr); if(g) g->Adjust(); } +void mgl_wnd_next_frame(HMGL gr) +{ mglGraphAB *g = dynamic_cast(gr); if(g) g->NextFrame(); } +void mgl_wnd_prev_frame(HMGL gr) +{ mglGraphAB *g = dynamic_cast(gr); if(g) g->PrevFrame(); } +void mgl_wnd_animation(HMGL gr) +{ mglGraphAB *g = dynamic_cast(gr); if(g) g->Animation(); } +//----------------------------------------------------------------------------- mreal mgl_data_get_value(const HMDT d, int i, int j, int k) { return d->a[i+d->nx*(j+d->ny*k)]; } void mgl_data_set_value(HMDT d, mreal v, int i, int j, int k) @@ -448,6 +484,7 @@ void mgl_set_auto(HMGL gr, mreal x1, mreal x2, mreal y1, mreal y2, mreal z1, mre { gr->SetAutoRanges(x1,x2,y1,y2,z1,z2); } void mgl_set_tick_len(HMGL gr, mreal len, mreal stt) { gr->SetTickLen(len,stt); } -void mgl_set_tick_stl(HMGL gr, const char *stl, const char *sub) +void mgl_set_tick_stl(HMGL gr, const char *stl, const char *sub) { gr->SetTickStl(stl,sub); } +int mgl_get_warn(HMGL gr) { return gr->WarnCode; } //----------------------------------------------------------------------------- diff --git a/mgl/mgl_cont.cpp b/mgl/mgl_cont.cpp index 36c5145..23ff742 100644 --- a/mgl/mgl_cont.cpp +++ b/mgl/mgl_cont.cpp @@ -400,9 +400,9 @@ void mglGraph::ContD(const mglData &v, const mglData &x, const mglData &y, const if(y.nx!=z.ny && (x.ny!=z.ny || y.nx!=z.nx || y.ny!=z.ny)) { SetWarn(mglWarnDim, "ContD"); return; } if(!sch || !(*sch)) sch = PalNames; - mglColor *cm = new mglColor[NUM_COLOR]; + mglColor *cm = new mglColor[MGL_CMAP_COLOR]; long nc=NumCol, i, len=strlen(sch); - memcpy(cm,cmap,NUM_COLOR*sizeof(mglColor)); // save color scheme + memcpy(cm,cmap,MGL_CMAP_COLOR*sizeof(mglColor)); // save color scheme mglData vv(2); char ss[2]="k"; for(i=0;i=n) continue; nn[3*j]=k1; nn[3*j+1]=k2; nn[3*j+2]=k3; j++; } -// DefColor(mglColor(0,0,0),1); -// trigs_plot(j,nn,n,pp,cc,tt,false, a.nx==m); -// if(sch && strchr(sch,'#')) -// trigs_plot(j,nn,n,pp,0,tt,true, a.nx==m); trigs_plot(j,nn,n,pp,cc,tt,sch && strchr(sch,'#'), a.nx==m); EndGroup(); delete []pp; delete []tt; delete []cc; delete []nn; } //----------------------------------------------------------------------------- void mglGraph::TriPlot(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const char *sch) +{ + TriPlot(nums,x,y,z,z,sch); +} +//----------------------------------------------------------------------------- +void mglGraph::TriPlot(const mglData &nums, const mglData &x, const mglData &y, const char *sch, mreal zVal) +{ + if(isnan(zVal)) zVal = Min.z; + mglData z(x.nx); + z.Fill(zVal,zVal); + TriPlot(nums,x,y,z,z,sch); +} +//----------------------------------------------------------------------------- +// +// TriCont series +// +//----------------------------------------------------------------------------- +void mglGraph::tricont_line(mreal val, long i, long k1, long k2, long k3, const mglData &x, const mglData &y, + const mglData &z, const mglData &a, mreal zVal) +{ + mreal d1,d2,p1[3],p2[3],c1[4],c2[4]; + mglColor q1,q2,q3; + d1 = _d(val,z.a[k1],z.a[k2]); + d2 = _d(val,z.a[k1],z.a[k3]); + if(d1<0 || d1>1 || d2<0 || d2>1) return; + p1[2] = p2[2] = zVal; + + p1[0] = x.a[k1]*(1-d1)+x.a[k2]*d1; + p1[1] = y.a[k1]*(1-d1)+y.a[k2]*d1; + if(!ScalePoint(p1[0],p1[1],p1[2])) return; + p2[0] = x.a[k1]*(1-d2)+x.a[k3]*d2; + p2[1] = y.a[k1]*(1-d2)+y.a[k3]*d2; + if(!ScalePoint(p1[0],p1[1],p1[2])) return; + if(a.nx==x.nx) + { + q1 = GetC(a.a[k1]); q2 = GetC(a.a[k2]); q3 = GetC(a.a[k3]); + c1[0] = q1.r*(1-d1)+q2.r*d1; c2[0] = q1.r*(1-d2)+q3.r*d2; + c1[2] = q1.g*(1-d1)+q2.g*d1; c2[2] = q1.g*(1-d2)+q3.g*d2; + c1[3] = q1.b*(1-d1)+q2.b*d1; c2[3] = q1.b*(1-d2)+q3.b*d2; + c1[3]=c2[3]=1; + } + else + { + q1 = GetC(a.a[i]); c1[0]=q1.r; c1[1]=q1.g; c1[2]=q1.b; c1[3]=1; + memcpy(c2,c1,4*sizeof(mreal)); + } + line_plot(p1,p2,c1,c2); +} +//----------------------------------------------------------------------------- +void mglGraph::TriContV(const mglData &v, const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const mglData &a, const char *sch,mreal zVal) { long n = x.nx, m = nums.ny; - if(y.nx!=n || z.nx!=n || nums.nx<3) { SetWarn(mglWarnLow,"TriPlot"); return; } + if(y.nx!=n || z.nx!=n || nums.nx<3) { SetWarn(mglWarnLow,"TriCont"); return; } + if(a.nx!=m && a.nx!=n) { SetWarn(mglWarnLow,"TriCont"); return; } SetScheme(sch); - static int cgid=1; StartGroup("TriPlot",cgid++); - mreal *pp = new mreal[3*n], *cc = new mreal[4*n]; - bool *tt = new bool[n]; - long *nn = new long[3*m]; - mglColor c; - register long i,j,k1,k2,k3; - for(i=0;i=n) continue; + k2 = long(nums.a[3*i+1]+0.1); if(k2<0 || k2>=n) continue; + k3 = long(nums.a[3*i+2]+0.1); if(k3<0 || k3>=n) continue; + val = isnan(zVal) ? v.a[k] : zVal; + tricont_line(v.a[k], i,k1,k2,k3,x,y,z,a,val); + tricont_line(v.a[k], i,k2,k1,k3,x,y,z,a,val); + tricont_line(v.a[k], i,k3,k2,k1,x,y,z,a,val); } +} +//----------------------------------------------------------------------------- +void mglGraph::TriCont(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const mglData &a, const char *sch, int Num, mreal zVal) +{ + if(Num<1) { SetWarn(mglWarnCnt,"Cont"); return; } + mglData v(Num); + for(long i=0;i=n) continue; - k2 = long(nums.a[3*i+1]+0.1); if(k2<0 || k2>=n) continue; - k3 = long(nums.a[3*i+2]+0.1); if(k3<0 || k3>=n) continue; - nn[3*j]=k1; nn[3*j+1]=k2; nn[3*j+2]=k3; j++; + k1 = long(nums.a[4*i]+0.1); if(k1<0 || k1>=n) continue; + k2 = long(nums.a[4*i+1]+0.1); if(k2<0 || k2>=n) continue; + k3 = long(nums.a[4*i+2]+0.1); if(k3<0 || k3>=n) continue; + k4 = long(nums.a[4*i+3]+0.1); if(k4<0 || k4>=n) continue; + nn[4*j]=k1; nn[4*j+1]=k2; nn[4*j+2]=k3; nn[4*j+4]=k4; j++; } -// DefColor(mglColor(0,0,0),1); -// trigs_plot(j,nn,n,pp,cc,tt,false); -// if(sch && strchr(sch,'#')) -// trigs_plot(j,nn,n,pp,0,tt,true); - trigs_plot(j,nn,n,pp,cc,tt,sch && strchr(sch,'#')); + quads_plot(j,nn,n,pp,cc,tt,sch && strchr(sch,'#'), a.nx==m); EndGroup(); delete []pp; delete []tt; delete []cc; delete []nn; } //----------------------------------------------------------------------------- -void mglGraph::TriPlot(const mglData &nums, const mglData &x, const mglData &y, const char *sch, mreal zVal) +void mglGraph::QuadPlot(const mglData &nums, const mglData &x, const mglData &y, const mglData &z, const char *sch) +{ + QuadPlot(nums,x,y,z,z,sch); +} +//----------------------------------------------------------------------------- +void mglGraph::QuadPlot(const mglData &nums, const mglData &x, const mglData &y, const char *sch, mreal zVal) { if(isnan(zVal)) zVal = Min.z; mglData z(x.nx); z.Fill(zVal,zVal); - TriPlot(nums,x,y,z,sch); + QuadPlot(nums,x,y,z,z,sch); } //----------------------------------------------------------------------------- // @@ -315,6 +394,27 @@ void mgl_triplot_xyz(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const /// Draw triangle mesh for points in arrays \a x, \a y. void mgl_triplot_xy(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const char *sch, mreal zVal) { if(gr&&nums&&x&&y) gr->TriPlot(*nums, *x, *y, sch, zVal); } +/// Draw quad mesh for points in arrays \a x, \a y, \a z. +void mgl_quadplot_xyzc(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const HMDT c, const char *sch) +{ if(gr&&nums&&x&&y&&z&&c) gr->QuadPlot(*nums, *x, *y, *z, *c, sch); } +/// Draw quad mesh for points in arrays \a x, \a y, \a z. +void mgl_quadplot_xyz(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const char *sch) +{ if(gr&&nums&&x&&y&&z) gr->QuadPlot(*nums, *x, *y, *z, sch); } +/// Draw quad mesh for points in arrays \a x, \a y. +void mgl_quadplot_xy(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const char *sch, mreal zVal) +{ if(gr&&nums&&x&&y) gr->QuadPlot(*nums, *x, *y, sch, zVal); } + +/// Draw contours for triangle mesh for points in arrays \a x, \a y, \a z. +void mgl_tricont_xyzcv(HMGL gr, const HMDT v, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const HMDT c, const char *sch, mreal zVal) +{ if(gr&&nums&&x&&y&&z&&c) gr->TriContV(*v, *nums, *x, *y, *z, *c, sch, zVal); } +void mgl_tricont_xyzc(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const HMDT c, const char *sch, int n, mreal zVal) +{ if(gr&&nums&&x&&y&&z&&c) gr->TriCont(*nums, *x, *y, *z, *c, sch, n, zVal); } +/// Draw contours for triangle mesh for points in arrays \a x, \a y, \a z. +void mgl_tricont_xyzv(HMGL gr, const HMDT v, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const char *sch, mreal zVal) +{ if(gr&&nums&&x&&y&&z) gr->TriContV(*v, *nums, *x, *y, *z, sch, zVal); } +void mgl_tricont_xyz(HMGL gr, const HMDT nums, const HMDT x, const HMDT y, const HMDT z, const char *sch, int n, mreal zVal) +{ if(gr&&nums&&x&&y&&z) gr->TriCont(*nums, *x, *y, *z, sch, n, zVal); } + /// Draw dots in points \a x, \a y, \a z. void mgl_dots(HMGL gr, const HMDT x, const HMDT y, const HMDT z, const char *sch) { if(gr&&x&&y&&z) gr->Dots(*x,*y,*z,sch); } @@ -355,6 +455,60 @@ void mgl_triplot_xy_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, if(gr&&nums&&x&&y) _GR_->TriPlot(_D_(nums), _D_(x), _D_(y), s, *zVal); delete []s; } +/// Draw triangle mesh for points in arrays \a x, \a y, \a z and color it by \a c. +void mgl_quadplot_xyzc_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *c, const char *sch,int l) +{ + char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; + if(gr && nums && x && y && z && c) + _GR_->QuadPlot(_D_(nums), _D_(x), _D_(y), _D_(z), _D_(c), s); + delete []s; +} +/// Draw triangle mesh for points in arrays \a x, \a y, \a z. +void mgl_quadplot_xyz_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *sch,int l) +{ + char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; + if(gr && nums && x && y && z) _GR_->QuadPlot(_D_(nums), _D_(x), _D_(y), _D_(z), s); + delete []s; +} +/// Draw triangle mesh for points in arrays \a x, \a y. +void mgl_quadplot_xy_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, const char *sch, mreal *zVal,int l) +{ + char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; + if(gr&&nums&&x&&y) _GR_->QuadPlot(_D_(nums), _D_(x), _D_(y), s, *zVal); + delete []s; +} + +/// Draw triangle mesh for points in arrays \a x, \a y, \a z and color it by \a c. +void mgl_tricont_xyzcv_(uintptr_t *gr, uintptr_t *v, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *c, const char *sch, mreal *zVal,int l) +{ + char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; + if(gr && nums && x && y && z && c) + _GR_->TriContV(_D_(v), _D_(nums), _D_(x), _D_(y), _D_(z), _D_(c), s, *zVal); + delete []s; +} +/// Draw triangle mesh for points in arrays \a x, \a y, \a z. +void mgl_tricont_xyzv_(uintptr_t *gr, uintptr_t *v, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *sch, mreal *zVal,int l) +{ + char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; + if(gr && nums && x && y && z) _GR_->TriContV(_D_(v), _D_(nums), _D_(x), _D_(y), _D_(z), s, *zVal); + delete []s; +} +/// Draw triangle mesh for points in arrays \a x, \a y, \a z and color it by \a c. +void mgl_tricont_xyzc_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *c, const char *sch, int *n, mreal *zVal, int l) +{ + char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; + if(gr && nums && x && y && z && c) + _GR_->TriCont( _D_(nums), _D_(x), _D_(y), _D_(z), _D_(c), s, *n, *zVal); + delete []s; +} +/// Draw triangle mesh for points in arrays \a x, \a y, \a z. +void mgl_tricont_xyz_(uintptr_t *gr, uintptr_t *nums, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *sch, int *n, mreal *zVal, int l) +{ + char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; + if(gr && nums && x && y && z) _GR_->TriCont(_D_(nums), _D_(x), _D_(y), _D_(z), s, *n, *zVal); + delete []s; +} + /// Draw dots in points \a x, \a y, \a z. void mgl_dots_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, const char *sch,int l) { diff --git a/mgl/mgl_data.cpp b/mgl/mgl_data.cpp index 6779d0b..71279e4 100644 --- a/mgl/mgl_data.cpp +++ b/mgl/mgl_data.cpp @@ -24,6 +24,8 @@ #ifndef NO_GSL #include +#include +#include #endif void mglFillP(int x,int y, const mreal *a,int nx,int ny,mreal _p[4][4]); @@ -865,10 +867,9 @@ mglData mglTransformA(const mglData &am, const mglData &ph, const char *tr) //----------------------------------------------------------------------------- mglData mglTransform(const mglData &re, const mglData &im, const char *tr) { - mglData d,rr(re),ii(im); int nx = re.nx, ny = re.ny, nz = re.nz; - if(nx*ny*nz != im.nx*im.ny*im.nz || !tr || tr[0]==0) - { d.Create(1,1,1); return d; } + if(nx*ny*nz != im.nx*im.ny*im.nz || !tr || tr[0]==0) return mglData(); + mglData rr(re),ii(im); if(strchr(tr,'i') && strchr(tr,'f')) // general case { if(tr[0]=='f') mglFourier(rr,ii,"x"); @@ -894,9 +895,27 @@ mglData mglTransform(const mglData &re, const mglData &im, const char *tr) if(tr[2]=='f') str[2]='z'; mglFourier(rr,ii,str); } - d.Create(nx, ny, nz); + else if(strchr(tr,'s')) // do Fourier only once for speeding up + { + if(tr[0]=='s') { rr.SinFFT("x"); ii.SinFFT("x"); } + if(tr[1]=='s') { rr.SinFFT("y"); ii.SinFFT("y"); } + if(tr[2]=='s') { rr.SinFFT("z"); ii.SinFFT("z"); } + } + else if(strchr(tr,'c')) // do Fourier only once for speeding up + { + if(tr[0]=='c') { rr.CosFFT("x"); ii.CosFFT("x"); } + if(tr[1]=='c') { rr.CosFFT("y"); ii.CosFFT("y"); } + if(tr[2]=='c') { rr.CosFFT("z"); ii.CosFFT("z"); } + } + else if(strchr(tr,'s')) // do Fourier only once for speeding up + { + if(tr[0]=='h') { rr.Hankel("x"); ii.Hankel("x"); } + if(tr[1]=='h') { rr.Hankel("y"); ii.Hankel("y"); } + if(tr[2]=='h') { rr.Hankel("z"); ii.Hankel("z"); } + } + mglData d(nx, ny, nz); register long i; - for(i=0;i1) +void mglData::Hankel(const char *dir) +{ +#ifndef NO_GSL + double *ai=0, *af=0, mm; + gsl_dht *dht=0; + register long i,j,k; + if(strchr(dir,'x') && nx>1) + { + ai = new double[nx]; af = new double[nx]; + dht = gsl_dht_new(nx,0,1); + mm = gsl_sf_bessel_zero_J0(nx+1); + for(i=0;i1) + { + ai = new double[ny]; af = new double[ny]; + dht = gsl_dht_new(ny,0,1); + mm = gsl_sf_bessel_zero_J0(ny+1); + for(i=0;i1) + { + ai = new double[nz]; af = new double[nz]; + dht = gsl_dht_new(nz,0,1); + mm = gsl_sf_bessel_zero_J0(nz+1); + k = nx*ny; for(i=0;i1) + { + wt = gsl_fft_complex_wavetable_alloc(2*nx); + ws = gsl_fft_complex_workspace_alloc(2*nx); + b = new double[4*nx]; + for(i=0;i1) { - nn = (ny/2)*nx; - for(i=0;i1) + { + wt = gsl_fft_complex_wavetable_alloc(2*nz); + ws = gsl_fft_complex_workspace_alloc(2*nz); + b = new double[4*nz]; k = nx*ny; + for(i=0;i1) + { + wt = gsl_fft_complex_wavetable_alloc(2*nx); + ws = gsl_fft_complex_workspace_alloc(2*nx); + b = new double[4*nx]; + for(i=0;i1) { - nn = nx/2; - for(j=0;j1) + { + wt = gsl_fft_complex_wavetable_alloc(2*nz); + ws = gsl_fft_complex_workspace_alloc(2*nz); + b = new double[4*nz]; k = nx*ny; + for(i=0;i1) Roll('z',nz/2); + if(strchr(dir,'y') && ny>1) Roll('y',ny/2); + if(strchr(dir,'x') && nx>1) Roll('x',nx/2); +} +//----------------------------------------------------------------------------- +void mglData::Roll(char dir, int num) +{ + register long i,d; + mreal *b; + if(dir=='z' && nz>1) + { + d = num>0 ? num%nz : (num+nz*(1+num/nz))%nz; + if(d==0) return; // nothing to do + b = new mreal[nx*ny*nz]; + memcpy(b,a+nx*ny*d,nx*ny*(nz-d)*sizeof(mreal)); + memcpy(b+nx*ny*(nz-d),a,nx*ny*d*sizeof(mreal)); + delete []a; a=b; + } + if(dir=='y' && ny>1) + { + d = num>0 ? num%ny : (num+ny*(1+num/ny))%ny; + if(d==0) return; // nothing to do + b = new mreal[nx*ny*nz]; + memcpy(b,a+nx*d,(nx*ny*nz-nx*d)*sizeof(mreal)); + for(i=0;i1) + { + d = num>0 ? num%nx : (num+nx*(1+num/nx))%nx; + if(d==0) return; // nothing to do + b = new mreal[nx*ny*nz]; + memcpy(b,a+d,(nx*ny*nz-d)*sizeof(mreal)); + for(i=0;inx) at=nx; - register long i,j,k; + if(at<0) at=0; if(at>nx) at=nx; + register long i,j,k,nn=nx+num; + mglData b(nn,ny,nz); for(i=0;inx) at=nx; - register long i,j,k; + if(at<0) at=0; if(at>nx) at=nx; + register long i,j,k,nn=num+ny; + mglData b(nx,nn,nz); for(i=0;inx) at=nx; + if(at<0) at=0; if(at>nx) at=nx; register long i,j,k; + mglData b(nx,ny,nz+num); for(i=0;i=nx) for(i=0;i=nx) for(i=0;i=ny) for(i=0;i=nx) for(i=0;i=nx) for(i=0;i=ny) for(i=0;i=nz) for(i=0;iMinimal(); } mreal *mgl_data_value(HMDT d, int i,int j,int k) { return d->a+i+d->nx*(j+d->ny*k); } /// Swap left and right part of the data in given direction (useful for fourier spectrums) -void mgl_data_swap(HMDT d, const char *dir) -{ d->Swap(dir); } +void mgl_data_swap(HMDT d, const char *dir) { d->Swap(dir); } +/// Swap left and right part of the data in given direction (useful for fourier spectrums) +void mgl_data_roll(HMDT d, char dir, int num) { d->Roll(dir,num); } /// Mirror the data in given direction -void mgl_data_mirror(HMDT d, const char *dir) -{ d->Mirror(dir); } -void mgl_data_insert(HMDT dat, char dir, int at, int num) -{ dat->Insert(dir,at,num); } -void mgl_data_delete(HMDT dat, char dir, int at, int num) -{ dat->Delete(dir,at,num); } +void mgl_data_mirror(HMDT d, const char *dir) { d->Mirror(dir); } +void mgl_data_fill_sample(HMDT d, int num, const char *how) { d->FillSample(num,how); } +void mgl_data_insert(HMDT d, char dir, int at, int num){ d->Insert(dir,at,num); } +void mgl_data_delete(HMDT d, char dir, int at, int num){ d->Delete(dir,at,num); } +void mgl_data_hankel(HMDT d, const char *dir) { d->Hankel(dir); } +void mgl_data_sinfft(HMDT d, const char *dir) { d->SinFFT(dir); } +void mgl_data_cosfft(HMDT d, const char *dir) { d->CosFFT(dir); } //----------------------------------------------------------------------------- /// Allocate memory and copy the data from the (mreal *) array void mgl_data_set_float(HMDT d, const float *A,int NX,int NY,int NZ) @@ -247,6 +249,8 @@ void mgl_data_swap_(uintptr_t *d, const char *dir,int l) _DT_->Swap(s); delete []s; } +void mgl_data_roll_(uintptr_t *d, const char *dir, int *num, int) +{ _DT_->Roll(*dir, *num); } /// Mirror the data in given direction void mgl_data_mirror_(uintptr_t *d, const char *dir,int l) { @@ -254,10 +258,31 @@ void mgl_data_mirror_(uintptr_t *d, const char *dir,int l) _DT_->Mirror(s); delete []s; } +void mgl_data_fill_sample_(uintptr_t *d, int num, const char *how,int l) +{ + char *s=new char[l+1]; memcpy(s,how,l); s[l]=0; + _DT_->FillSample(num,s); + delete []s; +} void mgl_data_insert_(uintptr_t *d, const char *dir, int *at, int *num, int) { _DT_->Insert(*dir,*at,*num); } void mgl_data_delete_(uintptr_t *d, const char *dir, int *at, int *num, int) { _DT_->Delete(*dir,*at,*num); } +void mgl_data_hankel_(uintptr_t *d, const char *dir,int l) +{ + char *s=new char[l+1]; memcpy(s,dir,l); s[l]=0; + _DT_->Hankel(s); delete []s; +} +void mgl_data_sinfft_(uintptr_t *d, const char *dir,int l) +{ + char *s=new char[l+1]; memcpy(s,dir,l); s[l]=0; + _DT_->SinFFT(s); delete []s; +} +void mgl_data_cosfft_(uintptr_t *d, const char *dir,int l) +{ + char *s=new char[l+1]; memcpy(s,dir,l); s[l]=0; + _DT_->CosFFT(s); delete []s; +} //----------------------------------------------------------------------------- /// Allocate memory and copy the data from the (mreal *) array void mgl_data_set_float1_(uintptr_t *d, const float *A,int *NX) diff --git a/mgl/mgl_data_io.cpp b/mgl/mgl_data_io.cpp index 2cb9aa4..0c5d845 100644 --- a/mgl/mgl_data_io.cpp +++ b/mgl/mgl_data_io.cpp @@ -21,9 +21,13 @@ #include #include #include +#include #ifdef HAVE_HDF5 #include #endif +#ifdef HAVE_HDF4 +#include +#endif #ifndef WIN32 #include @@ -296,36 +300,39 @@ void mglData::Save(const char *fname,int ns) const } fclose(fp); } +//----------------------------------------------------------------------------- +char *mgl_read_gz(gzFile fp) +{ + long size=1024,n=0; + char *buf=(char*)malloc(size); + while(gzread(fp,buf+size*n,size)>0) + { n++; buf=(char*)realloc(buf,size*(n+1)); } + return buf; +} //----------------------------------------------------------------------------- bool mglData::Read(const char *fname) { long l=1,m=1,k=1; long nb,i; - FILE *fp = fopen(fname,"rb"); + gzFile fp = gzopen(fname,"r"); if(!fp) - { + { if(!a) Create(1,1,1); return false; } - fseek(fp,0,SEEK_END); - nb = ftell(fp); - char *buf = new char[nb+1]; - fseek(fp,0,SEEK_SET); - memset(buf,0,nb*sizeof(char)); - fread(buf,nb,1,fp); - fclose(fp); + char *buf = mgl_read_gz(fp); + nb = strlen(buf); gzclose(fp); bool first=false,com=false; register char ch; for(i=nb-1;i>=0;i--) if(buf[i]>' ') break; - buf[i+1]=0; nb = i; // remove tailing spaces + buf[i+1]=0; nb = i; // remove tailing spaces for(i=0;i' ' && !first) first=true; + if(first && (ch==' ' || ch=='\t') && buf[i+1]>' ') k++; } first = false; for(i=0;i=nx*ny*nz) break; } - delete []buf; + free(buf); return true; } //----------------------------------------------------------------------------- bool mglData::ReadMat(const char *fname,int dim) { if(dim<=0 || dim>3) return false; - FILE *fp = fopen(fname,"rt"); + gzFile fp = gzopen(fname,"r"); if(!fp) return false; nx = ny = nz = 1; NewId(); - - fseek(fp,0,SEEK_END); - long nb = ftell(fp); - char *buf = new char[nb+1]; - fseek(fp,0,SEEK_SET); - memset(buf,0,nb); fread(buf,nb,1,fp); - fclose(fp); + char *buf = mgl_read_gz(fp); + long nb = strlen(buf); gzclose(fp); register long i=0,j=0; while(j=nx*ny*nz) break; while(buf[j]>' ' && j0 && rank<=3) @@ -1082,7 +1118,7 @@ bool mglData::ReadAll(const char *templ, bool as_slice) delete []fname; free(b); return true; #else - return false; + return false; #endif } //----------------------------------------------------------------------------- diff --git a/mgl/mgl_data_png.cpp b/mgl/mgl_data_png.cpp index 348134b..4668695 100644 --- a/mgl/mgl_data_png.cpp +++ b/mgl/mgl_data_png.cpp @@ -99,31 +99,28 @@ void mglData::Import(const char *fname,const char *scheme,mreal v1,mreal v2) { if(v1>=v2) return; long num=0; - #ifndef NO_PNG FILE *fp = fopen(fname, "rb"); if (!fp) return; png_structp png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, 0, 0, 0); - if (!png_ptr) return; + if (!png_ptr) { fclose(fp); return; } png_infop info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) - { png_destroy_read_struct(&png_ptr,0, 0); return; } + { png_destroy_read_struct(&png_ptr,0,0); fclose(fp); return; } png_infop end_info = png_create_info_struct(png_ptr); if (!end_info) - { png_destroy_read_struct(&png_ptr, &info_ptr, 0); return; } + { png_destroy_read_struct(&png_ptr,&info_ptr,0); fclose(fp); return; } png_init_io(png_ptr, fp); png_read_png(png_ptr, info_ptr, PNG_TRANSFORM_STRIP_ALPHA|PNG_TRANSFORM_PACKING| PNG_TRANSFORM_STRIP_16|PNG_TRANSFORM_EXPAND,0); unsigned char **rows = png_get_rows(png_ptr, info_ptr); - unsigned char *c = mgl_create_scheme(scheme,num); if(num>1) { long w=png_get_image_width(png_ptr, info_ptr); long h=png_get_image_height(png_ptr, info_ptr); - Create(w,h,1); register long i,j,k; long pos=0,val,mval=256; @@ -147,7 +144,6 @@ void mglData::Import(const char *fname,const char *scheme,mreal v1,mreal v2) void mglData::Export(const char *fname,const char *scheme,mreal v1,mreal v2,int ns) const { register long i,j,i0,k; - if(v1>v2) return; if(v1==v2) { @@ -156,7 +152,6 @@ void mglData::Export(const char *fname,const char *scheme,mreal v1,mreal v2,int { if(a[i]v2) v2=a[i]; } } if(v1==v2) return; - #ifndef NO_PNG long num=0; unsigned char *c = mgl_create_scheme(scheme,num); @@ -165,7 +160,6 @@ void mglData::Export(const char *fname,const char *scheme,mreal v1,mreal v2,int unsigned char **p = (unsigned char **)malloc(ny*sizeof(unsigned char *)); unsigned char *d = (unsigned char *)malloc(3*nx*ny*sizeof(unsigned char)); for(i=0;i=nz) ns=0; long dd = nx*ny*ns; for(i=0;i #include +#include #include "mgl/mgl_eps.h" #include "mgl/mgl_c.h" #include "mgl/mgl_f.h" +void mgl_printf(void *fp, bool gz, const char *str, ...); //----------------------------------------------------------------------------- int mgl_compare_prim(const void *p1, const void *p2) { @@ -83,8 +85,8 @@ void mglGraphPS::line_plot(mreal *p1,mreal *p2,mreal *c1,mreal *c2,bool all) a.x[0]=p1[0]; a.y[0]=p1[1]; a.x[1]=p2[0]; a.y[1]=p2[1]; a.zz[0]=p1[2]; a.zz[1]=p2[2]; a.c[0]=(c1[0]+c2[0])/2; a.c[1]=(c1[1]+c2[1])/2; a.c[2]=(c1[2]+c2[2])/2; -// a.c[0]=c1[0]; a.c[1]=c1[1]; a.c[2]=c1[2]; - a.SetStyle(all? 0xffff:PDef,int(pPos)); +// a.c[0]=c1[0]; a.c[1]=c1[1]; a.c[2]=c1[2]; + a.style=all? 0xffff:PDef; a.s = pPos; add_prim(a); pPos = fmod(pPos+hypot(p2[0]-p1[0], p2[1]-p1[1])/pw/1.5, 16); } @@ -295,45 +297,33 @@ bool mglPrim::IsSame(mreal wp,mreal *cp,int st) return (cp[0]==c[0] && cp[1]==c[1] && cp[2]==c[2]); } //----------------------------------------------------------------------------- -void mglPrim::SetStyle(unsigned PDef, int pPos) -{ - style=0; - switch(PDef) - { - case 0xff00: style=1; break; - case 0xf0f0: style=2; break; - case 0x8888: style=3; break; - case 0xfe10: style=4; break; - case 0xe4e4: style=5; break; - } - pPos = abs(pPos)%16; - dash = (PDef>>(16-pPos))+(PDef<') m_r = true; if(P[i].m=='R') m_R = true; + if(P[i].m=='Y') m_Y = true; + if(P[i].m=='P') m_P = true; if(P[i].m=='X') m_X = true; + } + if(m_P) { m_p=true; m_s=true; } + if(m_X) { m_x=true; m_s=true; } + if(m_p) mgl_printf(fp, gz, "/m_p {sm 0 rm s2 0 rl sm sm rm 0 s2 rl d0} def\n"); + if(m_x) mgl_printf(fp, gz, "/m_x {sm sm rm s2 s2 rl 0 sm 2 mul rm sm 2 mul s2 rl d0} def\n"); + if(m_s) mgl_printf(fp, gz, "/m_s {sm sm rm 0 s2 rl s2 0 rl 0 sm 2 mul rl cp d0} def\n"); + if(m_d) mgl_printf(fp, gz, "/m_d {sm 0 rm ss ss rl ss sm rl sm sm rl cp d0} def\n"); + if(m_v) mgl_printf(fp, gz, "/m_v {sm ss 2 div rm s2 0 rl sm sm 1.5 mul rl d0 cp} def\n"); + if(m_t) mgl_printf(fp, gz, "/m_t {sm sm 2 div rm s2 0 rl sm ss 1.5 mul rl d0 cp} def\n"); + if(m_a) mgl_printf(fp, gz, "/m_a {sm 0 rm s2 0 rl sm 1.6 mul sm 0.8 mul rm ss 1.2 mul ss 1.6 mul rl 0 sm 1.6 mul rm sm 1.2 mul ss 1.6 mul rl d0} def\n"); + if(m_o) mgl_printf(fp, gz, "/m_o {ss 0 360 d0 arc} def\n"); + if(m_S) mgl_printf(fp, gz, "/m_S {sm sm rm 0 s2 rl s2 0 rl 0 sm 2 mul rl cp} def\n"); + if(m_D) mgl_printf(fp, gz, "/m_D {sm 0 rm ss ss rl ss sm rl sm sm rl cp} def\n"); + if(m_V) mgl_printf(fp, gz, "/m_V {sm ss 2 div rm s2 0 rl sm sm 1.5 mul rl cp} def\n"); + if(m_T) mgl_printf(fp, gz, "/m_T {sm sm 2 div rm s2 0 rl sm ss 1.5 mul rl cp} def\n"); + if(m_Y) mgl_printf(fp, gz, "/m_Y {0 sm rm 0 ss rl sm ss rl s2 0 rm sm sm rl d0} def\n"); + if(m_r) mgl_printf(fp, gz, "/m_r {sm 2 div sm rm 0 s2 rl ss 1.5 mul sm rl d0 cp} def\n"); + if(m_l) mgl_printf(fp, gz, "/m_l {ss 2 div sm rm 0 s2 rl sm 1.5 mul sm rl d0 cp} def\n"); + if(m_R) mgl_printf(fp, gz, "/m_R {sm 2 div sm rm 0 s2 rl ss 1.5 mul sm rl cp} def\n"); + if(m_L) mgl_printf(fp, gz, "/m_L {ss 2 div sm rm 0 s2 rl sm 1.5 mul sm rl cp} def\n"); + if(m_P) mgl_printf(fp, gz, "/m_P {m_p 0 sm rm m_s} def\n"); + if(m_X) mgl_printf(fp, gz, "/m_X {m_x ss sm rm m_s} def\n"); +// if(m_C) mgl_printf(fp, gz, "/m_C {m_c m_o} def\n"); + mgl_printf(fp, gz, "\n"); // write definition for all glyphs - put_desc(fp,"/%c%c_%04x { np\n", "\t%d %d mt ", "%d %d ll ", "cp\n", "} def\n"); + put_desc(fp,gz,"/%c%c_%04x { np\n", "\t%d %d mt ", "%d %d ll ", "cp\n", "} def\n"); // write primitives mreal cp[3]={-1,-1,-1},wp=-1; int st=0; @@ -379,70 +382,78 @@ void mglGraphPS::WriteEPS(const char *fname,const char *descr) wp=1; if(P[i].s!=MarkSize) { - fprintf(fp,"/ss {%g} def\n",P[i].s*0.4*font_factor); - fprintf(fp,"/s2 {%g} def\n",P[i].s*0.8*font_factor); - fprintf(fp,"/sm {-%g} def\n",P[i].s*0.4*font_factor); + mgl_printf(fp, gz, "/ss {%g} def\n",P[i].s*0.4*font_factor); + mgl_printf(fp, gz, "/s2 {%g} def\n",P[i].s*0.8*font_factor); + mgl_printf(fp, gz, "/sm {-%g} def\n",P[i].s*0.4*font_factor); } switch(P[i].m) { - case '+': fprintf(fp,"np %g %g mt m_p %sdr\n",P[i].x[0],P[i].y[0],str); break; - case 'x': fprintf(fp,"np %g %g mt m_x %sdr\n",P[i].x[0],P[i].y[0],str); break; - case 's': fprintf(fp,"np %g %g mt m_s %sdr\n",P[i].x[0],P[i].y[0],str); break; - case 'd': fprintf(fp,"np %g %g mt m_d %sdr\n",P[i].x[0],P[i].y[0],str); break; - case '*': fprintf(fp,"np %g %g mt m_a %sdr\n",P[i].x[0],P[i].y[0],str); break; - case 'v': fprintf(fp,"np %g %g mt m_v %sdr\n",P[i].x[0],P[i].y[0],str); break; - case '^': fprintf(fp,"np %g %g mt m_t %sdr\n",P[i].x[0],P[i].y[0],str); break; - case 'S': fprintf(fp,"np %g %g mt m_S %sfill\n",P[i].x[0],P[i].y[0],str); break; - case 'D': fprintf(fp,"np %g %g mt m_D %sfill\n",P[i].x[0],P[i].y[0],str); break; - case 'V': fprintf(fp,"np %g %g mt m_V %sfill\n",P[i].x[0],P[i].y[0],str); break; - case 'T': fprintf(fp,"np %g %g mt m_T %sfill\n",P[i].x[0],P[i].y[0],str); break; - case 'o': fprintf(fp,"%g %g m_o %sdr\n",P[i].x[0],P[i].y[0],str);break; - case 'O': fprintf(fp,"%g %g m_O %sdr\n",P[i].x[0],P[i].y[0],str);break; - default: fprintf(fp,"%g %g m_c %sfill\n",P[i].x[0],P[i].y[0],str); + case '+': mgl_printf(fp, gz, "np %g %g mt m_p %sdr\n",P[i].x[0],P[i].y[0],str); break; + case 'x': mgl_printf(fp, gz, "np %g %g mt m_x %sdr\n",P[i].x[0],P[i].y[0],str); break; + case 's': mgl_printf(fp, gz, "np %g %g mt m_s %sdr\n",P[i].x[0],P[i].y[0],str); break; + case 'd': mgl_printf(fp, gz, "np %g %g mt m_d %sdr\n",P[i].x[0],P[i].y[0],str); break; + case '*': mgl_printf(fp, gz, "np %g %g mt m_a %sdr\n",P[i].x[0],P[i].y[0],str); break; + case 'v': mgl_printf(fp, gz, "np %g %g mt m_v %sdr\n",P[i].x[0],P[i].y[0],str); break; + case '^': mgl_printf(fp, gz, "np %g %g mt m_t %sdr\n",P[i].x[0],P[i].y[0],str); break; + case 'S': mgl_printf(fp, gz, "np %g %g mt m_S %sfill\n",P[i].x[0],P[i].y[0],str); break; + case 'D': mgl_printf(fp, gz, "np %g %g mt m_D %sfill\n",P[i].x[0],P[i].y[0],str); break; + case 'V': mgl_printf(fp, gz, "np %g %g mt m_V %sfill\n",P[i].x[0],P[i].y[0],str); break; + case 'T': mgl_printf(fp, gz, "np %g %g mt m_T %sfill\n",P[i].x[0],P[i].y[0],str); break; + case 'o': mgl_printf(fp, gz, "%g %g m_o %sdr\n",P[i].x[0],P[i].y[0],str);break; + case 'O': mgl_printf(fp, gz, "%g %g m_o %sfill\n",P[i].x[0],P[i].y[0],str);break; + case 'Y': mgl_printf(fp, gz, "np %g %g mt m_Y %sdr\n",P[i].x[0],P[i].y[0],str); break; + case '<': mgl_printf(fp, gz, "np %g %g mt m_l %sdr\n",P[i].x[0],P[i].y[0],str); break; + case '>': mgl_printf(fp, gz, "np %g %g mt m_r %sdr\n",P[i].x[0],P[i].y[0],str); break; + case 'L': mgl_printf(fp, gz, "np %g %g mt m_L %sfill\n",P[i].x[0],P[i].y[0],str); break; + case 'R': mgl_printf(fp, gz, "np %g %g mt m_R %sfill\n",P[i].x[0],P[i].y[0],str); break; + case 'P': mgl_printf(fp, gz, "np %g %g mt m_P %sdr\n",P[i].x[0],P[i].y[0],str); break; + case 'X': mgl_printf(fp, gz, "np %g %g mt m_X %sdr\n",P[i].x[0],P[i].y[0],str); break; + case 'C': mgl_printf(fp, gz, "%g %g m_o %g %g m_c %sdr\n",P[i].x[0],P[i].y[0],P[i].x[0],P[i].y[0],str); break; + default: mgl_printf(fp, gz, "%g %g m_c %sfill\n",P[i].x[0],P[i].y[0],str); } if(P[i].s!=MarkSize) { - fprintf(fp,"/ss {%g} def\n",MarkSize*0.4*font_factor); - fprintf(fp,"/s2 {%g} def\n",MarkSize*0.8*font_factor); - fprintf(fp,"/sm {-%g} def\n",MarkSize*0.4*font_factor); + mgl_printf(fp, gz, "/ss {%g} def\n",MarkSize*0.4*font_factor); + mgl_printf(fp, gz, "/s2 {%g} def\n",MarkSize*0.8*font_factor); + mgl_printf(fp, gz, "/sm {-%g} def\n",MarkSize*0.4*font_factor); } } else if(P[i].type==2) // quad - fprintf(fp,"np %g %g mt %g %g ll %g %g ll cp %sfill\n",P[i].x[0],P[i].y[0],P[i].x[1],P[i].y[1],P[i].x[2],P[i].y[2],str); + mgl_printf(fp, gz, "np %g %g mt %g %g ll %g %g ll cp %sfill\n",P[i].x[0],P[i].y[0],P[i].x[1],P[i].y[1],P[i].x[2],P[i].y[2],str); else if(P[i].type==3) // trig - fprintf(fp,"np %g %g mt %g %g ll %g %g ll %g %g ll cp %sfill\n",P[i].x[0],P[i].y[0],P[i].x[1],P[i].y[1],P[i].x[3],P[i].y[3],P[i].x[2],P[i].y[2],str); + mgl_printf(fp, gz, "np %g %g mt %g %g ll %g %g ll %g %g ll cp %sfill\n",P[i].x[0],P[i].y[0],P[i].x[1],P[i].y[1],P[i].x[3],P[i].y[3],P[i].x[2],P[i].y[2],str); else if(P[i].type==1) // line { sprintf(str,"%.2g lw %.2g %.2g %.2g rgb ", P[i].w>1 ? P[i].w:1., P[i].c[0],P[i].c[1],P[i].c[2]); wp = P[i].w>1 ? P[i].w:1; st = P[i].style; - put_line(fp,i,wp,cp,st, "np %g %g mt ", "%g %g ll ", false); - const char *sd = mgl_get_dash(P[i].dash,P[i].w); - if(sd && sd[0]) fprintf(fp,"%s [%s] sd dr\n",str,sd); - else fprintf(fp,"%s d0 dr\n",str); + put_line(fp,gz,i,wp,cp,st, "np %g %g mt ", "%g %g ll ", false); + const char *sd = mgl_get_dash(P[i].style,P[i].w); + if(sd && sd[0]) mgl_printf(fp, gz, "%s [%s] %g sd dr\n",str,sd,P[i].w*P[i].s); + else mgl_printf(fp, gz, "%s d0 dr\n",str); } else if(P[i].type==4) // glyph { mreal ss = P[i].s/2, xx = P[i].x[1], yy = P[i].y[1]; - fprintf(fp,"gsave\t%g %g translate %g %g scale %g rotate %s\n", + mgl_printf(fp, gz, "gsave\t%g %g translate %g %g scale %g rotate %s\n", P[i].x[0], P[i].y[0], ss, ss, -P[i].w, str); if(P[i].style&8) // this is "line" { mreal dy = 0.004,f=fabs(P[i].zz[1]); - fprintf(fp,"np %g %g mt %g %g ll %g %g ll %g %g ll cp ", + mgl_printf(fp, gz, "np %g %g mt %g %g ll %g %g ll %g %g ll cp ", xx,yy+dy, xx+f,yy+dy, xx+f,yy-dy, xx,yy-dy); } else - fprintf(fp,"%.3g %.3g translate %g %g scale %c%c_%04x ", + mgl_printf(fp, gz, "%.3g %.3g translate %g %g scale %c%c_%04x ", xx, yy, P[i].zz[1], P[i].zz[1], P[i].style&1?'b':'n', P[i].style&2?'i':'n', P[i].m); - if(P[i].style&4) fprintf(fp,"dr"); - else fprintf(fp,"eofill"); - fprintf(fp," grestore\n"); + if(P[i].style&4) mgl_printf(fp, gz, "dr"); + else mgl_printf(fp, gz, "eofill"); + mgl_printf(fp, gz, " grestore\n"); } } for(i=0;i\n"); - fprintf(fp,"\n"); - fprintf(fp,"\n",Width,Height); + mgl_printf(fp, gz, "\n"); + mgl_printf(fp, gz, "\n"); + mgl_printf(fp, gz, "\n",Width,Height); - fprintf(fp,"\n"); - fprintf(fp,"\n\n\n",descr?descr:fname,ctime(&now)); + mgl_printf(fp, gz, "\n"); + mgl_printf(fp, gz, "\n\n\n",descr?descr:fname,ctime(&now)); // write definition for all glyphs - put_desc(fp,"\n"); // currentColor -> inherit ??? - fprintf(fp,"\n"); + mgl_printf(fp, gz, "\n"); // write primitives mreal cp[3]={-1,-1,-1},wp=-1; register long i; @@ -476,113 +488,130 @@ void mglGraphPS::WriteSVG(const char *fname,const char *descr) if(P[i].type==0) { mreal x=P[i].x[0],y=Height-P[i].y[0],s=0.4*font_factor*P[i].s; + if(!strchr("xsSoO",P[i].m)) s *= 1.1; wp = 1; - if(strchr("SDVT",P[i].m)) - fprintf(fp,"\n", + if(strchr("SDVTLR",P[i].m)) + mgl_printf(fp, gz, "\n", int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2])); else - fprintf(fp,"\n", + mgl_printf(fp, gz, "\n", int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2])); switch(P[i].m) { + case 'P': + mgl_printf(fp, gz, "\n", + x-s,y,x+s,y,x,y-s,x,y+s, x-s,y-s,x+s,y-s,x+s,y+s,x-s,y+s,x-s,y-s); break; case '+': - fprintf(fp,"\n", + mgl_printf(fp, gz, "\n", x-s,y,x+s,y,x,y-s,x,y+s); break; + case 'X': + mgl_printf(fp, gz, "\n", + x-s,y-s,x+s,y+s,x+s,y-s,x-s,y+s, x-s,y-s,x+s,y-s,x+s,y+s,x-s,y+s,x-s,y-s); break; case 'x': - fprintf(fp,"\n", + mgl_printf(fp, gz, "\n", x-s,y-s,x+s,y+s,x+s,y-s,x-s,y+s); break; case 's': - fprintf(fp,"\n", - x-s,y-s,x+s,y-s,x+s,y+s,x-s,y+s); break; - case 'd': - fprintf(fp,"\n", - x-s,y,x,y-s,x+s,y,x,y+s); break; - case '^': - fprintf(fp,"\n", - x-s,y+s/2,x+s,y+s/2,x,y-s); break; - case 'v': - fprintf(fp,"\n", - x-s,y-s/2,x+s,y-s/2,x,y+s); break; case 'S': - fprintf(fp,"\n", + mgl_printf(fp, gz, "\n", x-s,y-s,x+s,y-s,x+s,y+s,x-s,y+s); break; + case 'd': case 'D': - fprintf(fp,"\n", + mgl_printf(fp, gz, "\n", x-s,y,x,y-s,x+s,y,x,y+s); break; + case '^': case 'T': - fprintf(fp,"\n", + mgl_printf(fp, gz, "\n", x-s,y+s/2,x+s,y+s/2,x,y-s); break; + case 'v': case 'V': - fprintf(fp,"\n", + mgl_printf(fp, gz, "\n", x-s,y-s/2,x+s,y-s/2,x,y+s); break; + case '<': + case 'L': + mgl_printf(fp, gz, "\n", + x+s/2,y+s,x+s/2,y-s,x-s,y); break; + case '>': + case 'R': + mgl_printf(fp, gz, "\n", + x-s/2,y+s,x-s/2,y-s,x+s,y); break; + case 'Y': + mgl_printf(fp, gz, "\n", + x,y+s, x,y, x+s,y-s, x,y, x-s,y-s); break; + case 'C': + mgl_printf(fp, gz, "\n\n", + int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2]),x,y,x,y,s); break; case 'o': - fprintf(fp,"\n", + mgl_printf(fp, gz, "\n", x,y,s); break; case 'O': - fprintf(fp,"\n", + mgl_printf(fp, gz, "\n", int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2]),x,y,s); break; case '*': - fprintf(fp,"\n", + mgl_printf(fp, gz, "\n", x-s,y,x+s,y,x-0.8*s,y-1.6*s,x+0.8*s,y+1.6*s,x+0.8*s,y-1.6*s,x-0.8*s,y+1.6*s); break; default: - fprintf(fp,"\n", + mgl_printf(fp, gz, "\n", int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2]),x,y); break; } - fprintf(fp,"\n"); + mgl_printf(fp, gz, "\n"); } else if(P[i].type==2 && P[i].c[3]>0) { - fprintf(fp,"\n", + mgl_printf(fp, gz, "\n", int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2]),P[i].c[3]); - fprintf(fp," \n", + mgl_printf(fp, gz, " \n", P[i].x[0],Height-P[i].y[0],P[i].x[1],Height-P[i].y[1], P[i].x[2],Height-P[i].y[2]); } else if(P[i].type==3 && P[i].c[3]>0) { - fprintf(fp,"\n", + mgl_printf(fp, gz, "\n", int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2]),P[i].c[3]); - fprintf(fp," \n", + mgl_printf(fp, gz, " \n", P[i].x[0],Height-P[i].y[0],P[i].x[1],Height-P[i].y[1], P[i].x[3],Height-P[i].y[3],P[i].x[2],Height-P[i].y[2]); } else if(P[i].type==1) { // const char *dash[]={"", "8 8","4 4","1 3","7 4 1 4","3 2 1 2"}; - fprintf(fp,"1) fprintf(fp," stroke-width=\"%g\"", P[i].w); + if(P[i].style) + { + mgl_printf(fp, gz, " stroke-dasharray=\"%s\"", mgl_get_dash(P[i].style,P[i].w)); + mgl_printf(fp, gz, " stroke-dashoffset=\"%g\"", P[i].s*P[i].w); + } + if(P[i].w>1) mgl_printf(fp, gz, " stroke-width=\"%g\"", P[i].w); memcpy(cp,P[i].c,3*sizeof(mreal)); wp = P[i].w>1 ? P[i].w:1; st = P[i].style; - put_line(fp,i,wp,cp,st, "> \n"); + put_line(fp,gz,i,wp,cp,st, "> \n"); } else if(P[i].type==4) { mreal ss = P[i].s/2, xx = P[i].x[1], yy = P[i].y[1]; if(P[i].style&8) // this is "line" { - fprintf(fp,"", int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2])); + mgl_printf(fp, gz, " stroke=\"#%02x%02x%02x\">", int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2])); else - fprintf(fp," fill=\"#%02x%02x%02x\">", int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2])); + mgl_printf(fp, gz, " fill=\"#%02x%02x%02x\">", int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2])); mreal dy = 0.004,f=fabs(P[i].zz[1]); - fprintf(fp,"\n", + mgl_printf(fp, gz, "\n", xx,yy+dy, xx+f,yy+dy, xx+f,yy-dy, xx,yy-dy); } else { ss *= P[i].zz[1]; - fprintf(fp,"", int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2])); + mgl_printf(fp, gz, " stroke=\"#%02x%02x%02x\">", int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2])); else - fprintf(fp," fill=\"#%02x%02x%02x\">", int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2])); - fprintf(fp,"\n", + mgl_printf(fp, gz, " fill=\"#%02x%02x%02x\">", int(255*P[i].c[0]),int(255*P[i].c[1]),int(255*P[i].c[2])); + mgl_printf(fp, gz, "\n", xx/P[i].zz[1], yy/P[i].zz[1], P[i].style&1?'b':'n', P[i].style&2?'i':'n', P[i].m); } @@ -590,8 +619,8 @@ void mglGraphPS::WriteSVG(const char *fname,const char *descr) } for(i=0;i"); - fclose(fp); + mgl_printf(fp, gz, ""); + if(gz) gzclose(fp); else fclose((FILE *)fp); } //----------------------------------------------------------------------------- void mglGraphPS::Finish() @@ -627,7 +656,8 @@ void mglGraphPS::draw_prim(mglPrim *pr, mreal *pp, mreal *c) switch(pr->type) { case 0: mglGraphAB::mark_plot(pp,pr->m); break; - case 1: mglGraphAB::line_plot(pp,pp+3,c,c); break; + case 1: PDef = pr->style; pPos = pr->s; + mglGraphAB::line_plot(pp,pp+3,c,c); break; case 2: mglGraphAB::trig_plot(pp,pp+3,pp+6,c,c,c); break; case 3: mglGraphAB::quad_plot(pp,pp+3,pp+6,pp+9,c,c,c,c); break; case 4: @@ -647,7 +677,7 @@ void mglGraphPS::pnt_plot(long x,long y, mreal, unsigned char c[4]) combine(G4+4*i0,c); OI[i0]=ObjId; } //----------------------------------------------------------------------------- -void mglGraphPS::put_line(FILE *fp, long i, mreal wp, mreal *cp,int st, const char *ifmt, const char *nfmt, bool neg) +void mglGraphPS::put_line(void *fp, bool gz, long i, mreal wp, mreal *cp,int st, const char *ifmt, const char *nfmt, bool neg) { long k = i,j; // first point mreal x0=P[i].x[0], y0=P[i].y[0]; @@ -670,7 +700,7 @@ void mglGraphPS::put_line(FILE *fp, long i, mreal wp, mreal *cp,int st, const ch } } for(j=i;j10) { m=0; fprintf(fp,"\n"); } + mgl_printf(fp, gz, nfmt,x0,neg?Height-y0:y0); + if(m>10) { m=0; mgl_printf(fp, gz, "\n"); } ok=true; m++; } else if(P[j].x[1]==x0 && P[j].y[1]==y0) { k=j; P[k].type = -1; x0 = P[k].x[0]; y0=P[k].y[0]; - fprintf(fp,nfmt,x0,neg?Height-y0:y0); - if(m>10) { m=0; fprintf(fp,"\n"); } + mgl_printf(fp, gz, nfmt,x0,neg?Height-y0:y0); + if(m>10) { m=0; mgl_printf(fp, gz, "\n"); } ok=true; m++; } } @@ -699,7 +729,7 @@ void mglGraphPS::put_line(FILE *fp, long i, mreal wp, mreal *cp,int st, const ch //----------------------------------------------------------------------------- //put_desc(fp,"%c%c%c_%04x {", "np %d %d mt %d %d ll %d %d ll cp fill\n", //"np %d %d mt ", "%d %d ll ", "cp dr\n", "} def") -void mglGraphPS::put_desc(FILE *fp, const char *pre, const char *ln1, const char *ln2, const char *ln3, const char *suf) +void mglGraphPS::put_desc(void *fp, bool gz, const char *pre, const char *ln1, const char *ln2, const char *ln3, const char *suf) { register long i,j,n; wchar_t *g; @@ -716,7 +746,7 @@ void mglGraphPS::put_desc(FILE *fp, const char *pre, const char *ln1, const char // have to describe g[n]=P[i].m; s[n]=P[i].style&7; n++; // add to list of described // "%c%c%c_%04x {" - fprintf(fp,pre, P[i].style&1?'b':'n', P[i].style&2?'i':'n', P[i].m); + mgl_printf(fp, gz, pre, P[i].style&1?'b':'n', P[i].style&2?'i':'n', P[i].m); long ik,ii; int nl=fnt->GetNl(P[i].style&3,P[i].m); const short *ln=fnt->GetLn(P[i].style&3,P[i].m); @@ -725,12 +755,12 @@ void mglGraphPS::put_desc(FILE *fp, const char *pre, const char *ln1, const char { ii = 2*ik; if(ln[ii]==0x3fff && ln[ii+1]==0x3fff) // line breakthrough - { fprintf(fp,"%s",ln3); np=true; continue; } - else if(np) fprintf(fp,ln1,ln[ii],ln[ii+1]); - else fprintf(fp,ln2,ln[ii],ln[ii+1]); + { mgl_printf(fp, gz, "%s",ln3); np=true; continue; } + else if(np) mgl_printf(fp, gz, ln1,ln[ii],ln[ii+1]); + else mgl_printf(fp, gz, ln2,ln[ii],ln[ii+1]); np=false; } - fprintf(fp,"%s%s",ln3,suf); // finish glyph description suf="} def" + mgl_printf(fp, gz, "%s%s",ln3,suf); // finish glyph description suf="} def" } delete []g; delete []s; } diff --git a/mgl/mgl_eval.cpp b/mgl/mgl_eval.cpp index 7f7ebb3..0170cdb 100644 --- a/mgl/mgl_eval.cpp +++ b/mgl/mgl_eval.cpp @@ -23,6 +23,7 @@ #include #ifndef NO_GSL #include +#include #include #endif #include "mgl/mgl_eval.h" @@ -75,6 +76,7 @@ EQ_LN, // logarithm of x, ln(x) EQ_LG, // decimal logarithm of x, lg(x) = ln(x)/ln(10) EQ_SIGN, // sign of number EQ_STEP, // step function +EQ_INT, // integer part [x] EQ_ABS, // absolute value of x // special functions of 1 argument EQ_LI2, // dilogarithm for a real argument Li2(x) = - \Re \int_0^x ds \log(1-s)/s. @@ -118,63 +120,38 @@ EQ_EN, EQ_CL, // Clausen function }; //----------------------------------------------------------------------------- -#define IM1 2147483563 -#define IM2 2147483399 -#define AM (1.0/IM1) -#define IA1 40014 -#define IA2 40692 -#define IQ1 53668 -#define IQ2 52774 -#define IR1 12211 -#define IR2 3791 -#define NTAB 32 -#define NDIV (1+(IM1-1)/NTAB) -#define RNMX (1.0 - 1.2e-7) #ifndef M_PI #define M_PI 3.14159265358979323846 #endif //----------------------------------------------------------------------------- -static long mgl_idum=0; -void mgl_srnd(long seed) { mgl_idum = -abs(seed); } -//----------------------------------------------------------------------------- +gsl_rng *mgl_rng=0; +void mgl_srnd(long seed) +{ +#ifndef NO_GSL + if(mgl_rng==0) + { + gsl_rng_env_setup(); + mgl_rng = gsl_rng_alloc(gsl_rng_default); + } + gsl_rng_set(mgl_rng, seed); +#else + srand(seed); +#endif +} double mgl_rnd() { - long &idum=mgl_idum; - long j; - long k; - static long idum2=123456789; - static long iy=0; - static long iv[NTAB]; - double temp; - if(mgl_idum==0) - mgl_idum = -(long)(time(NULL)); - if (mgl_idum <= 0) { // Initialize. - if (-(idum) < 1) idum=1; // Be sure to prevent idum = 0. - else idum = -(idum); - idum2=(idum); - for (j=NTAB+7;j>=0;j--) { // Load the shuffle table (after 8 warm-ups). - k=(idum)/IQ1; - idum=IA1*(idum-k*IQ1)-k*IR1; - if (idum < 0) idum += IM1; - if (j < NTAB) iv[j] = idum; - } - iy=iv[0]; +#ifndef NO_GSL + if(mgl_rng==0) + { + gsl_rng_env_setup(); + mgl_rng = gsl_rng_alloc(gsl_rng_default); + gsl_rng_set(mgl_rng, time(0)); } - k=(idum)/IQ1; // Start here when not initializing. - idum=IA1*(idum-k*IQ1)-k*IR1; // Compute idum=(IA1*idum) % IM1 without - // over ows by Schrage's method. - if (idum < 0) idum += IM1; - k=idum2/IQ2; - idum2=IA2*(idum2-k*IQ2)-k*IR2; // Compute idum2=(IA2*idum) % IM2 likewise. - if (idum2 < 0) idum2 += IM2; - j=iy/NDIV; // Will be in the range 0..NTAB-1. - iy=iv[j]-idum2; // Here idum is shufted, idum and idum2 are - // combined to generate output. - iv[j] = idum; - if (iy < 1) iy += IM1-1; - if ((temp=AM*iy) > RNMX) // Because users don't expect endpoint values. - return RNMX; - else return temp; + return gsl_rng_uniform(mgl_rng); +// gsl_rng_free(r); +#else + return rand()/(RND_MAX-1.); +#endif } //----------------------------------------------------------------------------- double mgl_ipow(double x,int n); @@ -405,6 +382,7 @@ mglFormula::mglFormula(const char *string) else if(!strcmp(name,"pow")) Kod=EQ_POW; else if(!strcmp(name,"mod")) Kod=EQ_MOD; else if(!strcmp(name,"i")) Kod=EQ_BESI; + else if(!strcmp(name,"int")) Kod=EQ_INT; else if(!strcmp(name,"j")) Kod=EQ_BESJ; else if(!strcmp(name,"k")) Kod=EQ_BESK; else if(!strcmp(name,"y")) Kod=EQ_BESY; @@ -518,8 +496,8 @@ mreal mglFormula::CalcIn(const mreal *a1) const ,mgz2,mgz2,mgz2,mgz2,mgz2,mgz2,mgz2,mgz2 #endif }; - func_1 f1[41] = {sin,cos,tan,asin,acos,atan,sinh,cosh,tanh, - asinh,acosh,atanh,sqrt,exp,log,log10,sgn,stp,fabs + func_1 f1[42] = {sin,cos,tan,asin,acos,atan,sinh,cosh,tanh, + asinh,acosh,atanh,sqrt,exp,log,log10,sgn,stp,floor,fabs #ifndef NO_GSL ,gsl_sf_dilog,gslEllEc,gslEllFc,gslAi,gslBi,gsl_sf_erf, gsl_sf_expint_3,gsl_sf_expint_Ei,gsl_sf_expint_E1,gsl_sf_expint_E2, @@ -644,8 +622,8 @@ mreal mglFormula::CalcDIn(int id, const mreal *a1) const ,mgz2,mgz2,mgz2,mgz2,mgz2,mgz2,mgz2,mgz2 #endif }; - func_1 f11[41] = {cos,cos_d,tan_d,asin_d,acos_d,atan_d,cosh,sinh,tanh_d, - asinh_d,acosh_d,atanh_d,sqrt_d,exp,log_d,log10_d,mgz1,mgz1,sgn + func_1 f11[42] = {cos,cos_d,tan_d,asin_d,acos_d,atan_d,cosh,sinh,tanh_d, + asinh_d,acosh_d,atanh_d,sqrt_d,exp,log_d,log10_d,mgz1,mgz1,mgz1,sgn #ifndef NO_GSL ,dilog_d,gslE_d,gslK_d,gslAi_d,gslBi_d,erf_d,exp3_d,ei_d,e1_d,e2_d, si_d,ci_d,gamma_d,gsl_sf_psi_1,mgz1,mgz1,sinc_d,mgz1,mgz1,mgz1,mgz1,mgz1 diff --git a/mgl/mgl_evalp.cpp b/mgl/mgl_evalp.cpp index b045fa6..0aa536b 100644 --- a/mgl/mgl_evalp.cpp +++ b/mgl/mgl_evalp.cpp @@ -126,6 +126,48 @@ mglData mglFormulaCalc(const wchar_t *string, mglParse *arg) wcscpy(str,Buf); } len=wcslen(str); + if(str[0]=='[') // this is manual subdata + { + mglData a1; + long i, j, br=0,k; + bool ar=true,mt=false; + for(i=1,j=1;i0) br--; + if(str[i]==',' && !br) + { + wcscpy(Buf,str+j); Buf[i-j]=0; + a1=mglFormulaCalc(Buf, arg); + if(j==1) + { res = a1; ar = (a1.nx==1); mt = (a1.nx>1 && a1.ny==1); } + else + { + if(ar) // res 1d array + { k = res.nx; res.InsertColumns(k); res.Put(a1,k); } + else if(mt) // res 2d array + { k = res.ny; res.InsertRows(k); res.Put(a1,-1,k); } + else // res 3d array + { k = res.nz; res.InsertSlices(k); res.Put(a1,-1,-1,k); } + } + j=i+1; + } + } + wcscpy(Buf,str+j); Buf[i-j]=0; + a1=mglFormulaCalc(Buf, arg); + if(j==1) + { res = a1; ar = (a1.nx==1); mt = (a1.nx>1 && a1.ny==1); } + else + { + if(ar) // res 1d array + { k = res.nx; res.InsertColumns(k); res.Put(a1,k); } + else if(mt) // res 2d array + { k = res.ny; res.InsertRows(k); res.Put(a1,-1,k); } + else // res 3d array + { k = res.nz; res.InsertSlices(k); res.Put(a1,-1,-1,k); } + } + return res; + } n=mglFindInText(str,"&|"); // lowest priority -- logical if(n>=0) @@ -514,6 +556,9 @@ mglData mglFormulaCalc(const wchar_t *string, mglParse *arg) else { Buf[n]=0; res = mglApplyOper(Buf,Buf+n+1,arg, fmod); } } + else if(!wcscmp(name+1,L"int")) + { res=mglFormulaCalc(Buf, arg); + for(i=0;iArea(*(a[0].d),k[1]==2?a[1].s:0,false,k[2]==3 ? a[2].v : NAN); - else if(k[2]!=1) gr->Area(*(a[0].d),*(a[1].d),k[2]==2?a[2].s:0,false,k[3]==3 ? a[3].v : NAN); + else if(k[1]!=1) gr->Area(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3 ? a[2].v : NAN); + else if(k[2]!=1) gr->Area(*(a[0].d),*(a[1].d),k[2]==2?a[2].s:0,k[3]==3 ? a[3].v : NAN); else gr->Area(*(a[0].d),*(a[1].d),*(a[2].d),k[3]==2?a[3].s:0); return 0; } @@ -91,9 +91,9 @@ void mglc_area(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]!=1) return; else if(k[1]!=1) - mglprintf(out,1024,L"gr->Area(%s, \"%s\", false, %g);",a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN); + mglprintf(out,1024,L"gr->Area(%s, \"%s\", %g);",a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN); else if(k[2]!=1) - mglprintf(out,1024,L"gr->Area(%s, %s, \"%s\", false, %g);", a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:NAN); + mglprintf(out,1024,L"gr->Area(%s, %s, \"%s\", %g);", a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:NAN); else mglprintf(out,1024,L"gr->Area(%s, %s, %s, \"%s\");", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:""); } //----------------------------------------------------------------------------- @@ -112,9 +112,9 @@ void mglc_aspect(wchar_t out[1024], long , mglArg *a, int k[10]) int mgls_axial(mglGraph *gr, long , mglArg *a, int k[10]) { if(k[0]!=1) return 1; - else if(k[1]!=1) gr->Axial(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3 ? int(a[2].v) : 3); + else if(k[1]!=1) gr->Axial(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3 ? iint(a[2].v) : 3); else if(k[1]==1 && k[2]==1) - gr->Axial(*(a[0].d),*(a[1].d),*(a[2].d),k[3]==2?a[3].s:0,k[4]==3 ? int(a[4].v) : 3); + gr->Axial(*(a[0].d),*(a[1].d),*(a[2].d),k[3]==2?a[3].s:0,k[4]==3 ? iint(a[4].v) : 3); else return 1; return 0; } @@ -122,9 +122,9 @@ void mglc_axial(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]!=1) return; else if(k[1]!=1) - mglprintf(out,1024,L"gr->Axial(%s, \"%s\", %d);", a[0].s,k[1]==2?a[1].s:"",k[2]==3 ? int(a[2].v) : 3); + mglprintf(out,1024,L"gr->Axial(%s, \"%s\", %d);", a[0].s,k[1]==2?a[1].s:"",k[2]==3 ? iint(a[2].v) : 3); else if(k[1]==1 && k[2]==1) - mglprintf(out,1024,L"gr->Axial(%s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?int(a[4].v):3); + mglprintf(out,1024,L"gr->Axial(%s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?iint(a[4].v):3); } //----------------------------------------------------------------------------- int mgls_axialdir(mglGraph *gr, long , mglArg *a, int k[10]) @@ -154,7 +154,7 @@ int mgls_axis(mglGraph *gr, long n, mglArg *a, int k[10]) else return 1; } else if(k[0]==2) gr->Axis(a[0].s, k[1]==3 && a[1].v!=0); - else if(k[0]==3) gr->SetCoor(int(a[0].v)); + else if(k[0]==3) gr->SetCoor(iint(a[0].v)); else if(k[0]==0) gr->Axis("xyz"); else return 1; return 0; @@ -177,7 +177,7 @@ void mglc_axis(wchar_t out[1024], long n, mglArg *a, int k[10]) if(ok) mglprintf(out,1024,L"gr->Axis(mglPoint(%g, %g), mglPoint(%g, %g));", a[0].v,a[1].v,a[2].v,a[3].v); } else if(k[0]==2) mglprintf(out,1024,L"gr->Axis(\"%s\");", a[0].s); - else if(k[0]==3) mglprintf(out,1024,L"gr->SetCoor(\"%d\");", int(a[0].v)); + else if(k[0]==3) mglprintf(out,1024,L"gr->SetCoor(\"%d\");", iint(a[0].v)); else if(k[0]==0) mglprintf(out,1024,L"gr->Axis(\"xyz\");"); } //----------------------------------------------------------------------------- @@ -209,38 +209,38 @@ void mglc_box(wchar_t out[1024], long , mglArg *a, int k[10]) int mgls_bars(mglGraph *gr, long , mglArg *a, int k[10]) { if(k[0]!=1) return 1; - else if(k[1]!=1) gr->Bars(*(a[0].d), k[1]==2?a[1].s:0, k[2]==3?a[2].v:NAN, k[3]==3?(a[3].v!=0):false); - else if(k[2]!=1) gr->Bars(*(a[0].d), *(a[1].d), k[2]==2?a[2].s:0, k[3]==3?a[3].v:NAN, k[4]==3?(a[4].v!=0):false); - else gr->Bars(*(a[0].d), *(a[1].d), *(a[2].d), k[3]==2?a[3].s:0, k[4]==3?(a[4].v!=0):false); + else if(k[1]!=1) gr->Bars(*(a[0].d), k[1]==2?a[1].s:0, k[2]==3?a[2].v:NAN); + else if(k[2]!=1) gr->Bars(*(a[0].d), *(a[1].d), k[2]==2?a[2].s:0, k[3]==3?a[3].v:NAN); + else gr->Bars(*(a[0].d), *(a[1].d), *(a[2].d), k[3]==2?a[3].s:0); return 0; } void mglc_bars(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]!=1) return; else if(k[1]!=1) - mglprintf(out,1024,L"gr->Bars(%s, \"%s\", %g, %s);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, (k[3]==3&&a[3].v!=0)?"true":"false"); + mglprintf(out,1024,L"gr->Bars(%s, \"%s\", %g);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN); else if(k[2]!=1) - mglprintf(out,1024,L"gr->Bars(%s, %s, \"%s\", %g, %s);",a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:NAN, (k[4]==3&&a[4].v!=0)?"true":"false"); + mglprintf(out,1024,L"gr->Bars(%s, %s, \"%s\", %g);",a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:NAN); else - mglprintf(out,1024,L"gr->Bars(%s, %s, %s, \"%s\", %s);",a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", (k[4]==3&&a[4].v!=0)?"true":"false"); + mglprintf(out,1024,L"gr->Bars(%s, %s, %s, \"%s\");",a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:""); } //----------------------------------------------------------------------------- int mgls_barh(mglGraph *gr, long , mglArg *a, int k[10]) { if(k[0]!=1) return 1; else if(k[1]!=1) - gr->Barh(*(a[0].d), k[1]==2?a[1].s:0, k[2]==3?a[2].v:NAN, k[3]==3?(a[3].v!=0):false); + gr->Barh(*(a[0].d), k[1]==2?a[1].s:0, k[2]==3?a[2].v:NAN); else - gr->Barh(*(a[0].d), *(a[1].d), k[2]==2?a[2].s:0, k[3]==3?a[3].v:NAN, k[4]==3?(a[4].v!=0):false); + gr->Barh(*(a[0].d), *(a[1].d), k[2]==2?a[2].s:0, k[3]==3?a[3].v:NAN); return 0; } void mglc_barh(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]!=1) return; else if(k[1]!=1) - mglprintf(out,1024,L"gr->Barh(%s, \"%s\", %g, %s);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, (k[3]==3&&a[3].v!=0)?"true":"false"); + mglprintf(out,1024,L"gr->Barh(%s, \"%s\", %g);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN); else - mglprintf(out,1024,L"gr->Barh(%s, %s, \"%s\", %g, %s);",a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:NAN, (k[4]==3&&a[4].v!=0)?"true":"false"); + mglprintf(out,1024,L"gr->Barh(%s, %s, \"%s\", %g);",a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:NAN); } //----------------------------------------------------------------------------- int mgls_belt(mglGraph *gr, long , mglArg *a, int k[10]) @@ -281,14 +281,14 @@ int mgls_beam(mglGraph *gr, long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==3) gr->Beam(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),a[4].v, - k[5]==2? a[5].s:0,k[6]==3?int(a[6].v):0, int(k[7]==3?a[7].v:3)); + k[5]==2? a[5].s:0,k[6]==3?iint(a[6].v):0, iint(k[7]==3?a[7].v:3)); else return 1; return 0; } void mglc_beam(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==3) - mglprintf(out,1024,L"gr->Beam(%s, %s, %s, %s, %g, \"%s\", %d, %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].v, k[5]==2? a[5].s:"",k[6]==3?int(a[6].v):0, int(k[7]==3?a[7].v:3)); + mglprintf(out,1024,L"gr->Beam(%s, %s, %s, %s, %g, \"%s\", %d, %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].v, k[5]==2? a[5].s:"",k[6]==3?iint(a[6].v):0, iint(k[7]==3?a[7].v:3)); } //----------------------------------------------------------------------------- int mgls_caxis(mglGraph *gr, long , mglArg *a, int k[10]) @@ -358,14 +358,14 @@ void mglc_crange(wchar_t out[1024], long , mglArg *a, int k[10]) int mgls_crop(mglGraph *, long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==3 && k[2]==3 && k[3]==2) - a[0].d->Crop(int(a[1].v),int(a[2].v),a[3].s[0]); + a[0].d->Crop(iint(a[1].v),iint(a[2].v),a[3].s[0]); else return 1; return 0; } void mglc_crop(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==3 && k[2]==3 && k[3]==2) - mglprintf(out,1024,L"%s.Crop(%d, %d, '%c');",a[0].s, int(a[1].v), int(a[2].v), a[3].s[0]); + mglprintf(out,1024,L"%s.Crop(%d, %d, '%c');",a[0].s, iint(a[1].v), iint(a[2].v), a[3].s[0]); } //----------------------------------------------------------------------------- int mgls_cumsum(mglGraph *, long , mglArg *a, int k[10]) @@ -446,19 +446,19 @@ void mglc_crust(wchar_t out[1024], long , mglArg *a, int k[10]) int mgls_colorbar(mglGraph *gr, long , mglArg *a, int k[10]) { if(k[0]==2 && k[1]==3 && k[2]==3 && k[3]==3 && k[4]==3 && k[5]==3) - gr->Colorbar(a[0].s, int(a[1].v), a[2].v, a[3].v, a[4].v, a[5].v); - else if(k[0]==1) gr->Colorbar(*(a[0].d), k[1]==2 ? a[1].s:0, k[2]==3 ? int(a[2].v):0); - else gr->Colorbar(k[0]==2 ? a[0].s:0, k[1]==3 ? int(a[1].v):0); + gr->Colorbar(a[0].s, iint(a[1].v), a[2].v, a[3].v, a[4].v, a[5].v); + else if(k[0]==1) gr->Colorbar(*(a[0].d), k[1]==2 ? a[1].s:0, k[2]==3 ? iint(a[2].v):0); + else gr->Colorbar(k[0]==2 ? a[0].s:0, k[1]==3 ? iint(a[1].v):0); return 0; } void mglc_colorbar(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==2 && k[1]==3 && k[2]==3 && k[3]==3 && k[4]==3 && k[5]==3) - mglprintf(out,1024,L"gr->Colorbar(\"%s\", %d, %g, %g, %g, %g);",a[0].s, int(a[1].v), a[2].v, a[3].v, a[4].v, a[5].v); + mglprintf(out,1024,L"gr->Colorbar(\"%s\", %d, %g, %g, %g, %g);",a[0].s, iint(a[1].v), a[2].v, a[3].v, a[4].v, a[5].v); else if(k[0]==1) - mglprintf(out,1024,L"gr->Colorbar(%s, \"%s\", %d);",a[0].s, k[1]==2 ? a[1].s:"", k[2]==3 ? int(a[2].v):0); + mglprintf(out,1024,L"gr->Colorbar(%s, \"%s\", %d);",a[0].s, k[1]==2 ? a[1].s:"", k[2]==3 ? iint(a[2].v):0); else - mglprintf(out,1024,L"gr->Colorbar(\"%s\", %d);",k[0]==2 ? a[0].s:"", k[1]==3 ? int(a[1].v):0); + mglprintf(out,1024,L"gr->Colorbar(\"%s\", %d);",k[0]==2 ? a[0].s:"", k[1]==3 ? iint(a[1].v):0); } //----------------------------------------------------------------------------- int mgls_copy(mglGraph *gr, long , mglArg *a, int k[10]) @@ -493,12 +493,12 @@ void mglc_copy(wchar_t out[1024], long , mglArg *a, int k[10]) int mgls_cont(mglGraph *gr, long , mglArg *a, int k[10]) { if(k[0]!=1) return 1; - else if(k[1]!=1) gr->Cont(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?int(a[2].v):7,k[3]==3?a[3].v:NAN); + else if(k[1]!=1) gr->Cont(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?iint(a[2].v):7,k[3]==3?a[3].v:NAN); else if(k[1]==1 && k[2]!=1) gr->Cont(*(a[0].d), *(a[1].d), k[2]==2?a[2].s:0,k[3]==3?a[3].v:NAN); else if(k[1]==1 && k[2]==1 && k[3]!=1) gr->Cont(*(a[0].d), *(a[1].d), *(a[2].d), k[3]==2?a[3].s:0, - k[4]==3?int(a[4].v):7, k[5]==3?a[5].v:NAN); + k[4]==3?iint(a[4].v):7, k[5]==3?a[5].v:NAN); else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]!=1) gr->Cont(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), k[4]==2?a[4].s:0, k[5]==3?a[5].v:NAN); @@ -509,11 +509,11 @@ void mglc_cont(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]!=1) return; else if(k[1]!=1) - mglprintf(out,1024,L"gr->Cont(%s, \"%s\", %d, %g);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?int(a[2].v):7, k[3]==3?a[3].v:NAN); + mglprintf(out,1024,L"gr->Cont(%s, \"%s\", %d, %g);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?iint(a[2].v):7, k[3]==3?a[3].v:NAN); else if(k[1]==1 && k[2]!=1) mglprintf(out,1024,L"gr->Cont(%s, %s, \"%s\", %g);", a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:NAN); else if(k[1]==1 && k[2]==1 && k[3]!=1) - mglprintf(out,1024,L"gr->Cont(%s, %s, %s, \"%s\", %d, %g);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?int(a[4].v):7, k[5]==3?a[5].v:NAN); + mglprintf(out,1024,L"gr->Cont(%s, %s, %s, \"%s\", %d, %g);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?iint(a[4].v):7, k[5]==3?a[5].v:NAN); else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]!=1) mglprintf(out,1024,L"gr->Cont(%s, %s, %s, %s, \"%s\", %g);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?a[5].v:NAN); } @@ -522,12 +522,12 @@ int mgls_contf(mglGraph *gr, long , mglArg *a, int k[10]) { if(k[0]!=1) return 1; else if(k[1]!=1) - gr->ContF(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?int(a[2].v):7,k[3]==3?a[3].v:NAN); + gr->ContF(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?iint(a[2].v):7,k[3]==3?a[3].v:NAN); else if(k[1]==1 && k[2]!=1) gr->ContF(*(a[0].d), *(a[1].d), k[2]==2?a[2].s:0,k[3]==3?a[3].v:NAN); else if(k[1]==1 && k[2]==1 && k[3]!=1) gr->ContF(*(a[0].d), *(a[1].d), *(a[2].d), k[3]==2?a[3].s:0, - k[4]==3?int(a[4].v):7, k[5]==3?a[5].v:NAN); + k[4]==3?iint(a[4].v):7, k[5]==3?a[5].v:NAN); else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]!=1) gr->ContF(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), k[4]==2?a[4].s:0, k[5]==3?a[5].v:NAN); @@ -538,11 +538,11 @@ void mglc_contf(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]!=1) return; else if(k[1]!=1) - mglprintf(out,1024,L"gr->ContF(%s, \"%s\", %d, %g);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?int(a[2].v):7, k[3]==3?a[3].v:NAN); + mglprintf(out,1024,L"gr->ContF(%s, \"%s\", %d, %g);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?iint(a[2].v):7, k[3]==3?a[3].v:NAN); else if(k[1]==1 && k[2]!=1) mglprintf(out,1024,L"gr->ContF(%s, %s, \"%s\", %g);", a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:NAN); else if(k[1]==1 && k[2]==1 && k[3]!=1) - mglprintf(out,1024,L"gr->ContF(%s, %s, %s, \"%s\", %d, %g);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?int(a[4].v):7, k[5]==3?a[5].v:NAN); + mglprintf(out,1024,L"gr->ContF(%s, %s, %s, \"%s\", %d, %g);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?iint(a[4].v):7, k[5]==3?a[5].v:NAN); else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]!=1) mglprintf(out,1024,L"gr->ContF(%s, %s, %s, %s, \"%s\", %g);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?a[5].v:NAN); } @@ -551,12 +551,12 @@ int mgls_contd(mglGraph *gr, long , mglArg *a, int k[10]) { if(k[0]!=1) return 1; else if(k[1]!=1) - gr->ContD(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?int(a[2].v):7,k[3]==3?a[3].v:NAN); + gr->ContD(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?iint(a[2].v):7,k[3]==3?a[3].v:NAN); else if(k[1]==1 && k[2]!=1) gr->ContD(*(a[0].d), *(a[1].d), k[2]==2?a[2].s:0,k[3]==3?a[3].v:NAN); else if(k[1]==1 && k[2]==1 && k[3]!=1) gr->ContD(*(a[0].d), *(a[1].d), *(a[2].d), k[3]==2?a[3].s:0, - k[4]==3?int(a[4].v):7, k[5]==3?a[5].v:NAN); + k[4]==3?iint(a[4].v):7, k[5]==3?a[5].v:NAN); else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]!=1) gr->ContD(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), k[4]==2?a[4].s:0, k[5]==3?a[5].v:NAN); @@ -567,11 +567,11 @@ void mglc_contd(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]!=1) return; else if(k[1]!=1) - mglprintf(out,1024,L"gr->ContD(%s, \"%s\", %d, %g);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?int(a[2].v):7, k[3]==3?a[3].v:NAN); + mglprintf(out,1024,L"gr->ContD(%s, \"%s\", %d, %g);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?iint(a[2].v):7, k[3]==3?a[3].v:NAN); else if(k[1]==1 && k[2]!=1) mglprintf(out,1024,L"gr->ContD(%s, %s, \"%s\", %g);", a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:NAN); else if(k[1]==1 && k[2]==1 && k[3]!=1) - mglprintf(out,1024,L"gr->ContD(%s, %s, %s, \"%s\", %d, %g);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?int(a[4].v):7, k[5]==3?a[5].v:NAN); + mglprintf(out,1024,L"gr->ContD(%s, %s, %s, \"%s\", %d, %g);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?iint(a[4].v):7, k[5]==3?a[5].v:NAN); else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]!=1) mglprintf(out,1024,L"gr->ContD(%s, %s, %s, %s, \"%s\", %g);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?a[5].v:NAN); } @@ -580,13 +580,13 @@ int mgls_cont3(mglGraph *gr, long , mglArg *a, int k[10]) { if(k[0]!=1) return 1; else if(k[1]==2) - gr->Cont3(*(a[0].d), a[1].s[0], k[2]==3?int(a[2].v):-1, k[3]==2?a[3].s:0, k[4]==3?int(a[4].v):7); + gr->Cont3(*(a[0].d), a[1].s[0], k[2]==3?iint(a[2].v):-1, k[3]==2?a[3].s:0, k[4]==3?iint(a[4].v):7); else if(k[1]==1 && k[2]==2) - gr->Cont3(*(a[0].d), *(a[1].d), a[2].s[0], k[3]==3?int(a[3].v):-1, k[4]==2?a[4].s:0); + gr->Cont3(*(a[0].d), *(a[1].d), a[2].s[0], k[3]==3?iint(a[3].v):-1, k[4]==2?a[4].s:0); else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==2) - gr->Cont3(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), a[4].s[0], k[5]==3?int(a[5].v):-1, k[6]==2?a[6].s:0, k[7]==3?int(a[7].v):7); + gr->Cont3(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), a[4].s[0], k[5]==3?iint(a[5].v):-1, k[6]==2?a[6].s:0, k[7]==3?iint(a[7].v):7); else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1 && k[5]==2) - gr->Cont3(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), *(a[4].d), a[5].s[0], k[6]==3?int(a[6].v):-1, k[7]==2?a[7].s:0); + gr->Cont3(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), *(a[4].d), a[5].s[0], k[6]==3?iint(a[6].v):-1, k[7]==2?a[7].s:0); else return 1; return 0; } @@ -594,26 +594,26 @@ void mglc_cont3(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]!=1) return; else if(k[1]==2) - mglprintf(out,1024,L"gr->Cont3(%s, '%c', %d, \"%s\", %d);", a[0].s, a[1].s[0], k[2]==3?int(a[2].v):-1, k[3]==2?a[3].s:"", k[4]==3?int(a[4].v):7); + mglprintf(out,1024,L"gr->Cont3(%s, '%c', %d, \"%s\", %d);", a[0].s, a[1].s[0], k[2]==3?iint(a[2].v):-1, k[3]==2?a[3].s:"", k[4]==3?iint(a[4].v):7); else if(k[1]==1 && k[2]==2) - mglprintf(out,1024,L"gr->Cont3(%s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s[0], k[3]==3?int(a[3].v):-1, k[4]==2?a[4].s:""); + mglprintf(out,1024,L"gr->Cont3(%s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s[0], k[3]==3?iint(a[3].v):-1, k[4]==2?a[4].s:""); else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==2) - mglprintf(out,1024,L"gr->Cont3(%s, %s, %s, %s, '%c', %d, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s[0], k[5]==3?int(a[5].v):-1, k[6]==2?a[6].s:0, k[7]==3?int(a[7].v):7); + mglprintf(out,1024,L"gr->Cont3(%s, %s, %s, %s, '%c', %d, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s[0], k[5]==3?iint(a[5].v):-1, k[6]==2?a[6].s:0, k[7]==3?iint(a[7].v):7); else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1 && k[5]==2) - mglprintf(out,1024,L"gr->Cont3(%s, %s, %s, %s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, a[5].s[0], k[6]==3?int(a[6].v):-1, k[7]==2?a[7].s:0); + mglprintf(out,1024,L"gr->Cont3(%s, %s, %s, %s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, a[5].s[0], k[6]==3?iint(a[6].v):-1, k[7]==2?a[7].s:0); } //----------------------------------------------------------------------------- int mgls_contf3(mglGraph *gr, long , mglArg *a, int k[10]) { if(k[0]!=1) return 1; else if(k[1]==2) - gr->ContF3(*(a[0].d), a[1].s[0], k[2]==3?int(a[2].v):-1, k[3]==2?a[3].s:0, k[4]==3?int(a[4].v):7); + gr->ContF3(*(a[0].d), a[1].s[0], k[2]==3?iint(a[2].v):-1, k[3]==2?a[3].s:0, k[4]==3?iint(a[4].v):7); else if(k[1]==1 && k[2]==2) - gr->ContF3(*(a[0].d), *(a[1].d), a[2].s[0], k[3]==3?int(a[3].v):-1, k[4]==2?a[4].s:0); + gr->ContF3(*(a[0].d), *(a[1].d), a[2].s[0], k[3]==3?iint(a[3].v):-1, k[4]==2?a[4].s:0); else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==2) - gr->ContF3(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), a[4].s[0], k[5]==3?int(a[5].v):-1, k[6]==2?a[6].s:0, k[7]==3?int(a[7].v):7); + gr->ContF3(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), a[4].s[0], k[5]==3?iint(a[5].v):-1, k[6]==2?a[6].s:0, k[7]==3?iint(a[7].v):7); else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1 && k[5]==2) - gr->ContF3(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), *(a[4].d), a[5].s[0], k[6]==3?int(a[6].v):-1, k[7]==2?a[7].s:0); + gr->ContF3(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), *(a[4].d), a[5].s[0], k[6]==3?iint(a[6].v):-1, k[7]==2?a[7].s:0); else return 1; return 0; } @@ -621,30 +621,30 @@ void mglc_contf3(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]!=1) return; else if(k[1]==2) - mglprintf(out,1024,L"gr->ContF3(%s, '%c', %d, \"%s\", %d);", a[0].s, a[1].s[0], k[2]==3?int(a[2].v):-1, k[3]==2?a[3].s:"", k[4]==3?int(a[4].v):7); + mglprintf(out,1024,L"gr->ContF3(%s, '%c', %d, \"%s\", %d);", a[0].s, a[1].s[0], k[2]==3?iint(a[2].v):-1, k[3]==2?a[3].s:"", k[4]==3?iint(a[4].v):7); else if(k[1]==1 && k[2]==2) - mglprintf(out,1024,L"gr->ContF3(%s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s[0], k[3]==3?int(a[3].v):-1, k[4]==2?a[4].s:""); + mglprintf(out,1024,L"gr->ContF3(%s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s[0], k[3]==3?iint(a[3].v):-1, k[4]==2?a[4].s:""); else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==2) - mglprintf(out,1024,L"gr->ContF3(%s, %s, %s, %s, '%c', %d, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s[0], k[5]==3?int(a[5].v):-1, k[6]==2?a[6].s:0, k[7]==3?int(a[7].v):7); + mglprintf(out,1024,L"gr->ContF3(%s, %s, %s, %s, '%c', %d, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s[0], k[5]==3?iint(a[5].v):-1, k[6]==2?a[6].s:0, k[7]==3?iint(a[7].v):7); else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1 && k[5]==2) - mglprintf(out,1024,L"gr->ContF3(%s, %s, %s, %s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, a[5].s[0], k[6]==3?int(a[6].v):-1, k[7]==2?a[7].s:0); + mglprintf(out,1024,L"gr->ContF3(%s, %s, %s, %s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, a[5].s[0], k[6]==3?iint(a[6].v):-1, k[7]==2?a[7].s:0); } //----------------------------------------------------------------------------- int mgls_conta(mglGraph *gr, long , mglArg *a, int k[10]) { if(k[0]!=1) return 1; else if(k[1]==1 && k[2]==1 && k[3]==1) - gr->ContA(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), k[4]==2?a[4].s:0, k[5]==3?int(a[5].v):7); - else gr->ContA(*(a[0].d), k[1]==2?a[1].s:0, k[2]==3?int(a[2].v):7); + gr->ContA(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), k[4]==2?a[4].s:0, k[5]==3?iint(a[5].v):7); + else gr->ContA(*(a[0].d), k[1]==2?a[1].s:0, k[2]==3?iint(a[2].v):7); return 0; } void mglc_conta(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]!=1) return; else if(k[1]==1 && k[2]==1 && k[3]==1) - mglprintf(out,1024,L"gr->ContA(%s, %s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?int(a[5].v):7); + mglprintf(out,1024,L"gr->ContA(%s, %s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?iint(a[5].v):7); else - mglprintf(out,1024,L"gr->ContA(%s, \"%s\", %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?int(a[2].v):7); + mglprintf(out,1024,L"gr->ContA(%s, \"%s\", %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?iint(a[2].v):7); } //----------------------------------------------------------------------------- int mgls_contfa(mglGraph *gr, long , mglArg *a, int k[10]) @@ -652,89 +652,89 @@ int mgls_contfa(mglGraph *gr, long , mglArg *a, int k[10]) if(k[0]!=1) return 1; else if(k[1]==1 && k[2]==1 && k[3]==1) gr->ContFA(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),k[4]==2?a[4].s:0, - k[5]==3?int(a[5].v):7); - else gr->ContFA(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?int(a[2].v):7); + k[5]==3?iint(a[5].v):7); + else gr->ContFA(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?iint(a[2].v):7); return 0; } void mglc_contfa(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]!=1) return; else if(k[1]==1 && k[2]==1 && k[3]==1) - mglprintf(out,1024,L"gr->ContFA(%s, %s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?int(a[5].v):7); + mglprintf(out,1024,L"gr->ContFA(%s, %s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?iint(a[5].v):7); else - mglprintf(out,1024,L"gr->ContFA(%s, \"%s\", %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?int(a[2].v):7); + mglprintf(out,1024,L"gr->ContFA(%s, \"%s\", %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?iint(a[2].v):7); } //----------------------------------------------------------------------------- int mgls_contx(mglGraph *gr, long , mglArg *a, int k[10]) { - if(k[0]==1) gr->ContX(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?int(a[3].v):7); + if(k[0]==1) gr->ContX(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?iint(a[3].v):7); else return 1; return 0; } void mglc_contx(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1) - mglprintf(out,1024,L"gr->ContX(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?int(a[3].v):7); + mglprintf(out,1024,L"gr->ContX(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?iint(a[3].v):7); } //----------------------------------------------------------------------------- int mgls_contfx(mglGraph *gr, long , mglArg *a, int k[10]) { - if(k[0]==1) gr->ContFX(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?int(a[3].v):7); + if(k[0]==1) gr->ContFX(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?iint(a[3].v):7); else return 1; return 0; } void mglc_contfx(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1) - mglprintf(out,1024,L"gr->ContFX(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?int(a[3].v):7); + mglprintf(out,1024,L"gr->ContFX(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?iint(a[3].v):7); } //----------------------------------------------------------------------------- int mgls_conty(mglGraph *gr, long , mglArg *a, int k[10]) { - if(k[0]==1) gr->ContY(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?int(a[3].v):7); + if(k[0]==1) gr->ContY(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?iint(a[3].v):7); else return 1; return 0; } void mglc_conty(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1) - mglprintf(out,1024,L"gr->ContY(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?int(a[3].v):7); + mglprintf(out,1024,L"gr->ContY(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?iint(a[3].v):7); } //----------------------------------------------------------------------------- int mgls_contfy(mglGraph *gr, long , mglArg *a, int k[10]) { - if(k[0]==1) gr->ContFY(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?int(a[3].v):7); + if(k[0]==1) gr->ContFY(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?iint(a[3].v):7); else return 1; return 0; } void mglc_contfy(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1) - mglprintf(out,1024,L"gr->ContFY(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?int(a[3].v):7); + mglprintf(out,1024,L"gr->ContFY(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?iint(a[3].v):7); } //----------------------------------------------------------------------------- int mgls_contz(mglGraph *gr, long , mglArg *a, int k[10]) { - if(k[0]==1) gr->ContZ(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?int(a[3].v):7); + if(k[0]==1) gr->ContZ(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?iint(a[3].v):7); else return 1; return 0; } void mglc_contz(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1) - mglprintf(out,1024,L"gr->ContZ(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?int(a[3].v):7); + mglprintf(out,1024,L"gr->ContZ(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?iint(a[3].v):7); } //----------------------------------------------------------------------------- int mgls_contfz(mglGraph *gr, long , mglArg *a, int k[10]) { - if(k[0]==1) gr->ContFZ(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?int(a[3].v):7); + if(k[0]==1) gr->ContFZ(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN,k[3]==3?iint(a[3].v):7); else return 1; return 0; } void mglc_contfz(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1) - mglprintf(out,1024,L"gr->ContFZ(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?int(a[3].v):7); + mglprintf(out,1024,L"gr->ContFZ(%s, \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?iint(a[3].v):7); } //----------------------------------------------------------------------------- int mgls_cone(mglGraph *gr, long , mglArg *a, int [10]) @@ -788,11 +788,11 @@ int mgls_dens3(mglGraph *gr, long , mglArg *a, int k[10]) { if(k[0]!=1) return 1; else if(k[1]==2) - gr->Dens3(*(a[0].d),a[1].s[0],k[2]==3?int(a[2].v):-1, + gr->Dens3(*(a[0].d),a[1].s[0],k[2]==3?iint(a[2].v):-1, k[3]==2?a[3].s:0); else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==2) gr->Dens3(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),a[4].s[0], - k[5]==3?int(a[5].v):-1, k[6]==2?a[6].s:0); + k[5]==3?iint(a[5].v):-1, k[6]==2?a[6].s:0); else return 1; return 0; } @@ -800,9 +800,9 @@ void mglc_dens3(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]!=1) return; else if(k[1]==2) - mglprintf(out,1024,L"gr->Dens3(%s, '%c', %d, \"%s\");", a[0].s, a[1].s[0], k[2]==3?int(a[2].v):-1, k[3]==2?a[3].s:""); + mglprintf(out,1024,L"gr->Dens3(%s, '%c', %d, \"%s\");", a[0].s, a[1].s[0], k[2]==3?iint(a[2].v):-1, k[3]==2?a[3].s:""); else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==2) - mglprintf(out,1024,L"gr->Dens3(%s, %s, %s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s[0], k[5]==3?int(a[5].v):-1, k[6]==2?a[6].s:0); + mglprintf(out,1024,L"gr->Dens3(%s, %s, %s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s[0], k[5]==3?iint(a[5].v):-1, k[6]==2?a[6].s:0); } //----------------------------------------------------------------------------- int mgls_densa(mglGraph *gr, long , mglArg *a, int k[10]) @@ -1072,16 +1072,16 @@ int mgls_flow(mglGraph *gr, long , mglArg *a, int k[10]) int i; for(i=0;i<7;i++) if(k[i]!=1) break; if(i==2) - gr->Flow(*(a[0].d),*(a[1].d),k[2]==2?a[2].s:0,k[3]==3?int(a[3].v):5, + gr->Flow(*(a[0].d),*(a[1].d),k[2]==2?a[2].s:0,k[3]==3?iint(a[3].v):5, true,k[4]==3?a[4].v:NAN); else if(i==4) gr->Flow(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),k[4]==2?a[4].s:0, - k[5]==3?int(a[5].v):5,true,k[6]==3?a[6].v:NAN); + k[5]==3?iint(a[5].v):5,true,k[6]==3?a[6].v:NAN); else if(i==3) - gr->Flow(*(a[0].d),*(a[1].d),*(a[2].d),k[3]==2?a[3].s:0,k[4]==3?int(a[4].v):3); + gr->Flow(*(a[0].d),*(a[1].d),*(a[2].d),k[3]==2?a[3].s:0,k[4]==3?iint(a[4].v):3); else if(i==6) gr->Flow(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d),*(a[5].d), - k[6]==2?a[6].s:0,k[7]==3?int(a[7].v):3); + k[6]==2?a[6].s:0,k[7]==3?iint(a[7].v):3); else if(k[0]==3 && k[1]==3 && k[2]==1 && k[3]==1 && k[4]==1 && k[5]==1) gr->FlowP(mglPoint(a[0].v,a[1].v,k[7]==3?a[7].v:NAN), *(a[2].d),*(a[3].d),*(a[4].d),*(a[5].d),k[6]==2?a[6].s:0); @@ -1102,13 +1102,13 @@ void mglc_flow(wchar_t out[1024], long , mglArg *a, int k[10]) int i; for(i=0;i<7;i++) if(k[i]!=1) break; if(i==2) - mglprintf(out,1024,L"gr->Flow(%s, %s, \"%s\", %d, true, %g);", a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?int(a[3].v):5, k[4]==3?a[4].v:NAN); + mglprintf(out,1024,L"gr->Flow(%s, %s, \"%s\", %d, true, %g);", a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?iint(a[3].v):5, k[4]==3?a[4].v:NAN); else if(i==4) - mglprintf(out,1024,L"gr->Flow(%s, %s, %s, %s, \"%s\", %d, true, %g);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?int(a[5].v):5, k[6]==3?a[6].v:NAN); + mglprintf(out,1024,L"gr->Flow(%s, %s, %s, %s, \"%s\", %d, true, %g);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?iint(a[5].v):5, k[6]==3?a[6].v:NAN); else if(i==3) - mglprintf(out,1024,L"gr->Flow(%s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:0, k[4]==3?int(a[4].v):3); + mglprintf(out,1024,L"gr->Flow(%s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:0, k[4]==3?iint(a[4].v):3); else if(i==6) - mglprintf(out,1024,L"gr->Flow(%s, %s, %s, %s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, a[5].s, k[6]==2?a[6].s:0, k[7]==3?int(a[7].v):3); + mglprintf(out,1024,L"gr->Flow(%s, %s, %s, %s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, a[5].s, k[6]==2?a[6].s:0, k[7]==3?iint(a[7].v):3); else if(k[0]==3 && k[1]==3 && k[2]==1 && k[3]==1 && k[4]==1 && k[5]==1) mglprintf(out,1024,L"gr->FlowP(mglPoint(%g,%g,%g), %s, %s, %s, %s, \"%s\");", a[0].v,a[1].v,k[7]==3?a[7].v:NAN,a[2].s,a[3].s,a[4].s,a[5].s,k[6]==2?a[6].s:""); @@ -1123,6 +1123,32 @@ void mglc_flow(wchar_t out[1024], long , mglArg *a, int k[10]) a[0].v,a[1].v,a[2].v,a[3].s,a[4].s,a[5].s,k[6]==2?a[6].s:""); } //----------------------------------------------------------------------------- +int mgls_grad(mglGraph *gr, long , mglArg *a, int k[10]) +{ + int i; + for(i=0;i<7;i++) if(k[i]!=1) break; + if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1) + gr->Grad(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d), k[4]==2?a[4].s:0, k[5]==3?iint(a[5].v):5); + else if(k[0]==1 && k[1]==1 && k[2]==1) + gr->Grad(*(a[0].d),*(a[1].d),*(a[2].d), k[3]==2?a[3].s:0, k[4]==3?iint(a[4].v):5, k[5]==3?a[5].v:NAN); + else if(k[0]==1) + gr->Grad(*(a[0].d), k[1]==2?a[1].s:0, k[2]==3?iint(a[2].v):5, k[3]==3?a[3].v:NAN); + else return 1; + return 0; +} +void mglc_grad(wchar_t out[1024], long , mglArg *a, int k[10]) +{ + if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1) + mglprintf(out,1024,L"gr->Grad(%s, %s, %s, %s, \"%s\", %d, %g);", + a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?iint(a[5].v):5); + else if(k[0]==1 && k[1]==1 && k[2]==1) + mglprintf(out,1024,L"gr->Grad(%s, %s, %s, \"%s\", %d, %g);", + a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?iint(a[4].v):5, k[5]==3?a[5].v:NAN); + else if(k[0]==1) + mglprintf(out,1024,L"gr->Grad(%s, \"%s\", %d, %g);", + a[0].s, k[1]==2?a[1].s:"", k[2]==3?iint(a[2].v):5, k[3]==3?a[3].v:NAN); +} +//----------------------------------------------------------------------------- int mgls_fill(mglGraph *gr, long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==2) @@ -1140,6 +1166,18 @@ void mglc_fill(wchar_t out[1024], long , mglArg *a, int k[10]) mglprintf(out,1024,L"%s.Fill(%g, %g, '%c');", a[0].s, a[1].v,a[2].v, k[3]==2?a[3].s[0]:'x'); } //----------------------------------------------------------------------------- +int mgls_fillsample(mglGraph *gr, long , mglArg *a, int k[10]) +{ + if(k[0]==1 && k[1]==3 && k[2]==2) a[0].d->FillSample(iint(a[1].v), a[2].s); + else return 1; + return 0; +} +void mglc_fillsample(wchar_t out[1024], long , mglArg *a, int k[10]) +{ + if(k[0]==1 && k[1]==3 && k[2]==2) + mglprintf(out,1024,L"%s.FillSample(%d, \"%s\");", a[0].s, iint(a[1].v), a[2].s); +} +//----------------------------------------------------------------------------- int mgls_fog(mglGraph *gr, long , mglArg *a, int k[10]) { if(k[0]==3) gr->Fog(a[0].v,k[1]==3?a[1].v:0.25); @@ -1182,31 +1220,39 @@ void mglc_loadfont(wchar_t out[1024], long , mglArg *a, int k[10]) //----------------------------------------------------------------------------- int mgls_grid(mglGraph *gr, long , mglArg *a, int k[10]) { - if(k[0]!=1) gr->Grid(k[0]==2?a[0].s:"xyz", k[1]==2?a[1].s:"B-"); - else if(k[1]!=1) gr->Grid(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN); - else if(k[1]==1 && k[2]==1 && k[3]!=1) + gr->Grid(k[0]==2?a[0].s:"xyzt", k[1]==2?a[1].s:"B-"); + return 0; +} +void mglc_grid(wchar_t out[1024], long , mglArg *a, int k[10]) +{ + mglprintf(out,1024,L"gr->Grid(\"%s\", \"%s\");", k[0]==2?a[0].s:"xyz", k[1]==2?a[1].s:"B-"); +} +//----------------------------------------------------------------------------- +int mgls_grid2(mglGraph *gr, long , mglArg *a, int k[10]) +{ + if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]!=1) gr->Grid(*(a[0].d), *(a[1].d), *(a[2].d), k[3]==2?a[3].s:0, k[4]==3?a[4].v:NAN); + else if(k[0]==1) gr->Grid(*(a[0].d),k[1]==2?a[1].s:0,k[2]==3?a[2].v:NAN); else return 1; return 0; } -void mglc_grid(wchar_t out[1024], long , mglArg *a, int k[10]) +void mglc_grid2(wchar_t out[1024], long , mglArg *a, int k[10]) { - if(k[0]!=1) mglprintf(out,1024,L"gr->Grid(\"%s\", \"%s\");", k[0]==2?a[0].s:"xyz", k[1]==2?a[1].s:"B-"); - else if(k[1]!=1) - mglprintf(out,1024,L"gr->Grid(%s,\"%s\", %g);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN); - else if(k[1]==1 && k[2]==1 && k[3]!=1) + if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]!=1) mglprintf(out,1024,L"gr->Grid(%s, %s, %s, \"%s\", %g);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?a[4].v:NAN); + else if(k[0]==1) + mglprintf(out,1024,L"gr->Grid(%s,\"%s\", %g);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN); } //----------------------------------------------------------------------------- int mgls_grid3(mglGraph *gr, long , mglArg *a, int k[10]) { if(k[0]!=1) return 1; else if(k[1]==2) - gr->Grid3(*(a[0].d),a[1].s[0],k[2]==3?int(a[2].v):-1, + gr->Grid3(*(a[0].d),a[1].s[0],k[2]==3?iint(a[2].v):-1, k[3]==2?a[3].s:0); else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==2) gr->Grid3(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),a[4].s[0], - k[5]==3?int(a[5].v):-1, k[6]==2?a[6].s:0); + k[5]==3?iint(a[5].v):-1, k[6]==2?a[6].s:0); else return 1; return 0; } @@ -1214,9 +1260,9 @@ void mglc_grid3(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]!=1) return; else if(k[1]==2) - mglprintf(out,1024,L"gr->Grid3(%s, '%c', %d, \"%s\");", a[0].s, a[1].s[0], k[2]==3?int(a[2].v):-1, k[3]==2?a[3].s:""); + mglprintf(out,1024,L"gr->Grid3(%s, '%c', %d, \"%s\");", a[0].s, a[1].s[0], k[2]==3?iint(a[2].v):-1, k[3]==2?a[3].s:""); else if(k[1]==1 && k[2]==1 && k[3]==1 && k[4]==2) - mglprintf(out,1024,L"gr->Grid3(%s, %s, %s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s[0], k[5]==3?int(a[5].v):-1, k[6]==2?a[6].s:0); + mglprintf(out,1024,L"gr->Grid3(%s, %s, %s, %s, '%c', %d, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s[0], k[5]==3?iint(a[5].v):-1, k[6]==2?a[6].s:0); } //----------------------------------------------------------------------------- int mgls_grida(mglGraph *gr, long , mglArg *a, int k[10]) @@ -1242,9 +1288,9 @@ int mgls_light(mglGraph *gr, long , mglArg *a, int k[10]) else if(k[0]!=3) return 1; else if(k[1]!=3) gr->Light(a[0].v!=0); else if(k[2]==3 && k[3]==3) - gr->Light(int(a[0].v),mglPoint(a[1].v,a[2].v,a[3].v), + gr->Light(iint(a[0].v),mglPoint(a[1].v,a[2].v,a[3].v), k[4]==2?a[4].s[0]:'w',k[5]==3?a[5].v:0.5,true); - else gr->Light(int(a[0].v),a[1].v!=0); + else gr->Light(iint(a[0].v),a[1].v!=0); return 0; } void mglc_light(wchar_t out[1024], long , mglArg *a, int k[10]) @@ -1253,8 +1299,8 @@ void mglc_light(wchar_t out[1024], long , mglArg *a, int k[10]) else if(k[0]!=3) return; else if(k[1]!=3) mglprintf(out,1024,L"gr->Light(%s);", a[0].v!=0 ? "true":"false"); else if(k[2]==3 && k[3]==3) - mglprintf(out,1024,L"gr->Light(%d, mglPoint(%g, %g, %g), '%c', %g, true);", int(a[0].v), a[1].v, a[2].v, a[3].v, k[4]==2?a[4].s[0]:'w', k[5]==3?a[5].v:0.5); - else mglprintf(out,1024,L"gr->Light(%d, %s);", int(a[0].v), a[1].v!=0 ? "true":"false"); + mglprintf(out,1024,L"gr->Light(%d, mglPoint(%g, %g, %g), '%c', %g, true);", iint(a[0].v), a[1].v, a[2].v, a[3].v, k[4]==2?a[4].s[0]:'w', k[5]==3?a[5].v:0.5); + else mglprintf(out,1024,L"gr->Light(%d, %s);", iint(a[0].v), a[1].v!=0 ? "true":"false"); } //----------------------------------------------------------------------------- int mgls_line(mglGraph *gr, long n, mglArg *a, int [10]) @@ -1306,7 +1352,7 @@ int mgls_legend(mglGraph *gr, long , mglArg *a, int k[10]) if(k[0]==3 && k[1]==3) gr->Legend(a[0].v, a[1].v, k[2]==2?a[2].s:"rL", k[3]==3?a[3].v:-1, k[4]==3?a[4].v:0.1); else - gr->Legend(k[0]==3?int(a[0].v):3, k[1]==2?a[1].s:"rL", k[2]==3?a[2].v:-1, k[3]==3?a[3].v:0.1); + gr->Legend(k[0]==3?iint(a[0].v):3, k[1]==2?a[1].s:"rL", k[2]==3?a[2].v:-1, k[3]==3?a[3].v:0.1); return 0; } void mglc_legend(wchar_t out[1024], long , mglArg *a, int k[10]) @@ -1314,7 +1360,7 @@ void mglc_legend(wchar_t out[1024], long , mglArg *a, int k[10]) if(k[0]==3 && k[1]==3) mglprintf(out,1024,L"gr->Legend(%g, %g, \"%s\", %g, %g);", a[0].v, a[1].v, k[2]==2?a[2].s:"rL", k[3]==3?a[3].v:-1, k[4]==3?a[4].v:0.1); else - mglprintf(out,1024,L"gr->Legend(%d, \"%s\", %g, %g);", k[0]==3?int(a[0].v):3, k[1]==2?a[1].s:"rL", k[2]==3?a[2].v:-1, k[4]==3?a[4].v:0.1); + mglprintf(out,1024,L"gr->Legend(%d, \"%s\", %g, %g);", k[0]==3?iint(a[0].v):3, k[1]==2?a[1].s:"rL", k[2]==3?a[2].v:-1, k[4]==3?a[4].v:0.1); } //----------------------------------------------------------------------------- int mgls_linewidth(mglGraph *gr, long , mglArg *a, int k[10]) @@ -1341,13 +1387,24 @@ void mglc_barwidth(wchar_t out[1024], long , mglArg *a, int k[10]) //----------------------------------------------------------------------------- int mgls_legendbox(mglGraph *gr, long , mglArg *a, int k[10]) { - if(k[0]==3) gr->LegendBox = (a[0].v!=0); + if(k[0]==3) gr->SetLegendBox(a[0].v!=0); else return 1; return 0; } void mglc_legendbox(wchar_t out[1024], long , mglArg *a, int k[10]) { - if(k[0]==3) mglprintf(out,1024,L"gr->LegendBox = %s;", (a[0].v!=0)?"true":"false"); + if(k[0]==3) mglprintf(out,1024,L"gr->SetLegendBox(%s);", (a[0].v!=0)?"true":"false"); +} +//----------------------------------------------------------------------------- +int mgls_legendmarks(mglGraph *gr, long , mglArg *a, int k[10]) +{ + if(k[0]==3) gr->SetLegendMarks(iint(a[0].v)); + else return 1; + return 0; +} +void mglc_legendmarks(wchar_t out[1024], long , mglArg *a, int k[10]) +{ + if(k[0]==3) mglprintf(out,1024,L"gr->SetLegendMarks(%d);", iint(a[0].v)); } //----------------------------------------------------------------------------- int mgls_modify(mglGraph *, long , mglArg *a, int k[10]) @@ -1357,7 +1414,7 @@ int mgls_modify(mglGraph *, long , mglArg *a, int k[10]) else if(k[0]==1 && k[1]==2 && k[2]==1) a[0].d->Modify(a[1].s,*(a[2].d)); else if(k[0]==1 && k[1]==2) - a[0].d->Modify(a[1].s, k[2]==3 ? int(a[2].v):0); + a[0].d->Modify(a[1].s, k[2]==3 ? iint(a[2].v):0); else return 1; return 0; } @@ -1368,7 +1425,7 @@ void mglc_modify(wchar_t out[1024], long , mglArg *a, int k[10]) else if(k[0]==1 && k[1]==2 && k[2]==1) mglprintf(out,1024,L"%s.Modify(\"%s\", %s);", a[0].s, a[1].s, a[2].s); else if(k[0]==1 && k[1]==2) - mglprintf(out,1024,L"%s.Modify(\"%s\", %d);", a[0].s, a[1].s, k[2]==3 ? int(a[2].v):0); + mglprintf(out,1024,L"%s.Modify(\"%s\", %d);", a[0].s, a[1].s, k[2]==3 ? iint(a[2].v):0); } //----------------------------------------------------------------------------- int mgls_max(mglGraph *, long , mglArg *a, int k[10]) @@ -1409,13 +1466,13 @@ void mglc_sum(wchar_t out[1024], long , mglArg *a, int k[10]) //----------------------------------------------------------------------------- int mgls_meshnum(mglGraph *gr, long , mglArg *a, int k[10]) { - if(k[0]==3) gr->MeshNum = int(a[0].v); + if(k[0]==3) gr->MeshNum = iint(a[0].v); else return 1; return 0; } void mglc_meshnum(wchar_t out[1024], long , mglArg *a, int k[10]) { - if(k[0]==3) mglprintf(out,1024,L"gr->MeshNum = %d;", int(a[0].v)); + if(k[0]==3) mglprintf(out,1024,L"gr->MeshNum = %d;", iint(a[0].v)); } //----------------------------------------------------------------------------- int mgls_marksize(mglGraph *gr, long , mglArg *a, int k[10]) @@ -1470,8 +1527,8 @@ int mgls_read(mglGraph *gr, long n, mglArg *a, int k[10]) bool rr=true; if(k[0]!=1 || k[1]!=2) return 1; else if(n==2) rr=a[0].d->Read(a[1].s); - else rr=a[0].d->Read(a[1].s, k[2]==3?int(a[2].v):1, - k[3]==3?int(a[3].v):1, k[4]==3?int(a[4].v):1); + else rr=a[0].d->Read(a[1].s, k[2]==3?iint(a[2].v):1, + k[3]==3?iint(a[3].v):1, k[4]==3?iint(a[4].v):1); if(!rr) gr->SetWarn(mglWarnFile); return 0; } @@ -1480,21 +1537,21 @@ void mglc_read(wchar_t out[1024], long n, mglArg *a, int k[10]) if(k[0]!=1 || k[1]!=2) return; else if(n==2) mglprintf(out,1024,L"%s.Read(\"%s\");", a[0].s, a[1].s); else - mglprintf(out,1024,L"%s.Read(\"%s\", %d, %d, %d);", a[0].s, a[1].s, k[2]==3?int(a[2].v):1, k[3]==3?int(a[3].v):1, k[4]==3?int(a[4].v):1); + mglprintf(out,1024,L"%s.Read(\"%s\", %d, %d, %d);", a[0].s, a[1].s, k[2]==3?iint(a[2].v):1, k[3]==3?iint(a[3].v):1, k[4]==3?iint(a[4].v):1); } //----------------------------------------------------------------------------- int mgls_readmat(mglGraph *gr, long , mglArg *a, int k[10]) { bool rr=true; if(k[0]!=1 || k[1]!=2) return 1; - else rr=a[0].d->ReadMat(a[1].s, k[2]==3?int(a[2].v):2); + else rr=a[0].d->ReadMat(a[1].s, k[2]==3?iint(a[2].v):2); if(!rr) gr->SetWarn(mglWarnFile); return 0; } void mglc_readmat(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==2) - mglprintf(out,1024,L"%s.ReadMat(\"%s\", %d);", a[0].s, a[1].s, k[2]==3?int(a[2].v):2); + mglprintf(out,1024,L"%s.ReadMat(\"%s\", %d);", a[0].s, a[1].s, k[2]==3?iint(a[2].v):2); } //----------------------------------------------------------------------------- int mgls_readall(mglGraph *, long , mglArg *a, int k[10]) @@ -1600,15 +1657,15 @@ void mglc_rect(wchar_t out[1024], long n, mglArg *a, int [10]) int mgls_resize(mglGraph *, long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==1) - *(a[0].d) = a[1].d->Resize(k[2]==3?int(a[2].v):1, - k[3]==3?int(a[3].v):1, k[4]==3?int(a[4].v):1); + *(a[0].d) = a[1].d->Resize(k[2]==3?iint(a[2].v):1, + k[3]==3?iint(a[3].v):1, k[4]==3?iint(a[4].v):1); else return 1; return 0; } void mglc_resize(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==1) - mglprintf(out,1024,L"%s = %s.Resize(%d, %d, %d);", a[0].s, a[1].s, k[2]==3?int(a[2].v):1, k[3]==3?int(a[3].v):1, k[4]==3?int(a[4].v):1); + mglprintf(out,1024,L"%s = %s.Resize(%d, %d, %d);", a[0].s, a[1].s, k[2]==3?iint(a[2].v):1, k[3]==3?iint(a[3].v):1, k[4]==3?iint(a[4].v):1); } //----------------------------------------------------------------------------- int mgls_rotate(mglGraph *gr, long , mglArg *a, int k[10]) @@ -1652,14 +1709,14 @@ void mglc_save(wchar_t out[1024], long , mglArg *a, int k[10]) //----------------------------------------------------------------------------- int mgls_smooth(mglGraph *, long , mglArg *a, int k[10]) { - if(k[0]==1) a[0].d->Smooth(k[1]==3?int(a[1].v):2,k[2]==2?a[2].s:"xyz"); + if(k[0]==1) a[0].d->Smooth(k[1]==3?iint(a[1].v):2,k[2]==2?a[2].s:"xyz"); else return 1; return 0; } void mglc_smooth(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1) - mglprintf(out,1024,L"%s.Smooth(%d, \"%s\");", a[0].s, k[1]==3?int(a[1].v):2, k[2]==2?a[2].s:"xyz"); + mglprintf(out,1024,L"%s.Smooth(%d, \"%s\");", a[0].s, k[1]==3?iint(a[1].v):2, k[2]==2?a[2].s:"xyz"); } //----------------------------------------------------------------------------- int mgls_swap(mglGraph *, long , mglArg *a, int k[10]) @@ -1673,13 +1730,13 @@ void mglc_swap(wchar_t out[1024], long , mglArg *a, int k[10]) if(k[0]==1 && k[1]==2) mglprintf(out,1024,L"%s.Swap(\"%s\");", a[0].s, a[1].s); } //----------------------------------------------------------------------------- -int mgls_set_id(mglGraph *, long , mglArg *a, int k[10]) +int mgls_idset(mglGraph *, long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==2) a[0].d->SetColumnId(a[1].s); else return 1; return 0; } -void mglc_set_id(wchar_t out[1024], long , mglArg *a, int k[10]) +void mglc_idset(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==2) mglprintf(out,1024,L"%s.SetColumnId(\"%s\");", a[0].s, a[1].s); } @@ -1769,41 +1826,41 @@ void mglc_radar(wchar_t out[1024], long , mglArg *a, int k[10]) int mgls_squeeze(mglGraph *, long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==3) - a[0].d->Squeeze(int(a[1].v), k[2]==3?int(a[2].v):1, k[3]==3?int(a[3].v):1, k[4]==3 && a[4].v>0); + a[0].d->Squeeze(iint(a[1].v), k[2]==3?iint(a[2].v):1, k[3]==3?iint(a[3].v):1, k[4]==3 && a[4].v>0); else return 1; return 0; } void mglc_squeeze(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==3) - mglprintf(out,1024,L"%s.Squeeze(%d, %d, %d, %s);", a[0].s, int(a[1].v), - k[2]==3?int(a[2].v):1, k[3]==3?int(a[3].v):1, k[4]==3 && a[4].v>0 ? "true":"false"); + mglprintf(out,1024,L"%s.Squeeze(%d, %d, %d, %s);", a[0].s, iint(a[1].v), + k[2]==3?iint(a[2].v):1, k[3]==3?iint(a[3].v):1, k[4]==3 && a[4].v>0 ? "true":"false"); } //----------------------------------------------------------------------------- int mgls_stfad(mglGraph *, long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==3) - *(a[0].d) = mglSTFA(*(a[1].d),*(a[2].d), int(a[3].v), k[4]==2?a[4].s[0]:'x'); + *(a[0].d) = mglSTFA(*(a[1].d),*(a[2].d), iint(a[3].v), k[4]==2?a[4].s[0]:'x'); else return 1; return 0; } void mglc_stfad(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==3) - mglprintf(out,1024,L"%s = mglSTFA(%s, %s, %d, '%c');", a[0].s, a[1].s, a[2].s, int(a[3].v), k[4]==2?a[4].s[0]:'x'); + mglprintf(out,1024,L"%s = mglSTFA(%s, %s, %d, '%c');", a[0].s, a[1].s, a[2].s, iint(a[3].v), k[4]==2?a[4].s[0]:'x'); } //----------------------------------------------------------------------------- int mgls_setsize(mglGraph *gr, long , mglArg *a, int k[10]) { if(k[0]==3 && k[1]==3 && a[1].v>1 && a[0].v>1) - gr->SetSize(int(a[0].v), int(a[1].v)); + gr->SetSize(iint(a[0].v), iint(a[1].v)); else return 1; return 0; } void mglc_setsize(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==3 && k[1]==3 && a[1].v>1 && a[0].v>1) - mglprintf(out,1024,L"gr->SetSize(%d, %d);", int(a[0].v), int(a[1].v)); + mglprintf(out,1024,L"gr->SetSize(%d, %d);", iint(a[0].v), iint(a[1].v)); } //----------------------------------------------------------------------------- int mgls_sphere(mglGraph *gr, long , mglArg *a, int k[10]) @@ -1830,18 +1887,18 @@ void mglc_sphere(wchar_t out[1024], long , mglArg *a, int k[10]) int mgls_stfa(mglGraph *gr, long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==1 && k[2]==3) - gr->STFA(*(a[0].d),*(a[1].d), int(a[2].v), k[3]==2?a[3].s:""); + gr->STFA(*(a[0].d),*(a[1].d), iint(a[2].v), k[3]==2?a[3].s:""); else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==3) - gr->STFA(*(a[0].d),*(a[1].d), *(a[2].d),*(a[3].d), int(a[4].v), k[5]==2?a[5].s:""); + gr->STFA(*(a[0].d),*(a[1].d), *(a[2].d),*(a[3].d), iint(a[4].v), k[5]==2?a[5].s:""); else return 1; return 0; } void mglc_stfa(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==1 && k[2]==3) - mglprintf(out,1024,L"gr->STFA(%s, %s, %d, \"%s\");", a[0].s, a[1].s, int(a[2].v), k[3]==2?a[3].s:""); + mglprintf(out,1024,L"gr->STFA(%s, %s, %d, \"%s\");", a[0].s, a[1].s, iint(a[2].v), k[3]==2?a[3].s:""); else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==3) - mglprintf(out,1024,L"gr->STFA(%s, %s, %s, %s, %d, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, int(a[4].v), k[5]==2?a[5].s:""); + mglprintf(out,1024,L"gr->STFA(%s, %s, %s, %s, %d, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, iint(a[4].v), k[5]==2?a[5].s:""); } //----------------------------------------------------------------------------- int mgls_surf3(mglGraph *gr, long , mglArg *a, int k[10]) @@ -1852,10 +1909,10 @@ int mgls_surf3(mglGraph *gr, long , mglArg *a, int k[10]) gr->Surf3(a[4].v,*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d), k[5]==2? a[5].s:0); else if(k[1]==3) gr->Surf3(a[1].v,*(a[0].d),k[2]==2? a[2].s:0); - else if(k[1]==2) gr->Surf3(*(a[0].d),a[1].s,int(k[2]==3?a[2].v:3)); + else if(k[1]==2) gr->Surf3(*(a[0].d),a[1].s,iint(k[2]==3?a[2].v:3)); else if(k[1]==1 && k[2]==1 && k[3]==1) gr->Surf3(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d), - k[4]==2? a[4].s:0,int(k[5]==3?a[5].v:3)); + k[4]==2? a[4].s:0,iint(k[5]==3?a[5].v:3)); else return 1; return 0; } @@ -1868,9 +1925,9 @@ void mglc_surf3(wchar_t out[1024], long , mglArg *a, int k[10]) else if(k[1]==3) mglprintf(out,1024,L"gr->Surf3(%g, %s, \"%s\");", a[1].v, a[0].s, k[2]==2? a[2].s:""); else if(k[1]==2) - mglprintf(out,1024,L"gr->Surf3(%s, \"%s\", %d);", a[0].s, a[1].s, int(k[2]==3?a[2].v:3)); + mglprintf(out,1024,L"gr->Surf3(%s, \"%s\", %d);", a[0].s, a[1].s, iint(k[2]==3?a[2].v:3)); else if(k[1]==1 && k[2]==1 && k[3]==1) - mglprintf(out,1024,L"gr->Surf3(%s, %s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", int(k[5]==3?a[5].v:3)); + mglprintf(out,1024,L"gr->Surf3(%s, %s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", iint(k[5]==3?a[5].v:3)); } //----------------------------------------------------------------------------- int mgls_surf3c(mglGraph *gr, long , mglArg *a, int k[10]) @@ -1881,10 +1938,10 @@ int mgls_surf3c(mglGraph *gr, long , mglArg *a, int k[10]) gr->Surf3C(a[5].v,*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d), k[6]==2? a[6].s:0); else if(k[2]==3) gr->Surf3C(a[2].v,*(a[0].d),*(a[1].d),k[3]==2? a[3].s:0); - else if(k[2]==2) gr->Surf3C(*(a[0].d),*(a[1].d),a[2].s,int(k[3]==3?a[3].v:3)); + else if(k[2]==2) gr->Surf3C(*(a[0].d),*(a[1].d),a[2].s,iint(k[3]==3?a[3].v:3)); else if(k[2]==1 && k[3]==1 && k[4]==1) gr->Surf3C(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d), - k[5]==2? a[5].s:0,int(k[6]==3?a[6].v:3)); + k[5]==2? a[5].s:0,iint(k[6]==3?a[6].v:3)); else return 1; return 0; } @@ -1897,9 +1954,9 @@ void mglc_surf3c(wchar_t out[1024], long , mglArg *a, int k[10]) else if(k[2]==3) mglprintf(out,1024,L"gr->Surf3C(%g, %s, %s, \"%s\");", a[2].v, a[0].s, a[1].s, k[3]==2?a[3].s:0); else if(k[2]==2) - mglprintf(out,1024,L"gr->Surf3C(%s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, int(k[3]==3?a[3].v:3)); + mglprintf(out,1024,L"gr->Surf3C(%s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, iint(k[3]==3?a[3].v:3)); else if(k[2]==1 && k[3]==1 && k[4]==1) - mglprintf(out,1024,L"gr->Surf3C(%s, %s, %s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, k[5]==2?a[5].s:"", int(k[6]==3?a[6].v:3)); + mglprintf(out,1024,L"gr->Surf3C(%s, %s, %s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, k[5]==2?a[5].s:"", iint(k[6]==3?a[6].v:3)); } //----------------------------------------------------------------------------- int mgls_surf3a(mglGraph *gr, long , mglArg *a, int k[10]) @@ -1910,10 +1967,10 @@ int mgls_surf3a(mglGraph *gr, long , mglArg *a, int k[10]) gr->Surf3A(a[5].v,*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d), k[6]==2? a[6].s:0); else if(k[2]==3) gr->Surf3A(a[2].v,*(a[0].d),*(a[1].d),k[3]==2? a[3].s:0); - else if(k[2]==2) gr->Surf3A(*(a[0].d),*(a[1].d),a[2].s,int(k[3]==3?a[3].v:3)); + else if(k[2]==2) gr->Surf3A(*(a[0].d),*(a[1].d),a[2].s,iint(k[3]==3?a[3].v:3)); else if(k[2]==1 && k[3]==1 && k[4]==1) gr->Surf3A(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d), - k[5]==2? a[5].s:0,int(k[6]==3?a[6].v:3)); + k[5]==2? a[5].s:0,iint(k[6]==3?a[6].v:3)); else return 1; return 0; } @@ -1926,35 +1983,39 @@ void mglc_surf3a(wchar_t out[1024], long , mglArg *a, int k[10]) else if(k[2]==3) mglprintf(out,1024,L"gr->Surf3A(%g, %s, %s, \"%s\");", a[2].v, a[0].s, a[1].s, k[3]==2?a[3].s:0); else if(k[2]==2) - mglprintf(out,1024,L"gr->Surf3A(%s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, int(k[3]==3?a[3].v:3)); + mglprintf(out,1024,L"gr->Surf3A(%s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, iint(k[3]==3?a[3].v:3)); else if(k[2]==1 && k[3]==1 && k[4]==1) - mglprintf(out,1024,L"gr->Surf3A(%s, %s, %s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, k[5]==2?a[5].s:"", int(k[6]==3?a[6].v:3)); + mglprintf(out,1024,L"gr->Surf3A(%s, %s, %s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, k[5]==2?a[5].s:"", iint(k[6]==3?a[6].v:3)); } //----------------------------------------------------------------------------- int mgls_subplot(mglGraph *gr, long , mglArg *a, int k[10]) { - if(k[0]==3 && k[1]==3 && k[2]==3) - gr->SubPlot(int(a[0].v), int(a[1].v), int(a[2].v), k[3]==3?a[3].v:0, k[4]==3?a[4].v:0); + if(k[0]==3 && k[1]==3 && k[2]==3 && k[3]==2) + gr->SubPlot(iint(a[0].v), iint(a[1].v), iint(a[2].v), a[3].s); + else if(k[0]==3 && k[1]==3 && k[2]==3) + gr->SubPlot(iint(a[0].v), iint(a[1].v), iint(a[2].v), k[3]==3?a[3].v:0, k[4]==3?a[4].v:0); else return 1; return 0; } void mglc_subplot(wchar_t out[1024], long , mglArg *a, int k[10]) { - if(k[0]==3 && k[1]==3 && k[2]==3) - mglprintf(out,1024,L"gr->SubPlot(%d, %d, %d, %g, %g);", int(a[0].v), int(a[1].v), int(a[2].v), k[3]==3?a[3].v:0, k[4]==3?a[4].v:0); + if(k[0]==3 && k[1]==3 && k[2]==3 && k[3]==2) + mglprintf(out,1024,L"gr->SubPlot(%d, %d, %d, \"%s\");", iint(a[0].v), iint(a[1].v), iint(a[2].v), a[3].s); + else if(k[0]==3 && k[1]==3 && k[2]==3) + mglprintf(out,1024,L"gr->SubPlot(%d, %d, %d, %g, %g);", iint(a[0].v), iint(a[1].v), iint(a[2].v), k[3]==3?a[3].v:0, k[4]==3?a[4].v:0); } //----------------------------------------------------------------------------- int mgls_subdata(mglGraph *, long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==1 && k[2]==3) - *(a[0].d) = a[1].d->SubData(int(a[2].v), k[3]==3?int(a[3].v):-1, k[4]==3?int(a[4].v):-1); + *(a[0].d) = a[1].d->SubData(iint(a[2].v), k[3]==3?iint(a[3].v):-1, k[4]==3?iint(a[4].v):-1); else return 1; return 0; } void mglc_subdata(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==1 && k[2]==3) - mglprintf(out,1024,L"%s = %s.SubData(%d, %d, %d);", a[0].s, a[1].s, int(a[2].v), k[3]==3?int(a[3].v):-1, k[4]==3?int(a[4].v):-1); + mglprintf(out,1024,L"%s = %s.SubData(%d, %d, %d);", a[0].s, a[1].s, iint(a[2].v), k[3]==3?iint(a[3].v):-1, k[4]==3?iint(a[4].v):-1); } //----------------------------------------------------------------------------- int mgls_trace(mglGraph *, long , mglArg *a, int k[10]) @@ -1972,10 +2033,6 @@ int mgls_tile(mglGraph *gr, long , mglArg *a, int k[10]) { if(k[0]!=1) return 1; else if(k[1]!=1) gr->Tile(*(a[0].d), k[1]==2? a[1].s:0); - else if(k[1]==1 && k[2]!=1) - gr->TileS(*(a[0].d),*(a[1].d),k[2]==2?a[2].s:0); - else if(k[1]==1 && k[2]==1 && k[3]==1) - gr->TileS(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),k[4]==2? a[4].s:0); else if(k[1]==1 && k[2]==1) gr->Tile(*(a[0].d),*(a[1].d),*(a[2].d),k[3]==2? a[3].s:0); else return 1; @@ -1986,14 +2043,29 @@ void mglc_tile(wchar_t out[1024], long , mglArg *a, int k[10]) if(k[0]!=1) return; else if(k[1]!=1) mglprintf(out,1024,L"gr->Tile(%s, \"%s\");", a[0].s, k[1]==2?a[1].s:""); - else if(k[1]==1 && k[2]!=1) - mglprintf(out,1024,L"gr->Tile(%s, %s, \"%s\");", a[0].s, a[1].s, k[2]==2?a[2].s:""); - else if(k[1]==1 && k[2]==1 && k[3]==1) - mglprintf(out,1024,L"gr->Tile(%s, %s, %s, %s, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:""); else if(k[1]==1 && k[2]==1) mglprintf(out,1024,L"gr->Tile(%s, %s, %s, \"%s\");", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:""); } //----------------------------------------------------------------------------- +int mgls_tiles(mglGraph *gr, long , mglArg *a, int k[10]) +{ + if(k[0]!=1) return 1; + else if(k[1]==1 && k[2]!=1) + gr->TileS(*(a[0].d),*(a[1].d),k[2]==2?a[2].s:0); + else if(k[1]==1 && k[2]==1 && k[3]==1) + gr->TileS(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),k[4]==2? a[4].s:0); + else return 1; + return 0; +} +void mglc_tiles(wchar_t out[1024], long , mglArg *a, int k[10]) +{ + if(k[0]!=1) return; + else if(k[1]==1 && k[2]!=1) + mglprintf(out,1024,L"gr->TileS(%s, %s, \"%s\");", a[0].s, a[1].s, k[2]==2?a[2].s:""); + else if(k[1]==1 && k[2]==1 && k[3]==1) + mglprintf(out,1024,L"gr->TileS(%s, %s, %s, %s, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:""); +} +//----------------------------------------------------------------------------- int mgls_text(mglGraph *gr, long , mglArg *a, int k[10]) { if(k[0]==3 && k[1]==3 && k[2]==3 && k[3]==2) @@ -2060,13 +2132,13 @@ void mglc_transparent(wchar_t out[1024], long , mglArg *a, int k[10]) //----------------------------------------------------------------------------- int mgls_transptype(mglGraph *gr, long , mglArg *a, int k[10]) { - if(k[0]==3) gr->TranspType = int(a[0].v); + if(k[0]==3) gr->TranspType = iint(a[0].v); else return 1; return 0; } void mglc_transptype(wchar_t out[1024], long , mglArg *a, int k[10]) { - if(k[0]==3) mglprintf(out,1024,L"gr->TranspType = %d;", int(a[0].v)); + if(k[0]==3) mglprintf(out,1024,L"gr->TranspType = %d;", iint(a[0].v)); } //----------------------------------------------------------------------------- int mgls_transform(mglGraph *, long , mglArg *a, int k[10]) @@ -2166,7 +2238,7 @@ int mgls_triplot(mglGraph *gr, long , mglArg *a, int k[10]) } void mglc_triplot(wchar_t out[1024], long , mglArg *a, int k[10]) { - if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[3]==1) + if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1) mglprintf(out,1024,L"gr->TriPlot(%s, %s, %s, %s, %s, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, k[5]==2?a[5].s:""); else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1) mglprintf(out,1024,L"gr->TriPlot(%s, %s, %s, %s, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:""); @@ -2174,6 +2246,51 @@ void mglc_triplot(wchar_t out[1024], long , mglArg *a, int k[10]) mglprintf(out,1024,L"gr->TriPlot(%s, %s, %s, \"%s\", %g);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?a[4].v:NAN); } //----------------------------------------------------------------------------- +int mgls_quadplot(mglGraph *gr, long , mglArg *a, int k[10]) +{ + if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1) + gr->QuadPlot(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d),k[5]==2?a[5].s:0); + else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1) + gr->QuadPlot(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),k[4]==2?a[4].s:0); + else if(k[0]==1 && k[1]==1 && k[2]==1) + gr->QuadPlot(*(a[0].d),*(a[1].d),*(a[2].d),k[3]==2?a[3].s:0,k[4]==3?a[4].v:NAN); + else return 1; + return 0; +} +void mglc_quadplot(wchar_t out[1024], long , mglArg *a, int k[10]) +{ + if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1) + mglprintf(out,1024,L"gr->QuadPlot(%s, %s, %s, %s, %s, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, k[5]==2?a[5].s:""); + else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1) + mglprintf(out,1024,L"gr->QuadPlot(%s, %s, %s, %s, \"%s\");", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:""); + else if(k[0]==1 && k[1]==1 && k[2]==1) + mglprintf(out,1024,L"gr->QuadPlot(%s, %s, %s, \"%s\", %g);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?a[4].v:NAN); +} +//----------------------------------------------------------------------------- +int mgls_tricont(mglGraph *gr, long , mglArg *a, int k[10]) +{ + if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1 && k[5]==1) + gr->TriContV(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d),*(a[5].d),k[6]==2?a[6].s:0,k[7]==3?a[7].v:NAN); + else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1) + gr->TriContV(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d),k[5]==2?a[5].s:0,k[6]==3?a[6].v:NAN); + else if(k[0]==1 && k[1]==1 && k[2]==1 && k[5]==1) + gr->TriCont(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),k[4]==2?a[4].s:0,k[5]==3?a[5].v:NAN); + else return 1; + return 0; +} +void mglc_tricont(wchar_t out[1024], long , mglArg *a, int k[10]) +{ + if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1 && k[5]==1) + mglprintf(out,1024,L"gr->TriContV(%s, %s, %s, %s, %s, %s, \"%s\", %g);", + a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, a[5].s, k[6]==2?a[6].s:"",k[7]==3?a[7].v:NAN); + else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1) + mglprintf(out,1024,L"gr->TriContV(%s, %s, %s, %s, %s, \"%s\", %g);", + a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, k[5]==2?a[5].s:"",k[6]==3?a[6].v:NAN); + else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1) + mglprintf(out,1024,L"gr->TriCont(%s, %s, %s, %s, \"%s\", %g);", + a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?a[5].v:NAN); +} +//----------------------------------------------------------------------------- int mgls_ternary(mglGraph *gr, long , mglArg *a, int k[10]) { if(k[0]==3) gr->Ternary(a[0].v!=0); @@ -2230,13 +2347,13 @@ int mgls_vect(mglGraph *gr, long , mglArg *a, int k[10]) int i; for(i=0;i<7;i++) if(k[i]!=1) break; if(i==2) - gr->Vect(*(a[0].d),*(a[1].d),k[2]==2?a[2].s:0, k[3]==3?a[3].v:NAN, k[4]==3?int(a[4].v):0); + gr->Vect(*(a[0].d),*(a[1].d),k[2]==2?a[2].s:0, k[3]==3?a[3].v:NAN, k[4]==3?iint(a[4].v):0); else if(i==4) - gr->Vect(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),k[4]==2?a[4].s:0, k[5]==3?a[5].v:NAN, k[6]==3?int(a[6].v):0); + gr->Vect(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),k[4]==2?a[4].s:0, k[5]==3?a[5].v:NAN, k[6]==3?iint(a[6].v):0); else if(i==3) - gr->Vect(*(a[0].d),*(a[1].d),*(a[2].d),k[3]==2?a[3].s:0, k[4]==3?int(a[4].v):0); + gr->Vect(*(a[0].d),*(a[1].d),*(a[2].d),k[3]==2?a[3].s:0, k[4]==3?iint(a[4].v):0); else if(i==6) - gr->Vect(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d),*(a[5].d),k[6]==2?a[6].s:0, k[7]==3?int(a[7].v):0); + gr->Vect(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d),*(a[5].d),k[6]==2?a[6].s:0, k[7]==3?iint(a[7].v):0); else return 1; return 0; } @@ -2245,13 +2362,13 @@ void mglc_vect(wchar_t out[1024], long , mglArg *a, int k[10]) int i; for(i=0;i<7;i++) if(k[i]!=1) break; if(i==2) - mglprintf(out,1024,L"gr->Vect(%s, %s, \"%s\", %g, %d);", a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:NAN,k[4]==3?int(a[4].v):0); + mglprintf(out,1024,L"gr->Vect(%s, %s, \"%s\", %g, %d);", a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:NAN,k[4]==3?iint(a[4].v):0); else if(i==4) - mglprintf(out,1024,L"gr->Vect(%s, %s, %s, %s, \"%s\", %g, %d);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?a[5].v:NAN,k[6]==3?int(a[6].v):0); + mglprintf(out,1024,L"gr->Vect(%s, %s, %s, %s, \"%s\", %g, %d);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?a[5].v:NAN,k[6]==3?iint(a[6].v):0); else if(i==3) - mglprintf(out,1024,L"gr->Vect(%s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:0,k[4]==3?int(a[4].v):0); + mglprintf(out,1024,L"gr->Vect(%s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:0,k[4]==3?iint(a[4].v):0); else if(i==6) - mglprintf(out,1024,L"gr->Vect(%s, %s, %s, %s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, a[5].s, k[6]==2?a[6].s:"",k[7]==3?int(a[7].v):0); + mglprintf(out,1024,L"gr->Vect(%s, %s, %s, %s, %s, %s, \"%s\", %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, a[5].s, k[6]==2?a[6].s:"",k[7]==3?iint(a[7].v):0); } //----------------------------------------------------------------------------- int mgls_vectl(mglGraph *gr, long , mglArg *a, int k[10]) @@ -2306,7 +2423,7 @@ void mglc_traj(wchar_t out[1024], long , mglArg *a, int k[10]) //----------------------------------------------------------------------------- int mgls_xlabel(mglGraph *gr, long , mglArg *a, int k[10]) { - if(k[0]==2) gr->Labelw('x', a[0].w, k[1]==3?a[1].v:1, k[2]==3?a[2].v:-1.4, k[3]==3?a[3].v:0); + if(k[0]==2) gr->Labelw('x', a[0].w, k[1]==3?a[1].v:0, k[2]==3?a[2].v:-1.4, k[3]==3?a[3].v:0); else return 1; return 0; } @@ -2317,7 +2434,7 @@ void mglc_xlabel(wchar_t out[1024], long , mglArg *a, int k[10]) //----------------------------------------------------------------------------- int mgls_ylabel(mglGraph *gr, long , mglArg *a, int k[10]) { - if(k[0]==2) gr->Labelw('y', a[0].w, k[1]==3?a[1].v:1, k[2]==3?a[2].v:-1.4, k[3]==3?a[3].v:0); + if(k[0]==2) gr->Labelw('y', a[0].w, k[1]==3?a[1].v:0, k[2]==3?a[2].v:-1.4, k[3]==3?a[3].v:0); else return 1; return 0; } @@ -2328,7 +2445,7 @@ void mglc_ylabel(wchar_t out[1024], long , mglArg *a, int k[10]) //----------------------------------------------------------------------------- int mgls_zlabel(mglGraph *gr, long , mglArg *a, int k[10]) { - if(k[0]==2) gr->Labelw('z', a[0].w, k[1]==3?a[1].v:1, k[2]==3?a[2].v:-1.4, k[3]==3?a[3].v:0); + if(k[0]==2) gr->Labelw('z', a[0].w, k[1]==3?a[1].v:0, k[2]==3?a[2].v:-1.4, k[3]==3?a[3].v:0); else return 1; return 0; } @@ -2339,7 +2456,7 @@ void mglc_zlabel(wchar_t out[1024], long , mglArg *a, int k[10]) //----------------------------------------------------------------------------- int mgls_tlabel(mglGraph *gr, long , mglArg *a, int k[10]) { - if(k[0]==2) gr->Labelw('t', a[0].w, k[1]==3?a[1].v:1, k[2]==3?a[2].v:-1.4, k[3]==3?a[3].v:0); + if(k[0]==2) gr->Labelw('t', a[0].w, k[1]==3?a[1].v:0, k[2]==3?a[2].v:-1.4, k[3]==3?a[3].v:0); else return 1; return 0; } @@ -2423,7 +2540,7 @@ int mgls_xtick(mglGraph *gr, long n, mglArg *a, int k[10]) gr->SetTicksVal('x',i,v,s); } else if(k[0]==3) - gr->SetTicks('x', a[0].v, k[1]==3?int(a[1].v):0, k[2]==3?a[2].v:NAN); + gr->SetTicks('x', a[0].v, k[1]==3?iint(a[1].v):0, k[2]==3?a[2].v:NAN); else if(k[0]==2) gr->SetXTT(a[0].w); else return 1; return 0; @@ -2431,9 +2548,9 @@ int mgls_xtick(mglGraph *gr, long n, mglArg *a, int k[10]) void mglc_xtick(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==3 && k[1]==3 && k[2]==3) - mglprintf(out,1024,L"gr->SetTicks('x', %g, %d, %g);", a[0].v, int(a[1].v),a[2].v); + mglprintf(out,1024,L"gr->SetTicks('x', %g, %d, %g);", a[0].v, iint(a[1].v),a[2].v); else if(k[0]==3 && k[1]==3) - mglprintf(out,1024,L"gr->SetTicks('x', %g, %d);", a[0].v, int(a[1].v)); + mglprintf(out,1024,L"gr->SetTicks('x', %g, %d);", a[0].v, iint(a[1].v)); else if(k[0]==3 && k[1]==2) mglprintf(out,1024,L"gr->SetTicksVal('x', %g, \"%s\");", a[0].v, a[1].s); else if(k[0]==3) mglprintf(out,1024,L"gr->SetTicks('x', %g);", a[0].v); @@ -2455,7 +2572,7 @@ int mgls_ytick(mglGraph *gr, long n, mglArg *a, int k[10]) gr->SetTicksVal('y',i,v,s); } else if(k[0]==3) - gr->SetTicks('y', a[0].v, k[1]==3?int(a[1].v):0, k[2]==3?a[2].v:NAN); + gr->SetTicks('y', a[0].v, k[1]==3?iint(a[1].v):0, k[2]==3?a[2].v:NAN); else if(k[0]==2) gr->SetYTT(a[0].w); else return 1; return 0; @@ -2463,9 +2580,9 @@ int mgls_ytick(mglGraph *gr, long n, mglArg *a, int k[10]) void mglc_ytick(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==3 && k[1]==3 && k[2]==3) - mglprintf(out,1024,L"gr->SetTicks('y', %g, %d, %g);", a[0].v, int(a[1].v),a[2].v); + mglprintf(out,1024,L"gr->SetTicks('y', %g, %d, %g);", a[0].v, iint(a[1].v),a[2].v); else if(k[0]==3 && k[1]==3) - mglprintf(out,1024,L"gr->SetTicks('y', %g, %d);", a[0].v, int(a[1].v)); + mglprintf(out,1024,L"gr->SetTicks('y', %g, %d);", a[0].v, iint(a[1].v)); else if(k[0]==3 && k[1]==2) mglprintf(out,1024,L"gr->SetTicksVal('y', %g, \"%s\");", a[0].v, a[1].s); else if(k[0]==3) mglprintf(out,1024,L"gr->SetTicks('y', %g);", a[0].v); @@ -2486,7 +2603,7 @@ int mgls_ztick(mglGraph *gr, long n, mglArg *a, int k[10]) gr->SetTicksVal('z',i,v,s); } else if(k[0]==3) - gr->SetTicks('z', a[0].v, k[1]==3?int(a[1].v):0, k[2]==3?a[2].v:NAN); + gr->SetTicks('z', a[0].v, k[1]==3?iint(a[1].v):0, k[2]==3?a[2].v:NAN); else if(k[0]==2) gr->SetZTT(a[0].w); else return 1; return 0; @@ -2494,9 +2611,9 @@ int mgls_ztick(mglGraph *gr, long n, mglArg *a, int k[10]) void mglc_ztick(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==3 && k[1]==3 && k[2]==3) - mglprintf(out,1024,L"gr->SetTicks('z', %g, %d, %g);", a[0].v, int(a[1].v),a[2].v); + mglprintf(out,1024,L"gr->SetTicks('z', %g, %d, %g);", a[0].v, iint(a[1].v),a[2].v); else if(k[0]==3 && k[1]==3) - mglprintf(out,1024,L"gr->SetTicks('z', %g, %d);", a[0].v, int(a[1].v)); + mglprintf(out,1024,L"gr->SetTicks('z', %g, %d);", a[0].v, iint(a[1].v)); else if(k[0]==3 && k[1]==2) mglprintf(out,1024,L"gr->SetTicksVal('z', %g, \"%s\");", a[0].v, a[1].s); else if(k[0]==3) mglprintf(out,1024,L"gr->SetTicks('z', %g);", a[0].v); @@ -2540,14 +2657,14 @@ void mglc_error(wchar_t out[1024], long , mglArg *a, int k[10]) //----------------------------------------------------------------------------- int mgls_extend(mglGraph *, long , mglArg *a, int k[10]) { - if(k[0]==1 && k[1]==3) a[0].d->Extend(int(a[1].v),k[2]==3?int(a[2].v):0); + if(k[0]==1 && k[1]==3) a[0].d->Extend(iint(a[1].v),k[2]==3?iint(a[2].v):0); else return 1; return 0; } void mglc_extend(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==3) - mglprintf(out,1024,L"%s.Extend(%d, %d);", a[0].s, int(a[1].v), k[2]==3?int(a[2].v):0); + mglprintf(out,1024,L"%s.Extend(%d, %d);", a[0].s, iint(a[1].v), k[2]==3?iint(a[2].v):0); } //----------------------------------------------------------------------------- int mgls_info(mglGraph *gr, long , mglArg *a, int k[10]) @@ -2589,20 +2706,20 @@ void mglc_inplot(wchar_t out[1024], long , mglArg *a, int k[10]) //----------------------------------------------------------------------------- int mgls_columnplot(mglGraph *gr, long , mglArg *a, int k[10]) { - if(k[0]==3 && k[1]==3) gr->ColumnPlot(int(a[0].v), int(a[1].v)); + if(k[0]==3 && k[1]==3) gr->ColumnPlot(iint(a[0].v), iint(a[1].v), k[2]==3?a[2].v:0); else return 1; return 0; } void mglc_columnplot(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==3 && k[1]==3) - mglprintf(out,1024,L"gr->ColumnPlot(%d, %d);", int(a[0].v), int(a[1].v)); + mglprintf(out,1024,L"gr->ColumnPlot(%d, %d, %g);", iint(a[0].v), iint(a[1].v), k[2]==3?a[2].v:0); } //----------------------------------------------------------------------------- int mgls_stickplot(mglGraph *gr, long , mglArg *a, int k[10]) { if(k[0]==3 && k[1]==3 && k[2]==3 && k[3]==3) - gr->StickPlot(int(a[0].v), int(a[1].v), a[2].v, a[3].v); + gr->StickPlot(iint(a[0].v), iint(a[1].v), a[2].v, a[3].v); else return 1; return 0; } @@ -2610,7 +2727,7 @@ void mglc_stickplot(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==3 && k[1]==3 && k[2]==3 && k[3]==3) mglprintf(out,1024,L"gr->StickPlot(%d, %d, %g, %g);", - int(a[0].v), int(a[1].v), a[2].v, a[3].v); + iint(a[0].v), iint(a[1].v), a[2].v, a[3].v); } //----------------------------------------------------------------------------- int mgls_pipe(mglGraph *gr, long , mglArg *a, int k[10]) @@ -2618,16 +2735,16 @@ int mgls_pipe(mglGraph *gr, long , mglArg *a, int k[10]) int i; for(i=0;i<7;i++) if(k[i]!=1) break; if(i==2) - gr->Pipe(*(a[0].d),*(a[1].d),k[2]==2?a[2].s:0,k[3]==3?a[3].v:0.05,k[4]==3?int(a[4].v):5, + gr->Pipe(*(a[0].d),*(a[1].d),k[2]==2?a[2].s:0,k[3]==3?a[3].v:0.05,k[4]==3?iint(a[4].v):5, true,k[5]==3?a[5].v:NAN); else if(i==4) gr->Pipe(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),k[4]==2?a[4].s:0,k[5]==3?a[5].v:0.05, - k[6]==3?int(a[6].v):5,true,k[7]==3?a[7].v:NAN); + k[6]==3?iint(a[6].v):5,true,k[7]==3?a[7].v:NAN); else if(i==3) - gr->Pipe(*(a[0].d),*(a[1].d),*(a[2].d),k[3]==2?a[3].s:0,k[4]==3?a[4].v:0.05,k[5]==3?int(a[5].v):3); + gr->Pipe(*(a[0].d),*(a[1].d),*(a[2].d),k[3]==2?a[3].s:0,k[4]==3?a[4].v:0.05,k[5]==3?iint(a[5].v):3); else if(i==6) gr->Pipe(*(a[0].d),*(a[1].d),*(a[2].d),*(a[3].d),*(a[4].d),*(a[5].d), - k[6]==2?a[6].s:0,k[7]==3?a[7].v:0.05,k[8]==3?int(a[8].v):3); + k[6]==2?a[6].s:0,k[7]==3?a[7].v:0.05,k[8]==3?iint(a[8].v):3); else return 1; return 0; } @@ -2636,13 +2753,13 @@ void mglc_pipe(wchar_t out[1024], long , mglArg *a, int k[10]) int i; for(i=0;i<7;i++) if(k[i]!=1) break; if(i==2) - mglprintf(out,1024,L"gr->Pipe(%s, %s, \"%s\", %g, %d, true, %g);", a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:0.05, k[4]==3?int(a[4].v):5, k[5]==3?a[5].v:NAN); + mglprintf(out,1024,L"gr->Pipe(%s, %s, \"%s\", %g, %d, true, %g);", a[0].s, a[1].s, k[2]==2?a[2].s:"", k[3]==3?a[3].v:0.05, k[4]==3?iint(a[4].v):5, k[5]==3?a[5].v:NAN); else if(i==4) - mglprintf(out,1024,L"gr->Pipe(%s, %s, %s, %s, \"%s\", %g, %d, true, %g);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?a[5].v:0.05, k[6]==3?int(a[6].v):5, k[7]==3?a[7].v:NAN); + mglprintf(out,1024,L"gr->Pipe(%s, %s, %s, %s, \"%s\", %g, %d, true, %g);", a[0].s, a[1].s, a[2].s, a[3].s, k[4]==2?a[4].s:"", k[5]==3?a[5].v:0.05, k[6]==3?iint(a[6].v):5, k[7]==3?a[7].v:NAN); else if(i==3) - mglprintf(out,1024,L"gr->Pipe(%s, %s, %s, \"%s\", %g, %d);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?a[4].v:0.05, k[5]==3?int(a[5].v):3); + mglprintf(out,1024,L"gr->Pipe(%s, %s, %s, \"%s\", %g, %d);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?a[4].v:0.05, k[5]==3?iint(a[5].v):3); else if(i==6) - mglprintf(out,1024,L"gr->Pipe(%s, %s, %s, %s, %s, %s, \"%s\", %g, %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, a[5].s, k[6]==2?a[6].s:"", k[7]==3?a[7].v:0.05, k[8]==3?int(a[8].v):3); + mglprintf(out,1024,L"gr->Pipe(%s, %s, %s, %s, %s, %s, \"%s\", %g, %d);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s, a[5].s, k[6]==2?a[6].s:"", k[7]==3?a[7].v:0.05, k[8]==3?iint(a[8].v):3); } //----------------------------------------------------------------------------- int mgls_origin(mglGraph *gr, long , mglArg *a, int k[10]) @@ -2675,22 +2792,22 @@ void mglc_plotfactor(wchar_t out[1024], long , mglArg *a, int k[10]) int mgls_norm(mglGraph *, long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==3 && k[2]==3) - a[0].d->Norm(a[1].v,a[2].v,k[3]==3?a[3].v!=0:false,k[4]==3?int(a[4].v):0); + a[0].d->Norm(a[1].v,a[2].v,k[3]==3?a[3].v!=0:false,k[4]==3?iint(a[4].v):0); else return 1; return 0; } void mglc_norm(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==3 && k[2]==3) - mglprintf(out,1024,L"%s.Norm(%g, %g, %s, %d);", a[0].s, a[1].v, a[2].v, (k[3]==3&&a[3].v!=0)?"true":"false", k[4]==3?int(a[4].v):0); + mglprintf(out,1024,L"%s.Norm(%g, %g, %s, %d);", a[0].s, a[1].v, a[2].v, (k[3]==3&&a[3].v!=0)?"true":"false", k[4]==3?iint(a[4].v):0); } //----------------------------------------------------------------------------- int mgls_hist(mglGraph *gr, long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==3 && k[4]==3 && k[5]==3) - *(a[0].d) = a[1].d->Hist(*(a[2].d), int(a[3].v), a[4].v, a[5].v, k[6]==3?int(a[6].v):0); + *(a[0].d) = a[1].d->Hist(*(a[2].d), iint(a[3].v), a[4].v, a[5].v, k[6]==3?iint(a[6].v):0); else if(k[0]==1 && k[1]==1 && k[2]==3 && k[3]==3 && k[4]==3) - *(a[0].d) = a[1].d->Hist(int(a[2].v), a[3].v, a[4].v, k[5]==3?int(a[5].v):0); + *(a[0].d) = a[1].d->Hist(iint(a[2].v), a[3].v, a[4].v, k[5]==3?iint(a[5].v):0); else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1) gr->Hist(*(a[0].d), *(a[1].d), *(a[2].d), *(a[3].d), *(a[4].d)); else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1) @@ -2703,9 +2820,9 @@ int mgls_hist(mglGraph *gr, long , mglArg *a, int k[10]) void mglc_hist(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==3 && k[4]==3 && k[5]==3) - mglprintf(out,1024,L"%s = %s.Hist(%s, %d, %g, %g, %d);", a[0].s, a[1].s, a[2].s, int(a[3].v), a[4].v, a[5].v, k[6]==3?int(a[6].v):0); + mglprintf(out,1024,L"%s = %s.Hist(%s, %d, %g, %g, %d);", a[0].s, a[1].s, a[2].s, iint(a[3].v), a[4].v, a[5].v, k[6]==3?iint(a[6].v):0); else if(k[0]==1 && k[1]==1 && k[2]==3 && k[3]==3 && k[4]==3) - mglprintf(out,1024,L"%s = %s.Hist(%d, %g, %g, %d);", a[0].s, a[1].s, int(a[2].v), a[3].v, a[4].v, k[5]==3?int(a[5].v):0); + mglprintf(out,1024,L"%s = %s.Hist(%d, %g, %g, %d);", a[0].s, a[1].s, iint(a[2].v), a[3].v, a[4].v, k[5]==3?iint(a[5].v):0); else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1 && k[4]==1) mglprintf(out,1024,L"gr->Hist(%s, %s, %s, %s, %s);", a[0].s, a[1].s, a[2].s, a[3].s, a[4].s); else if(k[0]==1 && k[1]==1 && k[2]==1 && k[3]==1) @@ -2723,29 +2840,53 @@ int mgls_mirror(mglGraph *, long , mglArg *a, int k[10]) void mglc_mirror(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==2) mglprintf(out,1024,L"%s.Mirror(\"%s\");", a[0].s, a[1].s); } //----------------------------------------------------------------------------- +int mgls_hankel(mglGraph *, long , mglArg *a, int k[10]) +{ + if(k[0]==1 && k[1]==2) a[0].d->Hankel(a[1].s); else return 1; + return 0; +} +void mglc_hankel(wchar_t out[1024], long , mglArg *a, int k[10]) +{ if(k[0]==1 && k[1]==2) mglprintf(out,1024,L"%s.Hankel('%s');", a[0].s, a[1].s); } +//----------------------------------------------------------------------------- +int mgls_sinfft(mglGraph *, long , mglArg *a, int k[10]) +{ + if(k[0]==1 && k[1]==2) a[0].d->SinFFT(a[1].s); else return 1; + return 0; +} +void mglc_sinfft(wchar_t out[1024], long , mglArg *a, int k[10]) +{ if(k[0]==1 && k[1]==2) mglprintf(out,1024,L"%s.SinFFT('%s');", a[0].s, a[1].s); } +//----------------------------------------------------------------------------- +int mgls_cosfft(mglGraph *, long , mglArg *a, int k[10]) +{ + if(k[0]==1 && k[1]==2) a[0].d->CosFFT(a[1].s); else return 1; + return 0; +} +void mglc_cosfft(wchar_t out[1024], long , mglArg *a, int k[10]) +{ if(k[0]==1 && k[1]==2) mglprintf(out,1024,L"%s.CosFFT('%s');", a[0].s, a[1].s); } +//----------------------------------------------------------------------------- int mgls_new(mglGraph *, long , mglArg *a, int k[10]) { - if(k[0]==1) a[0].d->Create(k[1]==3?int(a[1].v):1, k[2]==3?int(a[2].v):1, k[3]==3?int(a[3].v):1); + if(k[0]==1) a[0].d->Create(k[1]==3?iint(a[1].v):1, k[2]==3?iint(a[2].v):1, k[3]==3?iint(a[3].v):1); else return 1; return 0; } void mglc_new(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1) - mglprintf(out,1024,L"%s.Create(%d, %d, %d);", a[0].s, k[1]==3?int(a[1].v):1, k[2]==3?int(a[2].v):1, k[3]==3?int(a[3].v):1); + mglprintf(out,1024,L"%s.Create(%d, %d, %d);", a[0].s, k[1]==3?iint(a[1].v):1, k[2]==3?iint(a[2].v):1, k[3]==3?iint(a[3].v):1); } //----------------------------------------------------------------------------- int mgls_var(mglGraph *, long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==3 && k[2]==3) - { a[0].d->Create(int(a[1].v)); a[0].d->Fill(a[2].v, k[3]==3?a[3].v:NAN); } + { a[0].d->Create(iint(a[1].v)); a[0].d->Fill(a[2].v, k[3]==3?a[3].v:NAN); } else return 1; return 0; } void mglc_var(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==3 && k[2]==3) - mglprintf(out,1024,L"%s.Create(%d);\t%s.Fill(%g,%g);",a[0].s, int(a[1].v), a[0].s, a[2].v, k[3]==3?a[3].v:NAN); + mglprintf(out,1024,L"%s.Create(%d);\t%s.Fill(%g,%g);",a[0].s, iint(a[1].v), a[0].s, a[2].v, k[3]==3?a[3].v:NAN); } //----------------------------------------------------------------------------- int mgls_chdir(mglGraph *gr, long , mglArg *a, int k[10]) @@ -2922,14 +3063,14 @@ void mglc_arrowsize(wchar_t out[1024], long , mglArg *a, int k[10]) int mgls_rearrange(mglGraph *, long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==3) - a[0].d->Rearrange(int(a[1].v), k[2]==3?int(a[2].v):0, k[3]==3?int(a[3].v):0); + a[0].d->Rearrange(iint(a[1].v), k[2]==3?iint(a[2].v):0, k[3]==3?iint(a[3].v):0); else return 1; return 0; } void mglc_rearrange(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==3) - mglprintf(out,1024,L"%s.Rearrange(%d, %d, %d);",a[0].s, int(a[1].v), k[2]==3?int(a[2].v):0, k[3]==3?int(a[3].v):0); + mglprintf(out,1024,L"%s.Rearrange(%d, %d, %d);",a[0].s, iint(a[1].v), k[2]==3?iint(a[2].v):0, k[3]==3?iint(a[3].v):0); } //----------------------------------------------------------------------------- int mgls_ctick(mglGraph *gr, long , mglArg *a, int k[10]) @@ -2947,32 +3088,32 @@ void mglc_ctick(wchar_t out[1024], long , mglArg *a, int k[10]) //----------------------------------------------------------------------------- int mgls_fplot(mglGraph *gr, long , mglArg *a, int k[10]) { - if(k[0]==2 && k[1]==2 && k[2]==2) gr->Plot(a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:0, k[4]==3?int(a[4].v):100); - else if(k[0]==2) gr->Plot(a[0].s, k[1]==2?a[1].s:0, k[2]==3?a[2].v:NAN, k[3]==3?int(a[3].v):100); + if(k[0]==2 && k[1]==2 && k[2]==2) gr->Plot(a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:0, k[4]==3?iint(a[4].v):100); + else if(k[0]==2) gr->Plot(a[0].s, k[1]==2?a[1].s:0, k[2]==3?a[2].v:NAN, k[3]==3?iint(a[3].v):100); else return 1; return 0; } void mglc_fplot(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==2 && k[1]==2 && k[2]==2) - mglprintf(out,1024,L"gr->Plot(\"%s\", \"%s\", \"%s\", \"%s\", %d);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?int(a[4].v):100); + mglprintf(out,1024,L"gr->Plot(\"%s\", \"%s\", \"%s\", \"%s\", %d);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?iint(a[4].v):100); else if(k[0]==2) - mglprintf(out,1024,L"gr->Plot(\"%s\", \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?int(a[3].v):100); + mglprintf(out,1024,L"gr->Plot(\"%s\", \"%s\", %g, %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?a[2].v:NAN, k[3]==3?iint(a[3].v):100); } //----------------------------------------------------------------------------- int mgls_fsurf(mglGraph *gr, long , mglArg *a, int k[10]) { - if(k[0]==2 && k[1]==2 && k[2]==2) gr->Surf(a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:0, k[4]==3?int(a[4].v):100); - else if(k[0]==2) gr->Surf(a[0].s, k[1]==2?a[1].s:0, k[2]==3?int(a[2].v):100); + if(k[0]==2 && k[1]==2 && k[2]==2) gr->Surf(a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:0, k[4]==3?iint(a[4].v):100); + else if(k[0]==2) gr->Surf(a[0].s, k[1]==2?a[1].s:0, k[2]==3?iint(a[2].v):100); else return 1; return 0; } void mglc_fsurf(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==2 && k[1]==2 && k[2]==2) - mglprintf(out,1024,L"gr->Surf(\"%s\", \"%s\", \"%s\", \"%s\", %d);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?int(a[4].v):100); + mglprintf(out,1024,L"gr->Surf(\"%s\", \"%s\", \"%s\", \"%s\", %d);", a[0].s, a[1].s, a[2].s, k[3]==2?a[3].s:"", k[4]==3?iint(a[4].v):100); else if(k[0]==2) - mglprintf(out,1024,L"gr->Surf(\"%s\", \"%s\", %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?int(a[2].v):100); + mglprintf(out,1024,L"gr->Surf(\"%s\", \"%s\", %d);", a[0].s, k[1]==2?a[1].s:"", k[2]==3?iint(a[2].v):100); } //----------------------------------------------------------------------------- int mgls_fgets(mglGraph *gr, long , mglArg *a, int k[10]) @@ -2981,29 +3122,37 @@ int mgls_fgets(mglGraph *gr, long , mglArg *a, int k[10]) FILE *fp; if(k[0]==3 && k[1]==3 && k[2]==3 && k[3]==2) { - int i, n = (k[4]==3?int(a[4].v):0); + int i, n = (k[4]==3?iint(a[4].v):0); fp = fopen(a[3].s,"rt"); if(!fp) { if(gr->Message) sprintf(gr->Message,"Wrong file %s",a[3].s); return 0; } - for(i=0;iMessage) sprintf(gr->Message,"Couldn't read %d-th string of file %s",n,a[3].s); + fclose(fp); return 0; + } fclose(fp); gr->Text(mglPoint(a[0].v,a[1].v,a[2].v),buf, (k[5]==2 && a[5].s[0]!=0)?a[5].s:gr->FontDef, k[6]==3?a[6].v:-1.4); } else if(k[0]==3 && k[1]==3 && k[2]==2) { - int i, n = k[3]==3?int(a[3].v):0; + int i, n = k[3]==3?iint(a[3].v):0; fp = fopen(a[2].s,"rt"); if(!fp) { if(gr->Message) sprintf(gr->Message,"Wrong file %s",a[2].s); return 0; } - for(i=0;iMessage) sprintf(gr->Message,"Couldn't read %d-th string of file %s",n,a[3].s); + fclose(fp); return 0; + } fclose(fp); gr->Text(mglPoint(a[0].v,a[1].v,gr->Min.z),buf, (k[4]==2 && a[4].s[0]!=0)?a[4].s:gr->FontDef, k[5]==3?a[5].v:-1.4); } @@ -3119,18 +3268,18 @@ void mglc_evaluate(wchar_t out[1024], long , mglArg *a, int k[10]) int mgls_put(mglGraph *, long , mglArg *a, int k[10]) { if(k[1]==3 && k[0]==1) - a[0].d->Put(a[1].v, k[2]==3?int(a[2].v):-1, k[3]==3?int(a[3].v):-1, k[4]==3?int(a[4].v):-1); + a[0].d->Put(a[1].v, k[2]==3?iint(a[2].v):-1, k[3]==3?iint(a[3].v):-1, k[4]==3?iint(a[4].v):-1); else if(k[0]==1 && k[1]==1) - a[0].d->Put(*(a[1].d), k[2]==3?int(a[2].v):-1, k[3]==3?int(a[3].v):-1, k[4]==3?int(a[4].v):-1); + a[0].d->Put(*(a[1].d), k[2]==3?iint(a[2].v):-1, k[3]==3?iint(a[3].v):-1, k[4]==3?iint(a[4].v):-1); else return 1; return 0; } void mglc_put(wchar_t out[1024], long , mglArg *a, int k[10]) { if(k[0]==1 && k[1]==3) - mglprintf(out,1024,L"%s.Put(%g, %d, %d, %d);", a[0].s, a[1].v, k[2]==3?int(a[2].v):-1, k[3]==3?int(a[3].v):-1, k[4]==3?int(a[4].v):-1); + mglprintf(out,1024,L"%s.Put(%g, %d, %d, %d);", a[0].s, a[1].v, k[2]==3?iint(a[2].v):-1, k[3]==3?iint(a[3].v):-1, k[4]==3?iint(a[4].v):-1); else if(k[0]==1 && k[1]==1) - mglprintf(out,1024,L"%s.Put(%s, %d, %d, %d);", a[0].s, a[1].s, k[2]==3?int(a[2].v):-1, k[3]==3?int(a[3].v):-1, k[4]==3?int(a[4].v):-1); + mglprintf(out,1024,L"%s.Put(%s, %d, %d, %d);", a[0].s, a[1].s, k[2]==3?iint(a[2].v):-1, k[3]==3?iint(a[3].v):-1, k[4]==3?iint(a[4].v):-1); } //----------------------------------------------------------------------------- int mgls_palette(mglGraph *gr, long , mglArg *a, int k[10]) @@ -3304,6 +3453,42 @@ int mgls_adjust(mglGraph *gr, long , mglArg *a, int k[10]) void mglc_adjust(wchar_t out[1024], long , mglArg *a, int k[10]) { mglprintf(out,1024,L"gr->AdjustTicks(\"%s\");",k[0]==2?a[0].s:"xyzc"); } //----------------------------------------------------------------------------- +int mgls_insert(mglGraph *, long , mglArg *a, int k[10]) +{ + if(k[0]==1 && k[1]==2) a[0].d->Insert(a[1].s[0], k[2]==3 ? iint(a[2].v):0, k[3]==3 ? iint(a[3].v):1); + else return 1; + return 0; +} +void mglc_insert(wchar_t out[1024], long , mglArg *a, int k[10]) +{ + if(k[0]==1 && k[1]==2) mglprintf(out,1024,L"%s.Insert('%c', %d, %d);", + a[0].s, a[1].s[0], k[2]==3 ? iint(a[2].v):0, k[3]==3 ? iint(a[3].v):1); +} +//----------------------------------------------------------------------------- +int mgls_delete(mglGraph *, long , mglArg *a, int k[10]) +{ + if(k[0]==1 && k[1]==2) a[0].d->Delete(a[1].s[0], k[2]==3 ? iint(a[2].v):0, k[3]==3 ? iint(a[3].v):1); + else return 1; + return 0; +} +void mglc_delete(wchar_t out[1024], long , mglArg *a, int k[10]) +{ + if(k[0]==1 && k[1]==2) mglprintf(out,1024,L"%s.Delete('%c', %d, %d);", + a[0].s, a[1].s[0], k[2]==3 ? iint(a[2].v):0, k[3]==3 ? iint(a[3].v):1); +} +//----------------------------------------------------------------------------- +int mgls_roll(mglGraph *, long , mglArg *a, int k[10]) +{ + if(k[0]==1 && k[1]==2 && k[2]==3) a[0].d->Roll(a[1].s[0], iint(a[2].v)); + else return 1; + return 0; +} +void mglc_roll(wchar_t out[1024], long , mglArg *a, int k[10]) +{ + if(k[0]==1 && k[1]==2 && k[2]==3) mglprintf(out,1024,L"%s.Roll('%c', %d);", + a[0].s, a[1].s[0], iint(a[2].v)); +} +//----------------------------------------------------------------------------- mglCommand mgls_base_cmd[] = { {L"addlegend",L"Add legend entry",L"addlegend 'txt' 'fmt'", mgls_addlegend, mglc_addlegend, false, 2}, {L"addto",L"Add data or number",L"addto Var Dat|Var num", mgls_addto, mglc_addto, false, 3}, @@ -3334,7 +3519,7 @@ mglCommand mgls_base_cmd[] = { {L"clf",L"Clear picture",L"clf", mgls_clf, mglc_clf, false, 5}, {L"cloud",L"Draw cloud",L"cloud Adat ['fmt']|Xdat Ydat Zdat Adat ['fmt']", mgls_cloud, mglc_cloud, false, 0}, {L"colorbar",L"Draw colorbar",L"colorbar ['fmt' pos]|Vdat ['fmt' pos]|'sch' pos x y w h ", mgls_colorbar, mglc_colorbar, false, 1}, - {L"columnplot",L"Set position of plot inside cell of column", L"columnplot num ind", mgls_columnplot, mglc_columnplot, false, 4}, + {L"columnplot",L"Set position of plot inside cell of column", L"columnplot num ind [d]", mgls_columnplot, mglc_columnplot, false, 4}, {L"combine", L"Direct multiplication of arrays", L"combine Res Adat Bdat", mgls_combine, mglc_combine, false, 3}, {L"cone",L"Draw cone",L"cone x1 y1 z1 x2 y2 z2 r1 [r2 'fmt' edge]", mgls_cone, mglc_cone, false, 1}, {L"cont",L"Draw contour lines",L"cont Zdat ['fmt' num zpos]|Vdat Zdat ['fmt' zpos]|Xdat Ydat Zdat ['fmt' num zpos]|Vdat Xdat Ydat Zdat ['fmt' zpos]", mgls_cont, mglc_cont, false, 0}, @@ -3351,6 +3536,7 @@ mglCommand mgls_base_cmd[] = { {L"conty",L"Draw contour lines at y-slice (or y-plane)",L"conty Dat ['fmt' pos num]", mgls_conty, mglc_conty, false, 0}, {L"contz",L"Draw contour lines at z-slice (or z-plane)",L"contz Dat ['fmt' pos num]", mgls_contz, mglc_contz, false, 0}, {L"copy",L"Copy data from another variable",L"copy Dat1 Dat2 ['eq' onaxis]", mgls_copy, mglc_copy, true, 3}, + {L"cosfft",L"Cos-Fourier transform at some direction",L"cosfft Dat 'dir'", mgls_cosfft, mglc_cosfft, false, 3}, {L"crange",L"Set color range",L"crange Dat [sym] | c1 c2", mgls_crange, mglc_crange, false, 2}, {L"crop",L"Crop edge of data",L"crop Dat n1 n2 'dir'", mgls_crop, mglc_crop, false, 3}, {L"crust",L"Draw reconstructed surface for arbitrary data points",L"crust Xdat Ydat Zdat ['fmt']", mgls_crust, mglc_crust, false, 0}, @@ -3358,6 +3544,7 @@ mglCommand mgls_base_cmd[] = { {L"cumsum",L"Cumulative summation",L"cumsum Dat 'dir'", mgls_cumsum, mglc_cumsum, false, 3}, {L"curve",L"Draw curve",L"curve x1 y1 dx1 dy1 x2 y2 dx2 dy2 ['fmt']|x1 y1 z1 dx1 dy1 dz1 x2 y2 z2 dx2 dy2 dz2 ['fmt']", mgls_curve, mglc_curve, false, 1}, {L"cut",L"Setup plot points cutting",L"cut val|x1 y1 z1 x2 y2 z2|'cond'", mgls_cut, mglc_cut, false, 2}, + {L"delete",L"Delete slice of data",L"delete Dat 'dir' [pos=0 num=1]", mgls_delete, mglc_delete, false, 3}, {L"dens",L"Draw density plot",L"dens Zdat ['fmt' zpos]|Xdat Ydat Zdat ['fmt' zpos]", mgls_dens, mglc_dens, false, 0}, {L"dens3",L"Draw density plot at slices of 3D data",L"dens3 Adat 'dir' [pos 'fmt']|Xdat Ydat Zdat Adat 'dir' [pos 'fmt']", mgls_dens3, mglc_dens3, false, 0}, {L"densa",L"Draw density plot at central slices of 3D data",L"densa Adat ['fmt']|Xdat Ydat Zdat Adat ['fmt']", mgls_densa, mglc_densa, false, 0}, @@ -3381,6 +3568,7 @@ mglCommand mgls_base_cmd[] = { {L"fall",L"Draw waterfalls",L"fall Zdat ['fmt']|Xdat Ydat Zdat ['fmt']", mgls_fall, mglc_fall, false, 0}, {L"fgets",L"Print string from file",L"fgets x y z 'fname' [pos=0 'fmt' size]|x y z 'fname' [pos=0 'fmt' size]", mgls_fgets, mglc_fgets, false, 1}, {L"fill",L"Fill data linearly in range [v1, v2]",L"fill Var v1 v2 ['dir'] | Var 'eq' [Vdat Wdat]", mgls_fill, mglc_fill, false, 3}, + {L"fillsample",L"Fill x-,k-samples for transforms",L"fillsample Var num 'how'", mgls_fillsample, mglc_fillsample, false, 3}, {L"fit",L"Fit data to formula",L"fit Res A 'eq' 'var' [Ini]|Res X A 'eq' 'var' [Ini]|Res X Y A 'eq' 'var' [Ini]|Res X Y Z A 'eq' 'var' [Ini]", mgls_fit, mglc_fit, true, 3}, {L"fits",L"Fit data to formula",L"fits Res A S 'eq' 'var' [Ini]|Res X A S 'eq' 'var' [Ini]|Res X Y A S 'eq' 'var' [Ini]|Res X Y Z A S 'eq' 'var' [Ini]", mgls_fits, mglc_fits, true, 3}, {L"flow",L"Draw flow threads for vector field",L"flow Udat Vdat ['fmt' num zval]|Xdat Ydat Udat Vdat ['fmt' num zval]|Udat Vdat Wdat ['fmt' num]|Xdat Ydat Zdat Udat Vdat ['fmt' num]|\ @@ -3389,18 +3577,24 @@ mglCommand mgls_base_cmd[] = { {L"font",L"Setup font",L"font 'fmt' [size]", mgls_font, mglc_font, false, 2}, {L"fplot",L"Plot curve by formula",L"fplot 'y(x)' ['fmt' zval num]|'x(t)' 'y(t)' 'z(t)' ['fmt' num]", mgls_fplot, mglc_fplot, false, 1}, {L"fsurf",L"Plot surface by formula",L"fsurf 'z(x,y)' ['fmt' num]|'x(u,v)' 'y(u,v)' 'z(u,v)' ['fmt' num]", mgls_fsurf, mglc_fsurf, false, 1}, - {L"grid",L"Draw grid",L"grid ['dir' 'fmt']|Zdat ['fmt']|Xdat Ydat Zdat ['fmt']", mgls_grid, mglc_grid, false, 0}, + {L"grad",L"Draw gradient lines for scalar field",L"grad Phi ['fmt' num zval]|Xdat Ydat Phi ['fmt' num zval]|Xdat Ydat Zdat Phi ['fmt' num]", mgls_grad, mglc_grad, false, 0}, + {L"grid",L"Draw grid",L"grid ['dir' 'fmt']", mgls_grid, mglc_grid, false, 0}, + {L"grid2",L"Draw grid for data array(s)",L"grid Zdat ['fmt']|Xdat Ydat Zdat ['fmt']", mgls_grid2, mglc_grid2, false, 0}, {L"grid3",L"Draw grid at slices of 3D data",L"grid3 Adat 'dir' [pos 'fmt']|Xdat Ydat Zdat Adat 'dir' [pos 'fmt']", mgls_grid3, mglc_grid3, false, 0}, {L"grida",L"Draw grid at central slices of 3D data",L"grida Adat ['fmt']|Xdat Ydat Zdat Adat ['fmt']", mgls_grida, mglc_grida, false, 0}, + {L"hankel",L"Hankel transform at some direction",L"hankel Dat 'dir'", mgls_hankel, mglc_hankel, false, 3}, {L"hist",L"Create histogram (distribution) of data values",L"hist Res Dat num v1 v2 [nsub]|Res Dat Wdat num v1 v2 [nsub]", mgls_hist, mglc_hist, true, 3}, + {L"idset",L"Set column id for data",L"idset Dat 'ids'", mgls_idset, mglc_idset, false, 3}, {L"import",L"Import data from PNG picture",L"import Dat 'fname' 'scheme' [v1 v2]", mgls_import, mglc_import, true, 3}, {L"info",L"Print information about data",L"info Dat [detail]|'message'", mgls_info, mglc_info, false, 3}, {L"inplot",L"Set position of plot in picture",L"x1 x2 y1 y2 [rel]", mgls_inplot, mglc_inplot, false, 4}, + {L"insert",L"Insert slice of data",L"insert Dat 'dir' [pos=0 num=1]", mgls_insert, mglc_insert, false, 3}, {L"integrate",L"Integrate data",L"integrate Dat 'dir'", mgls_integrate, mglc_integrate, false, 3}, {L"jacobian",L"Get Jacobian",L"jacobian Res Xdat Ydat [Zdat]", mgls_jacobian, mglc_jacobian, true, 3}, {L"label",L"Draw label at arbitrary position",L"label x y 'txt' ['fmt' size]", mgls_label, mglc_label, false, 1}, {L"legend",L"Draw legend",L"legend [pos 'fmt' size llen]|x y ['fmt' size llen]", mgls_legend, mglc_legend, false, 1}, {L"legendbox",L"Switch on/off drawing box in legend",L"legendbox val", mgls_legendbox, mglc_legendbox, false, 2}, + {L"legendmarks",L"Set number of marks in the legend",L"legendmarks val", mgls_legendbox, mglc_legendbox, false, 2}, {L"light",L"Setup light",L"light [val] | val num | num xpos ypos zpos ['fmt' br]", mgls_light, mglc_light, false, 2}, {L"line",L"Draw line",L"line x1 y1 x2 y2 ['fmt']|x1 y1 z1 x2 y2 z2 ['fmt']", mgls_line, mglc_line, false, 1}, {L"linewidth",L"Set default line width",L"linewidth val", mgls_linewidth, mglc_linewidth, false, 2}, @@ -3429,6 +3623,7 @@ mglCommand mgls_base_cmd[] = { {L"put",L"Put value (numeric or array) to given data element",L"put Dat val [i j k] | Dat Val [i j k]", mgls_put, mglc_put, false, 3}, {L"putsfit",L"Print fitted formula",L"putsfit x y ['pre' 'font' size]|x y z ['pre' 'font' size]", mgls_putsfit, mglc_putsfit, false, 0}, {L"qo2d",L"Solve PDE in accompanied coordinates",L"qo2d Res 'ham' IniRe IniIm Ray [r k0 Xout Yout]", mgls_qo2d, mglc_qo2d, true, 3}, + {L"quadplot",L"Draw surface of quadrangles",L"quadplot Idat Xdat Ydat ['fmt']|Idat Xdat Ydat Zdat ['fmt']|Idat Xdat Ydat Zdat Cdat ['fmt'] ", mgls_quadplot, mglc_quadplot, false, 0}, {L"radar",L"Draw radar chart",L"radar Rdat ['fmt' r]", mgls_radar, mglc_radar, false, 0}, {L"ranges",L"Set axis ranges",L"ranges x1 x2 y1 y2 [z1 z2]", mgls_ranges, mglc_ranges, false, 2}, {L"ray",L"Solve Hamiltonian ODE (find GO ray or trajectory)",L"ray Res 'ham' x0 y0 z0 px0 py0 pz0 [dz=0.1 tmax=10]", mgls_ray, mglc_ray, true, 3}, @@ -3440,13 +3635,14 @@ mglCommand mgls_base_cmd[] = { {L"rect",L"Draw rectangle",L"rect x1 y1 x2 y2 ['fmt']|x1 y1 z1 x2 y2 z2 ['fmt']", mgls_rect, mglc_rect, false, 1}, {L"region",L"Draw filled region between 2 curves",L"region Ydat1 Ydat2 ['fmt' inside]|Xdat Ydat1 Ydat2 ['fmt' inside]", mgls_region, mglc_region, false, 0}, {L"resize",L"Resize data",L"resize Res Dat mx [my mz]", mgls_resize, mglc_resize, true, 3}, + {L"roll",L"Roll data along direction",L"roll Dat 'dir' num", mgls_roll, mglc_roll, false, 0}, {L"rotate",L"Rotate plot",L"rotate tetz tetx [tety] | tet x y z", mgls_rotate, mglc_rotate, false, 4}, {L"rotatetext",L"Set to auto rotate text or not",L"rotatetext val", mgls_rotatetext, mglc_rotatetext, false, 2}, {L"save",L"Save data to file",L"save Dat 'file'", mgls_save, mglc_save, false, 3}, {L"savehdf",L"Save data to HDF5 file",L"savehdf Dat 'file' 'id'", mgls_savehdf, mglc_savehdf, false, 3}, - {L"set_id",L"Set column id for data",L"set_id Dat 'ids'", mgls_set_id, mglc_set_id, false, 3}, {L"setsize",L"Set picture size",L"setsize width height", mgls_setsize, mglc_setsize, false, 5}, {L"sew",L"Remove jump into the data, like phase jumps",L"sew Dat ['dir' da]", mgls_sew, mglc_sew, false, 3}, + {L"sinfft",L"Sin-Fourier transform at some direction",L"sinfft Dat 'dir'", mgls_sinfft, mglc_sinfft, false, 3}, {L"smooth",L"Smooth data",L"smooth Dat [kind 'dir']", mgls_smooth, mglc_smooth, false, 3}, {L"sphere",L"Draw sphere",L"sphere x0 y0 r ['fmt']|x0 y0 z0 r ['fmt']", mgls_sphere, mglc_sphere, false, 1}, {L"squeeze",L"Squeeze data",L"squeeze Dat kx [ky kz]", mgls_squeeze, mglc_squeeze, false, 3}, @@ -3456,7 +3652,7 @@ mglCommand mgls_base_cmd[] = { {L"stfad",L"Do STFA transform",L"stfad Res Real Imag dn ['dir']", mgls_stfad, mglc_stfad, true, 3}, {L"stickplot",L"Set position of plot inside cell of stick", L"stickplot num ind tet phi", mgls_stickplot, mglc_stickplot, false, 4}, {L"subdata",L"Extract sub-array",L"subdata Res Dat nx [ny nz]", mgls_subdata, mglc_subdata, true, 3}, - {L"subplot",L"Set position of plot",L"subplot m n pos [dx dy]", mgls_subplot, mglc_subplot, false, 4}, + {L"subplot",L"Set position of plot",L"subplot m n pos [dx dy]|m n pos 'style'", mgls_subplot, mglc_subplot, false, 4}, {L"subto",L"Subtract data or number",L"subto Var Dat|Var num", mgls_subto, mglc_subto, false, 3}, {L"sum",L"Find summation over direction",L"sum Res Dat 'dir'", mgls_sum, mglc_sum, true, 3}, {L"surf",L"Draw solid surface",L"surf Zdat ['fmt']|Xdat Ydat Zdat ['fmt']", mgls_surf, mglc_surf, false, 0}, @@ -3472,7 +3668,8 @@ mglCommand mgls_base_cmd[] = { {L"textmark",L"Draw TeX mark at point position",L"textmark Ydat Rdat 'text' ['fmt' zval]|Xdat Ydat Rdat 'text' ['fmt' zval]|Xdat Ydat Zdat Rdat 'text' ['fmt']", mgls_textmark, mglc_textmark, false, 0}, {L"ticklen",L"Set tick length",L"ticklen val [stt]", mgls_ticklen, mglc_ticklen, false, 2}, {L"tickstl",L"Set tick style",L"tickstl 'stl' ['sub']", mgls_tickstl, mglc_tickstl, false, 2}, - {L"tile",L"Draw horizontal tiles",L"tile Zdat ['fmt']|Xdat Ydat Zdat ['fmt'] | Zdat Rdat ['fmt']|Xdat Ydat Zdat Rdat ['fmt']", mgls_tile, mglc_tile, false, 0}, + {L"tile",L"Draw horizontal tiles",L"tile Zdat ['fmt']|Xdat Ydat Zdat ['fmt']", mgls_tile, mglc_tile, false, 0}, + {L"tiles",L"Draw horizontal tiles with variable size",L"tiles Zdat Rdat ['fmt']|Xdat Ydat Zdat Rdat ['fmt']", mgls_tiles, mglc_tiles, false, 0}, {L"title",L"Print title for the picture",L"title 'text' ['fmt' size]", mgls_title, mglc_title, false, 1}, {L"tlabel",L"Draw label for t-axis",L"tlabel 'txt' [pos size shift]", mgls_tlabel, mglc_tlabel, false, 1}, {L"torus",L"Draw surface of curve rotation",L"torus Rdat ['fmt']|Zdat Rdat ['fmt']", mgls_torus, mglc_torus, false, 0}, @@ -3483,6 +3680,7 @@ mglCommand mgls_base_cmd[] = { {L"transparent",L"Switch off transparency",L"transparent val", mgls_transparent, mglc_transparent, false, 2}, //!!! OLD !!! {L"transpose",L"Transpose data array",L"transpose Dat ['dir']", mgls_transpose, mglc_transpose, false, 3}, {L"transptype",L"Set type transparency",L"transptype val", mgls_transptype, mglc_transptype, false, 2}, + {L"tricont",L"Draw contour lines for surface of triangles",L"tricont Vdat Idat Xdat Ydat ['fmt']|Vdat Idat Xdat Ydat Zdat ['fmt']|Vdat Idat Xdat Ydat Zdat Cdat ['fmt'] ", mgls_tricont, mglc_tricont, false, 0}, {L"triplot",L"Draw surface of triangles",L"triplot Idat Xdat Ydat ['fmt']|Idat Xdat Ydat Zdat ['fmt']|Idat Xdat Ydat Zdat Cdat ['fmt'] ", mgls_triplot, mglc_triplot, false, 0}, {L"tube",L"Draw curve by tube",L"tube Ydat Rdat ['fmt' zval]|Ydat rval ['fmt' zval]|Xdat Ydat Rdat ['fmt' zval]|Xdat Ydat rval ['fmt' zval]|Xdat Ydat Zdat Rdat ['fmt']|Xdat Ydat Zdat rval ['fmt']", mgls_tube, mglc_tube, false, 0}, {L"var",L"Create new 1D data and fill it in range",L"var Dat nx x1 [x2]", mgls_var, mglc_var, true, 3}, diff --git a/mgl/mgl_export.cpp b/mgl/mgl_export.cpp index 26b7a16..77dfcd5 100644 --- a/mgl/mgl_export.cpp +++ b/mgl/mgl_export.cpp @@ -21,6 +21,8 @@ #include #include #include +#include +#include #ifndef NO_PNG #include #endif @@ -213,9 +215,7 @@ int mgl_jpeg_save(const char *fname, int w, int h, unsigned char **p) cinfo.in_color_space = JCS_RGB; jpeg_set_defaults(&cinfo); jpeg_start_compress(&cinfo, TRUE); - - jpeg_write_scanlines(&cinfo, p, h); - + jpeg_write_scanlines(&cinfo, p, h); jpeg_finish_compress(&cinfo); jpeg_destroy_compress(&cinfo); fclose(outfile); @@ -223,26 +223,37 @@ int mgl_jpeg_save(const char *fname, int w, int h, unsigned char **p) return 0; } //----------------------------------------------------------------------------- +void mgl_printf(void *fp, bool gz, const char *str, ...) +{ + char buf[512]; + va_list lst; + va_start(lst,str); + vsprintf(buf,str,lst); + va_end(lst); + if(gz) gzprintf(fp, "%s", buf); + else fprintf((FILE *)fp, "%s", buf); +} +//--------------------------------------------------------------------------- int mgl_bps_save(const char *fname, int w, int h, unsigned char **p) { time_t now; time(&now); register long i,j; + bool gz = fname[strlen(fname)-1]=='z'; - FILE *fp = fopen(fname,"wt"); - fprintf(fp,"%%!PS-Adobe-3.0 EPSF-3.0\n%%%%BoundingBox: 0 0 %d %d\n",w,h); - fprintf(fp,"%%%%Creator: MathGL library\n%%%%Title: %s\n", fname); - fprintf(fp,"%%%%CreationDate: %s\n",ctime(&now)); -// fprintf(fp,"%%%%EndComments\n\n"); - fprintf(fp,"%d %d 8 [1 0 0 1 0 0] {currentfile %d string readhexstring pop} false 3 colorimage\n", + void *fp = gz ? gzopen(fname,"wt") : fopen(fname,"wt"); + mgl_printf(fp, gz, "%%!PS-Adobe-3.0 EPSF-3.0\n%%%%BoundingBox: 0 0 %d %d\n",w,h); + mgl_printf(fp, gz, "%%%%Creator: MathGL library\n%%%%Title: %s\n", fname); + mgl_printf(fp, gz, "%%%%CreationDate: %s\n",ctime(&now)); + mgl_printf(fp, gz, "%d %d 8 [1 0 0 1 0 0] {currentfile %d string readhexstring pop} false 3 colorimage\n", w,h,1+w*h/40); for(j=h-1;j>=0;j--) for(i=0;i0) fprintf(fp,"\n"); - fprintf(fp,"%02x%02x%02x",p[j][3*i],p[j][3*i+1],p[j][3*i+2]); + if((i+w*(h-j-1))%40==0 && i+j>0) mgl_printf(fp, gz, "\n"); + mgl_printf(fp, gz, "%02x%02x%02x",p[j][3*i],p[j][3*i+1],p[j][3*i+2]); } - fprintf(fp,"\n\nshowpage\n%%%%EOF\n"); - fclose(fp); + mgl_printf(fp, gz, "\n\nshowpage\n%%%%EOF\n"); + if(gz) gzclose(fp); else fclose((FILE *)fp); return 0; } //----------------------------------------------------------------------------- diff --git a/mgl/mgl_f.cpp b/mgl/mgl_f.cpp index e5c0d5f..e2cc35b 100644 --- a/mgl/mgl_f.cpp +++ b/mgl/mgl_f.cpp @@ -183,9 +183,12 @@ void mgl_set_ambbr_(uintptr_t *gr, mreal *i) //----------------------------------------------------------------------------- // Scale and rotate //----------------------------------------------------------------------------- +/// Push transformation matrix into stack. +void mgl_mat_push_(uintptr_t *gr) { _GR_->Push(); } +/// Pop transformation matrix into stack. +void mgl_mat_pop_(uintptr_t *gr) { _GR_->Pop(); } /// Clear transformation matrix. -void mgl_identity_(uintptr_t *gr, int *rel) -{ _GR_->Identity(*rel); } +void mgl_identity_(uintptr_t *gr, int *rel) { _GR_->Identity(*rel); } /// Clear up the frame void mgl_clf_(uintptr_t *gr) { _GR_->Clf(); } @@ -195,16 +198,20 @@ void mgl_clf_rgb_(uintptr_t *gr, mreal *r, mreal *g, mreal *b) /// Put further plotting in some region of whole frame surface. void mgl_subplot_(uintptr_t *gr, int *nx,int *ny,int *m) { _GR_->SubPlot(*nx,*ny,*m); } -/// Put further plotting in some region of whole frame surface. void mgl_subplot_d_(uintptr_t *gr, int *nx,int *ny,int *m,mreal *dx,mreal *dy) { _GR_->SubPlot(*nx,*ny,*m,*dx,*dy); } +void mgl_subplot_s_(uintptr_t *gr, int *nx,int *ny,int *m,const char *st,int l) +{ char *s=new char[l+1]; memcpy(s,st,l); s[l]=0; + _GR_->SubPlot(*nx,*ny,*m,s); delete []s; } /// Put further plotting in some region of whole frame surface. void mgl_inplot_(uintptr_t *gr, mreal *x1,mreal *x2,mreal *y1,mreal *y2) -{ _GR_->InPlot(*x1,*x2,*y1,*y2); } +{ _GR_->InPlot(*x1,*x2,*y1,*y2,false); } void mgl_relplot_(uintptr_t *gr, mreal *x1,mreal *x2,mreal *y1,mreal *y2) { _GR_->InPlot(*x1,*x2,*y1,*y2,true); } void mgl_columnplot_(uintptr_t *gr, int *num, int *i) { _GR_->ColumnPlot(*num,*i); } +void mgl_columnplot_d_(uintptr_t *gr, int *num, int *i, mreal *d) +{ _GR_->ColumnPlot(*num,*i,*d); } void mgl_stickplot_(uintptr_t *gr, int *num, int *i, mreal *tet, mreal *phi) { _GR_->StickPlot(*num, *i, *tet, *phi); } /// Set aspect ratio for further plotting. @@ -460,6 +467,8 @@ void mgl_legend_(uintptr_t *gr, int *where, const char *font, mreal *size, mreal } void mgl_set_legend_box_(uintptr_t *gr, int *enable) { _GR_->LegendBox = *enable; } +void mgl_set_legend_marks_(uintptr_t *gr, int *num) +{ _GR_->SetLegendMarks(*num); } //----------------------------------------------------------------------------- const unsigned char *mgl_get_rgb_(uintptr_t *graph) { @@ -507,6 +516,52 @@ void mgl_calc_scr_(uintptr_t *gr, mreal *x, mreal *y, mreal *z, int *xs, int *ys if(g) g->CalcScr(mglPoint(*x,*y,*z),xs,ys); } //----------------------------------------------------------------------------- +void mgl_wnd_set_delay_(uintptr_t *gr, mreal *dt) +{ mglGraphAB *g = dynamic_cast((mglGraph *)(*gr)); + if(g) g->Delay = *dt; } +void mgl_wnd_set_auto_clf_(uintptr_t *gr, int *val) +{ mglGraphAB *g = dynamic_cast((mglGraph *)(*gr)); + if(g) g->AutoClf = *val; } +void mgl_wnd_set_show_mouse_pos_(uintptr_t *gr, int *val) +{ mglGraphAB *g = dynamic_cast((mglGraph *)(*gr)); + if(g) g->ShowMousePos = *val; } +void mgl_wnd_set_clf_update_(uintptr_t *gr, int *val) +{ mglGraphAB *g = dynamic_cast((mglGraph *)(*gr)); + if(g) g->ClfOnUpdate = *val; } +void mgl_wnd_toggle_alpha_(uintptr_t *gr) +{ mglGraphAB *g = dynamic_cast((mglGraph *)(*gr)); + if(g) g->ToggleAlpha(); } +void mgl_wnd_toggle_light_(uintptr_t *gr) +{ mglGraphAB *g = dynamic_cast((mglGraph *)(*gr)); + if(g) g->ToggleLight(); } +void mgl_wnd_toggle_zoom_(uintptr_t *gr) +{ mglGraphAB *g = dynamic_cast((mglGraph *)(*gr)); + if(g) g->ToggleZoom(); } +void mgl_wnd_toggle_rotate_(uintptr_t *gr) +{ mglGraphAB *g = dynamic_cast((mglGraph *)(*gr)); + if(g) g->ToggleRotate(); } +void mgl_wnd_toggle_no_(uintptr_t *gr) +{ mglGraphAB *g = dynamic_cast((mglGraph *)(*gr)); + if(g) g->ToggleNo(); } +void mgl_wnd_update_(uintptr_t *gr) +{ mglGraphAB *g = dynamic_cast((mglGraph *)(*gr)); + if(g) g->Update(); } +void mgl_wnd_reload_(uintptr_t *gr, int *o) +{ mglGraphAB *g = dynamic_cast((mglGraph *)(*gr)); + if(g) g->ReLoad(*o); } +void mgl_wnd_adjust_(uintptr_t *gr) +{ mglGraphAB *g = dynamic_cast((mglGraph *)(*gr)); + if(g) g->Adjust(); } +void mgl_wnd_next_frame_(uintptr_t *gr) +{ mglGraphAB *g = dynamic_cast((mglGraph *)(*gr)); + if(g) g->NextFrame(); } +void mgl_wnd_prev_frame_(uintptr_t *gr) +{ mglGraphAB *g = dynamic_cast((mglGraph *)(*gr)); + if(g) g->PrevFrame(); } +void mgl_wnd_animation_(uintptr_t *gr) +{ mglGraphAB *g = dynamic_cast((mglGraph *)(*gr)); + if(g) g->Animation(); } +//----------------------------------------------------------------------------- mreal mgl_data_get_value_(uintptr_t *d, int *i, int *j, int *k) { return _DT_->a[*i+_DT_->nx*(*j+*k*_DT_->ny)]; } void mgl_data_set_value_(uintptr_t *d, mreal *v, int *i, int *j, int *k) @@ -581,4 +636,5 @@ void mgl_set_tick_stl_(uintptr_t *gr, const char *stl, const char *sub, int l, i _GR_->SetTickStl(t,s); delete []s; delete []t; } +int mgl_get_warn_(uintptr_t *gr) { return _GR_->WarnCode; } //----------------------------------------------------------------------------- diff --git a/mgl/mgl_flow.cpp b/mgl/mgl_flow.cpp index 1f61cac..419de75 100644 --- a/mgl/mgl_flow.cpp +++ b/mgl/mgl_flow.cpp @@ -106,7 +106,8 @@ void mglGraph::Flow(const mglData &x, const mglData &y, const mglData &ax, const Arrow1 = Arrow2 = '_'; SetScheme(sch); // allocate memory - if(isnan(zVal)) zVal = Min.z; + if(isnan(zVal)) zVal = Min.z; + cnt=(num>0); num = abs(num); // redefine central parater for(long k=0;k0); num = abs(num); // redefine central parater + Arrow1 = Arrow2 = '_'; SetScheme(sch); @@ -449,6 +451,53 @@ void mglGraph::FlowP(mglPoint p, const mglData &ax, const mglData &ay, const mgl } //----------------------------------------------------------------------------- // +// Grad series +// +//----------------------------------------------------------------------------- +void mglGraph::Grad(const mglData &x, const mglData &y, const mglData &z, const mglData &phi, const char *sch, int num) +{ + mglData ax(phi), ay(phi),az(phi),xx(phi),yy(phi),zz(phi); + long nn = phi.nx*phi.ny*phi.nz; + if(x.nx*x.ny*x.nz==nn && y.nx*y.ny*y.nz==nn && x.nx*x.ny*x.nz==nn) + { xx = x; yy = y; zz = z; } // nothing to do + else if(x.nx==phi.nx && y.nx==phi.ny && z.nx==phi.nz) + { // prepare data + register long i,j,k,i0; + for(i=0;i0); +} +//----------------------------------------------------------------------------- +void mglGraph::Grad(const mglData &x, const mglData &y, const mglData &phi, const char *sch, int num, mreal zVal) +{ + mglData ax(phi), ay(phi),xx(phi),yy(phi); + long nn = phi.nx*phi.ny; + if(x.nx*x.ny==nn && y.nx*y.ny==nn) { xx = x; yy = y; } + else if(x.nx==phi.nx && y.nx==phi.ny) + { + register long i,j,i0; + for(i=0;i0,zVal); +} +//----------------------------------------------------------------------------- +void mglGraph::Grad(const mglData &phi, const char *sch, int num, mreal zVal) +{ + mglData x(phi.nx), y(phi.ny), z(phi.nz); + x.Fill(Min.x,Max.x); y.Fill(Min.y,Max.y); z.Fill(Min.z,Max.z); + if(phi.nz>2) Grad(x,y,z,phi,sch,num?num:3); + else Grad(x,y,phi,sch,num?num:5,zVal); +} +//----------------------------------------------------------------------------- +// // Pipe series // //----------------------------------------------------------------------------- @@ -534,7 +583,8 @@ void mglGraph::Pipe(const mglData &x, const mglData &y, const mglData &ax, const SetScheme(sch); // allocate memory if(isnan(zVal)) zVal = Min.z; - + cnt=(num>0); num = abs(num); + for(long k=0;k1) zVal = Min.z+(Max.z-Min.z)*mreal(k)/(ax.nz-1); @@ -672,7 +722,8 @@ void mglGraph::Pipe(const mglData &x, const mglData &y, const mglData &z, const Arrow1 = Arrow2 = '_'; SetScheme(sch); - + cnt=(num>0); num = abs(num); + for(i=0;iPipe(*ax, *ay, *az, sch, r0, num, central); } //----------------------------------------------------------------------------- +/// The gradient of the scalar field +void mgl_grad_xyz(HMGL gr, const HMDT x, const HMDT y, const HMDT z, const HMDT ph, const char *sch, int num) +{ if(gr&&x&&y&&z&&ph) gr->Grad(*x,*y,*z,*ph,sch,num); } +void mgl_grad_xy(HMGL gr, const HMDT x, const HMDT y, const HMDT ph, const char *sch, int num, mreal zVal) +{ if(gr&&x&&y&&ph) gr->Grad(*x,*y,*ph,sch,num,zVal); } +void mgl_grad(HMGL gr, const HMDT ph, const char *sch, int num, mreal zVal) +{ if(gr&&ph) gr->Grad(*ph,sch,num,zVal); } +//----------------------------------------------------------------------------- // Fortran interface //----------------------------------------------------------------------------- /// Plot flows for vector field {ax,ay} parametrically depended on coordinate {x,y} with color proportional to value |a| @@ -862,3 +921,26 @@ void mgl_pipe_3d_(uintptr_t *gr, uintptr_t *ax, uintptr_t *ay, uintptr_t *az, co delete []s; } //----------------------------------------------------------------------------- +/// Plot gradient for scalar field ph parametrically depended on coordinate {x,y} with color proportional to value |a| +void mgl_grad_xy_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *ph, const char *sch, + int *num, mreal *zVal,int l) +{ + char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; + if(gr && ph && x && y) _GR_->Grad(_D_(x), _D_(y), _D_(ph), s, *num, *zVal); + delete []s; +} +void mgl_grad_xyz_(uintptr_t *gr, uintptr_t *x, uintptr_t *y, uintptr_t *z, uintptr_t *ph, const char *sch, + int *num, int l) +{ + char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; + if(gr && ph && x && y && z) _GR_->Grad(_D_(x), _D_(y), _D_(z), _D_(ph), s, *num); + delete []s; +} +/// Plot flows for vector field {ax,ay} with color proportional to value |a| +void mgl_grad_(uintptr_t *gr, uintptr_t *ph, const char *sch, int *num, mreal *zVal,int l) +{ + char *s=new char[l+1]; memcpy(s,sch,l); s[l]=0; + if(gr && ph) _GR_->Flow(_D_(ph), s, *num, *zVal); + delete []s; +} +//----------------------------------------------------------------------------- diff --git a/mgl/mgl_font.cpp b/mgl/mgl_font.cpp index 2c94b11..b92712c 100644 --- a/mgl/mgl_font.cpp +++ b/mgl/mgl_font.cpp @@ -21,6 +21,8 @@ #include #include #include +#include +#include #ifdef WIN32 #include @@ -89,7 +91,7 @@ mreal mglFont::Puts(const wchar_t *str,const char *how, char col) if(strchr(how,'w')) font = font|MGL_FONT_WIRE; if(strchr(how,'o')) font = font|MGL_FONT_OLINE; if(strchr(how,'u')) font = font|MGL_FONT_ULINE; - } + } return Puts(str, font, align,col); } //----------------------------------------------------------------------------- @@ -271,8 +273,9 @@ unsigned mglFont::Parse(const wchar_t *s) else if(!wcscmp(s,L"underset")) res = unsigned(-9); else if(!wcscmp(s,L"stackr")) res = unsigned(-10); else if(!wcscmp(s,L"stackl")) res = unsigned(-11); - else if(!wcscmp(s,L"sub")) res = unsigned(-12); // new - else if(!wcscmp(s,L"sup")) res = unsigned(-13); // new + else if(!wcscmp(s,L"sub")) res = unsigned(-12); + else if(!wcscmp(s,L"sup")) res = unsigned(-13); + else if(!wcscmp(s,L"textsc")) res = unsigned(-14); // new else if(!wcscmp(s,L"b")) res = MGL_FONT_BOLD; else if(!wcscmp(s,L"i")) res = MGL_FONT_ITAL; else if(!wcscmp(s,L"bi")) res = MGL_FONT_BOLD|MGL_FONT_ITAL; @@ -369,7 +372,8 @@ void mglFont::draw_ouline(mglGraph *gr, int st, mreal x, mreal y, mreal f, mreal if(st&MGL_FONT_ULINE) gr->Glyph(x,y-200*f/g, ww*g, (st&MGL_FONT_WIRE)?12:8, 0, ccol); } -//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +#define MGL_CLEAR_STYLE {st = style; yy = y; ff = f; ccol=col; a = (st/MGL_FONT_BOLD)&3;} mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char col) { if(numg==0) return 0; @@ -402,7 +406,7 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char ww = Puts(b1, x, yy, ff, (st&(~MGL_FONT_OLINE)&(~MGL_FONT_ULINE)), ccol); if(gr && !(style&0x10)) // add under-/over- line now draw_ouline(gr,st,x,y,f,fact[a],ww,ccol); - st = style; yy = y; ff = f; // clear style modification + MGL_CLEAR_STYLE } else if(s==unsigned(-9)) // underset { @@ -411,7 +415,7 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char Puts(b2, x+(ww-w2)/2, yy-150*ff/fact[a], ff/4, (st&(~MGL_FONT_OLINE)&(~MGL_FONT_ULINE)), ccol); if(gr && !(style&0x10)) // add under-/over- line now draw_ouline(gr,st,x,y,f,fact[a],ww,ccol); - st = style; yy = y; ff = f; // clear style modification + MGL_CLEAR_STYLE } else if(s==unsigned(-8)) // overset { @@ -420,7 +424,7 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char Puts(b2, x+(ww-w2)/2, yy+375*ff/fact[a], ff/4, (st&(~MGL_FONT_OLINE)&(~MGL_FONT_ULINE)), ccol); if(gr && !(style&0x10)) // add under-/over- line now draw_ouline(gr,st,x,y,f,fact[a],ww,ccol); - st = style; yy = y; ff = f; // clear style modification + MGL_CLEAR_STYLE } else if(s==unsigned(-12)) // sub { @@ -429,7 +433,7 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char Puts(b2, x+(ww-w2)/2, yy-250*ff/fact[a], ff/4, (st&(~MGL_FONT_OLINE)&(~MGL_FONT_ULINE)), ccol); if(gr && !(style&0x10)) // add under-/over- line now draw_ouline(gr,st,x,y,f,fact[a],ww,ccol); - st = style; yy = y; ff = f; // clear style modification + MGL_CLEAR_STYLE } else if(s==unsigned(-13)) // sup { @@ -438,7 +442,7 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char Puts(b2, x+(ww-w2)/2, yy+450*ff/fact[a], ff/4, (st&(~MGL_FONT_OLINE)&(~MGL_FONT_ULINE)), ccol); if(gr && !(style&0x10)) // add under-/over- line now draw_ouline(gr,st,x,y,f,fact[a],ww,ccol); - st = style; yy = y; ff = f; // clear style modification + MGL_CLEAR_STYLE } else if(s==unsigned(-11)) // stackl { @@ -447,7 +451,7 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char Puts(b2, x, yy-110*ff/fact[a], ff*0.45, (st&(~MGL_FONT_OLINE)&(~MGL_FONT_ULINE)), ccol); if(gr && !(style&0x10)) // add under-/over- line now draw_ouline(gr,st,x,y,f,fact[a],ww,ccol); - st = style; yy = y; ff = f; // clear style modification + MGL_CLEAR_STYLE } else if(s==unsigned(-10)) // stacr { @@ -456,7 +460,7 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char Puts(b2, x+(ww-w2), yy-110*ff/fact[a], ff*0.45, (st&(~MGL_FONT_OLINE)&(~MGL_FONT_ULINE)), ccol); if(gr && !(style&0x10)) // add under-/over- line now draw_ouline(gr,st,x,y,f,fact[a],ww,ccol); - st = style; yy = y; ff = f; // clear style modification + MGL_CLEAR_STYLE } else if(s==unsigned(-7)) // stack { @@ -465,7 +469,7 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char Puts(b2, x+(ww-w2)/2, yy-110*ff/fact[a], ff*0.45, (st&(~MGL_FONT_OLINE)&(~MGL_FONT_ULINE)), ccol); if(gr && !(style&0x10)) // add under-/over- line now draw_ouline(gr,st,x,y,f,fact[a],ww,ccol); - st = style; yy = y; ff = f; // clear style modification + MGL_CLEAR_STYLE } else if(s==unsigned(-6)) // frac { @@ -477,10 +481,20 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char draw_ouline(gr,st,x,y,f,fact[a],ww,ccol); gr->Glyph(x,y+150*f/fact[a], ww*fact[a], (st&MGL_FONT_WIRE)?12:8, 0, ccol); } - st = style; yy = y; ff = f; // clear style modification + MGL_CLEAR_STYLE + } + else if(s==unsigned(-4)) MGL_CLEAR_STYLE // should be never here but if I miss sth ... + else if(s==unsigned(-14)) // script symbols + { + register long j,k=1; + if(str[i+1]==unsigned(-3)) for(j=i+2;k>0 && str[j];j++) + { + if(str[j]==unsigned(-3)) k++; + if(str[j]==unsigned(-4)) k--; + if(iswlower(str[j])) + str[j] = MGL_FONT_UPPER|MGL_FONT_LOWER|towupper(str[j]); + } } - else if(s==unsigned(-4)) // should be never here but if I miss sth ... - continue; else if(s==unsigned(-5)) // large symbol ff *= 1.5; else if(s==unsigned(-1)) // set normal font @@ -498,10 +512,8 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char if(j==-1) continue; if(gr && !(style&0x10)) { - if(st & MGL_FONT_WIRE) - gr->Glyph(x,yy,ff,a+4,j,ccol); - else - gr->Glyph(x,yy,ff,a,j,ccol); + if(st & MGL_FONT_WIRE) gr->Glyph(x,yy,ff,a+4,j,ccol); + else gr->Glyph(x,yy,ff,a,j,ccol); } } else @@ -510,7 +522,7 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char if(gr && !(style&0x10)) // add under-/over- line now draw_ouline(gr,st,x,y,f,fact[a],ww,ccol); if(s & MGL_FONT_ZEROW) ww = 0; - st = style; yy = y; ff = f; ccol=col; // clear style modification + MGL_CLEAR_STYLE } // apply new styles if(s/MGL_FONT_BOLD) st = st | (s & MGL_FONT_STYLE); @@ -518,10 +530,9 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char ss = (s/MGL_FONT_UPPER)%4; if(ss) { - if(ss==1) yy += 200*ff/fact[a]; // = 500*0.4 - else if(ss==2) yy -= 80*ff/fact[a]; // = -500*0.16 - else if(ss==3) yy += 60*ff/fact[a]; // = 500*0.12 - ff *=0.6; + if(ss==1) { ff *=0.6; yy += 200*ff/fact[a]; } // = 500*0.4 + else if(ss==2) { ff *=0.6; yy -= 80*ff/fact[a]; } // = -500*0.16 + else if(ss==3) { ff *=0.8; yy += 0*60*ff/fact[a]; } // = 500*0.12 } } x += ww; w += ww; @@ -530,32 +541,6 @@ mreal mglFont::Puts(const unsigned *text, mreal x,mreal y,mreal f,int style,char return w; } //----------------------------------------------------------------------------- -void mglFont::read_data(FILE *fp, mreal *ff, short *wdt, short *numl, - unsigned *posl, short *numt, unsigned *post, unsigned &cur) -{ - char str[256]; - int tmpw, tmpnl, tmpnt; - unsigned s,i,n, tmpi, tmppl, tmppt; - long j; - - fgets(str,256,fp); // first string is comment (not used) - fgets(str,256,fp); // second string have information - sscanf(str, "%u%f%d", &n, ff, &s); - buf = (short *)realloc(buf, (cur+s)*sizeof(short)); // prealocate buffer - - for(i=0;i': + s = s*1.1; + glBegin(GL_LINE_LOOP); + glVertex3f(x-s/2,y-s,z); glVertex3f(x-s/2,y+s,z); + glVertex3f(x+s,y,z); glEnd(); break; + case 'L': + s = s*1.1; + glBegin(GL_TRIANGLES); + glVertex3f(x+s/2,y-s,z); glVertex3f(x+s/2,y+s,z); + glVertex3f(x-s,y,z); glEnd(); break; + case '<': + s = s*1.1; + glBegin(GL_LINE_LOOP); + glVertex3f(x+s/2,y-s,z); glVertex3f(x+s/2,y+s,z); + glVertex3f(x-s,y,z); glEnd(); break; + case 'S': glBegin(GL_QUADS); glVertex3f(x-s,y-s,z); glVertex3f(x+s,y-s,z); @@ -414,3 +443,69 @@ void mglGraphGL::InPlot(mreal x1,mreal x2,mreal y1,mreal y2,bool rel) glTranslated(-0.5,-0.5,-0.5); } //----------------------------------------------------------------------------- +void mglGraphGL::Glyph(mreal x, mreal y, mreal f, int s, long j, char col) +{ + int ss=s&3; + mreal p[12]; + f /= fnt->GetFact(ss); + mglColor cc = mglColor(col); + if(!cc.Valid()) cc = mglColor(CDef[0],CDef[1],CDef[2]); + glColor4f(cc.r,cc.g,cc.b,CDef[3]); + if(s&8) + { + mreal dy = 0.004; + if(s&4) glBegin(GL_LINE_LOOP); + else glBegin(GL_QUADS); + p[2]=p[5]=p[8]=p[11]=0; + p[0]=p[6]=x; p[1]=p[4] =y+dy; + p[3]=p[9]=fabs(f)+x; p[7]=p[10]=y-dy; + PostScale(p,4); + glVertex3f(p[0],p[1],p[2]); glVertex3f(p[3],p[4],p[5]); + glVertex3f(p[9],p[10],p[11]); glVertex3f(p[6],p[7],p[8]); + glEnd(); + } + else if(s&4) + { + const short *line = fnt->GetLn(ss,j); + long ik,ii,il=0, nl=fnt->GetNl(ss,j); + if(!line || nl<=0) return; + glBegin(GL_LINES); + for(ik=0;ikGetTr(ss,j); + register long ik,ii, nt=fnt->GetNt(ss,j); + if(!trig || nt<=0) return; + glBegin(GL_TRIANGLES); + for(ik=0;ik * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU Library General Public License as * - * published by the Free Software Foundation; either version 3 of the * - * License, or (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU Library General Public * - * License along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - ***************************************************************************/ -#include -#include -#include -#include - -#ifdef WITH_LTDL -#include -#endif - -// Maximum number or registered handlers -#define MAXCOUNT 255 - -// Return Codes -#define IO_OK 0 -#define IO_TOO_MANY_HANDLERS 1 -#define IO_SAVE_LOAD_PTRS_DIFFER 2 -#define IO_COUNTER_ERROR 3 -#define IO_CANT_SET_SEARCH_PATH 4 -#define IO_CANT_FIND_MODULE 5 -#define IO_LOAD_HANDLER_NOTFOUND 6 -#define IO_SAVE_HANDLER_NOTFOUND 7 -#define IO_UNLOAD_MODULE 8 -#define IO_UNKNOWN_HANDLERS 9 -#define IO_SAVE_ERROR 10 -#define IO_LOAD_ERROR 10 - -int mgl_bmp_save(const char *fname, int w, int h, unsigned char **p); -int mgl_png_save(const char *fname, int w, int h, unsigned char **p); -int mgl_pnga_save(const char *fname, int w, int h, unsigned char **p); -int mgl_png_load(const char *fname, mgl_save func); -//---------------------------------------------------------------------------- -int mglIO::pRegister(const char *nDesc, int cExt, const char **type, mgl_load nptrLoad, mgl_save nptrSave, void* nltHandle, const char *nModuleName) -{ - mglModule temp; - temp.Desc=nDesc; - temp.countExt=cExt; - temp.Ext=type; - temp.ptrLoad=nptrLoad; - temp.ptrSave=nptrSave; - temp.ltHandle=nltHandle; - temp.Name=nModuleName; - mymod.push_back(temp); - return IO_OK; -} -//---------------------------------------------------------------------------- -int mglIO::Register(const char *nDesc, const int cExt, const char **type, - mgl_load nptrLoad, mgl_save nptrSave, const char *nModuleName) -{ - return pRegister(nDesc,cExt,type,nptrLoad,nptrSave,NULL,nModuleName); -} -//---------------------------------------------------------------------------- -#ifdef WITH_LTDL -int mglIO::Register(const char *nDesc, int cExt, const char **type, - const char *nModuleName, const char *Path) -{ - lt_dlhandle module=NULL; - mgl_load nptrLoad; - mgl_save nptrSave; - lt_dlinit(); - if(strlen(Path)!=0){ - if(lt_dladdsearchdir(Path)!=0){ -// printf("path %s\n",lt_dlgetsearchpath()); - return IO_CANT_SET_SEARCH_PATH; - } - } - module=lt_dlopenext(nModuleName); - if(module==NULL) - return IO_CANT_FIND_MODULE; - nptrSave=(mgl_save)lt_dlsym(module, "save"); - if(nptrSave==NULL){ -// printf("save not found\n"); - lt_dlclose(module); - return IO_SAVE_HANDLER_NOTFOUND; - } - nptrLoad=(mgl_load)lt_dlsym(module, "load"); - if(nptrLoad==NULL){ - lt_dlclose(module); - return IO_LOAD_HANDLER_NOTFOUND; - } - return pRegister(nDesc,cExt,type,nptrLoad,nptrSave,(void*)module,nModuleName); -} -#endif -//---------------------------------------------------------------------------- -int mglIO::punRegister(int offset) -{ - if(mymod.size()==0) - return IO_COUNTER_ERROR; - if(mymod[offset].ltHandle!=NULL){ -#ifdef WITH_LTDL - if(!lt_dlclose((lt_dlhandle)(mymod[offset].ltHandle))) - { -#endif - return IO_UNLOAD_MODULE; -#ifdef WITH_LTDL - } - lt_dlexit();} -#endif - delete[] mymod[offset].Ext; - mymod.erase(mymod.begin()+offset); - return IO_OK; -} -//---------------------------------------------------------------------------- -int mglIO::unRegister(mgl_load nptrLoad, mgl_save nptrSave) -{ - int posLoad=-1; - int posSave=-1; - for(unsigned int i=0; i=0;i--) fwrite(p[i],3*w,1,fp); - register int i,j; - for(i=h-1;i>=0;i--) for(j=0;j #include "mgl/mgl.h" #include "mgl/mgl_eval.h" -#ifndef MGL_DEF_VIEWER -//#define MGL_DEF_VIEWER "kuickshow" -#define MGL_DEF_VIEWER "gthumb" -//#define MGL_DEF_VIEWER "gwenview"; -#endif //----------------------------------------------------------------------------- const char *mglWarn[mglWarnEnd] = {"%s: data dimension(s) is incompatible", "%s: data dimension(s) is too small", @@ -240,7 +235,7 @@ void mglGraph::SetScheme(const char *s, bool face) if(s[0]==0) return; strcpy(last_style, s); NumCol = 0; - for(i=0;i=NUM_COLOR) break; + if(NumCol>=MGL_CMAP_COLOR) break; } else { @@ -263,7 +258,7 @@ void mglGraph::SetScheme(const char *s, bool face) { cmap[NumCol].Set(s[i]); NumCol++; - if(NumCol>=NUM_COLOR) break; + if(NumCol>=MGL_CMAP_COLOR) break; } } } @@ -420,8 +415,8 @@ char mglGraph::SelectPen(const char *p) { // strcpy(last_style, p); const char *col = "wkrgbcymhRGBCYMHWlenuqpLENUQP"; - const char *stl = " -|;:ji"; - const char *mrk = "*o+xsd.^v"; + const char *stl = " -|;:ji="; + const char *mrk = "*o+xsd.^v<>"; const char *wdh = "123456789"; const char *arr = "AKDTVISO_"; for(unsigned i=0;i') mk = 'R'; + if(mk=='*') mk = 'Y'; } } Pen(c, st, BaseLineWidth*w); @@ -458,7 +459,8 @@ char mglGraph::SelectPen(const char *p) //----------------------------------------------------------------------------- void mglGraph::SetPal(const char *colors) { - if(!colors || !colors[0]) colors = DefPal; // restore default + if(!colors || !colors[0]) // restore default if only 1 color + { if(NumPal<2) colors = DefPal; else return; } memset(Pal,0,100*sizeof(mglColor)); memset(PalNames,0,101*sizeof(char)); int i,n = strlen(colors),k; @@ -469,7 +471,7 @@ void mglGraph::SetPal(const char *colors) PalNames[k] = colors[i]; Pal[k] = mglColor(colors[i]); k++; } NumPal = k; // CurrPal = 0; - if(k==0) SetPal(0); // if no colors then set default palette + if(k<1) SetPal(0); // if no colors then set default palette } //----------------------------------------------------------------------------- mglColor mglGraph::GetPal() @@ -489,7 +491,35 @@ void mglGraph::SubPlot(int nx,int ny,int m, mreal dx, mreal dy) else { dx /= 2; dy /= 2; } x1 = (mx+dx)/nx; x2 = (mx+1+dx)/nx; y2 = 1.f-(my+dy)/ny; y1 = 1.f-(my+1+dy)/ny; - InPlot(x1,x2,y1,y2); + InPlot(x1,x2,y1,y2,false); +} +//----------------------------------------------------------------------------- +void mglGraph::SubPlot(int nx,int ny,int m, const char *style) +{ + mreal x1,x2,y1,y2; + int mx = m%nx, my = m/nx; + x1 = float(mx)/nx; x2 = float(mx+1)/nx; + y2 = 1.f-float(my)/ny; y1 = 1.f-float(my+1)/ny; + InPlot(x1,x2,y1,y2,style); +} +//----------------------------------------------------------------------------- +void mglGraph::InPlot(mreal x1,mreal x2,mreal y1,mreal y2, const char *st) +{ + if(!st) { InPlot(x1,x2,y1,y2,false); return; } + if(strchr(st,'T')) { y1*=0.9; y2*=0.9; } // general title + bool r = !(strchr(st,'r') || strchr(st,'R') || strchr(st,'>') || strchr(st,'g')); + bool l = !(strchr(st,'l') || strchr(st,'L') || strchr(st,'<') || strchr(st,'g')); + bool u = !(strchr(st,'u') || strchr(st,'U') || strchr(st,'_') || strchr(st,'g')); + bool a = !(strchr(st,'a') || strchr(st,'A') || strchr(st,'^') || strchr(st,'g') || strchr(st,'t')); + // let use simplified scheme -- i.e. no differences between axis, colorbar and/or title + register mreal xs=(x1+x2)/2, ys=(y1+y2)/2, f1 = 1.3, f2 = 1.1; + if(r && l) { x2=xs+(x2-xs)*f1; x1=xs+(x1-xs)*f1; } + else if(r) { x2=xs+(x2-xs)*f1; x1=xs+(x1-xs)*f2; } + else if(l) { x2=xs+(x2-xs)*f2; x1=xs+(x1-xs)*f1; } + if(a && u) { y2=ys+(y2-ys)*f1; y1=ys+(y1-ys)*f1; } + else if(a) { y2=ys+(y2-ys)*f1; y1=ys+(y1-ys)*f2; } + else if(u) { y2=ys+(y2-ys)*f2; y1=ys+(y1-ys)*f1; } + InPlot(x1,x2,y1,y2,false); } //----------------------------------------------------------------------------- void mglGraph::Printf(mglPoint p,const char *str,...) @@ -556,8 +586,9 @@ void mglGraph::ClearEq() //----------------------------------------------------------------------------- void mglGraph::DefaultPlotParam() { + LegendMarks = 1; FontSize = 5; BaseLineWidth = 1; - Ambient(); Ternary(false); + Ambient(); Ternary(0); PlotId = "frame"; SelectPen("k-1"); SetScheme("BbcyrR"); SetPalette(MGL_DEF_PAL); SetTicks('x'); SetTicks('y'); SetTicks('z'); SetTicks('c'); @@ -587,7 +618,7 @@ void mglGraph::DefaultPlotParam() for(int i=0;i<10;i++) { Light(i, mglPoint(0,0,1)); Light(i,false); } Light(0,true); Light(false); - InPlot(0,1,0,1); Zoom(0,0,1,1); + InPlot(0,1,0,1,false); Zoom(0,0,1,1); } //----------------------------------------------------------------------------- void mglGraph::SetTickStl(const char *stl, const char *sub) @@ -848,12 +879,12 @@ void mglGraph::SetFont(mglFont *f) //----------------------------------------------------------------------------- void mglGraph::Title(const wchar_t *str,const char *font,mreal size) { - Identity(); + Push(); Identity(); mglFormula *ox=fx, *oy=fy, *oz=fz; fx = fy = fz = NULL; Text(mglPoint((Min.x+Max.x)*0.5, Max.y+(Max.y-Min.y)*0.15, (Min.z+Max.z)*0.5), str, font, size); fx=ox; fy=oy; fz=oz; - RestoreM(); + Pop(); } //----------------------------------------------------------------------------- void mglGraph::Title(const char *str,const char *font,mreal size) @@ -867,7 +898,7 @@ void mglGraph::Title(const char *str,const char *font,mreal size) //----------------------------------------------------------------------------- void mglGraph::Labelw(mreal x, mreal y, const wchar_t *text, const char *fnt, mreal size, bool rel) { - Identity(rel); + Push(); Identity(rel); mglFormula *ox=fx, *oy=fy, *oz=fz; fx = fy = fz = NULL; char *f = new char[strlen(fnt)+1]; @@ -878,7 +909,7 @@ void mglGraph::Labelw(mreal x, mreal y, const wchar_t *text, const char *fnt, mr Max.z), text, f, size); delete []f; fx=ox; fy=oy; fz=oz; - RestoreM(); + Pop(); } //----------------------------------------------------------------------------- void mglGraph::Label(mreal x, mreal y, const char *str, const char *fnt, mreal size, bool rel) @@ -1039,7 +1070,7 @@ void mglGraph::ShowImage(const char *viewer, bool keep) if(keep) { sprintf(cmd,"%s %s &", viewer,fname); - system(cmd); + if(system(cmd)==-1) printf("Error to call external viewer\n"); #ifdef WIN32 // sleep(2); sprintf(cmd,"del %s", fname); @@ -1053,7 +1084,7 @@ void mglGraph::ShowImage(const char *viewer, bool keep) else sprintf(cmd,"%s %s; rm %s", viewer,fname,fname); #endif - system(cmd); + if(system(cmd)==-1) printf("Error to call external viewer\n"); delete []cmd; } //----------------------------------------------------------------------------- @@ -1074,11 +1105,26 @@ void mglGraph::SetAutoRanges(mreal x1, mreal x2, mreal y1, mreal y2, mreal z1, m void mglGraph::Colorbar(const char *sch,int where) { SetScheme(sch); + // ‘0’ - right, ‘1’ - left, ‘2’ - above, ‘3’ - under + if(sch && strchr(sch,'>')) where = 0; + if(sch && strchr(sch,'<')) where = 1; + if(sch && strchr(sch,'^')) where = 2; + if(sch && strchr(sch,'_')) where = 3; + if(sch && strchr(sch,'A')) { Push(); Identity(); } Colorbar(where, where==0?1:0, where==2?1:0, 1, 1); + if(sch && strchr(sch,'A')) Pop(); } //----------------------------------------------------------------------------- void mglGraph::Colorbar(const mglData &v, const char *sch,int where) -{ Colorbar(v,sch,where, where==0?1:0, where==2?1:0, 1, 1); } +{ + if(sch && strchr(sch,'>')) where = 0; + if(sch && strchr(sch,'<')) where = 1; + if(sch && strchr(sch,'^')) where = 2; + if(sch && strchr(sch,'_')) where = 3; + if(sch && strchr(sch,'A')) { Push(); Identity(); } + Colorbar(v,sch,where, where==0?1:0, where==2?1:0, 1, 1); + if(sch && strchr(sch,'A')) Pop(); +} //----------------------------------------------------------------------------- void mglGraph::Colorbar(int where, mreal x, mreal y, mreal w, mreal h) { @@ -1107,11 +1153,11 @@ void mglGraph::Colorbar(const mglData &v, const char *sch, int where, mreal x, m delete []c; } //----------------------------------------------------------------------------- -void mglGraph::ColumnPlot(int num, int i) +void mglGraph::ColumnPlot(int num, int i, mreal dd) { mreal d = i/(num+PlotFactor-1); mreal w = PlotFactor/(num+PlotFactor-1); - InPlot(0,1,d,d+w,true); + InPlot(0,1,d,d+w*(1-dd),true); } //----------------------------------------------------------------------------- void mglGraph::SetCoor(int how) diff --git a/mgl/mgl_parse.cpp b/mgl/mgl_parse.cpp index e50c6c2..5443add 100644 --- a/mgl/mgl_parse.cpp +++ b/mgl/mgl_parse.cpp @@ -35,6 +35,41 @@ wchar_t *wcstokw32(wchar_t *wcs, const wchar_t *delim) { return wcstok(wcs,delim wchar_t *mgl_wcsdup(const wchar_t *s); //----------------------------------------------------------------------------- +mglFunc::mglFunc(long p, const wchar_t *f, mglFunc *prev) +{ + pos = p; next = prev; + register long i; + for(i=0;(isalnum(f[i]) || f[i]=='_') && i<31;i++) func[i]=f[i]; + func[i]=0; + narg = wcstol(f+i+1,0,0); + if(narg<0 || narg>9) narg=0; +} +//----------------------------------------------------------------------------- +long mglParse::IsFunc(const wchar_t *name, int *na) +{ + mglFunc *f=func; + while(f) + { + if(!wcscmp(name,f->func)) + { if(na) *na=f->narg; return f->pos; } + f = f->next; + } + return 0; +} +//----------------------------------------------------------------------------- +void mglParse::ScanFunc(const wchar_t *line) +{ + static long num=0; + if(!line) + { if(func) delete func; + num=0; func=0; return; } + num++; + if(wcsncmp(line,L"func",4) || line[4]>' ') return; + register long i; + for(i=4;line[i]<=' ' || line[i]=='\'';i++); + func = new mglFunc(num-1, line+i, func); +} +//----------------------------------------------------------------------------- void mgl_wcstrim(wchar_t *str) { wchar_t *c = mgl_wcsdup(str); @@ -160,7 +195,7 @@ mglParse::mglParse(bool setsize) AllowSetSize=setsize; Once = true; parlen=320; op1 = new wchar_t[4096]; op2 = new wchar_t[4096]; - fval = new mglData[10]; + fval = new mglData[40]; } //----------------------------------------------------------------------------- mglParse::~mglParse() @@ -170,9 +205,10 @@ mglParse::~mglParse() while(DataList->next) delete DataList->next; delete DataList; } - for(long i=0;i<10;i++) if(par[i]) delete [] par[i]; + for(long i=0;i<40;i++) if(par[i]) delete []par[i]; delete []op1; delete []op2; delete []fval; if(Cmd!=mgls_base_cmd) delete []Cmd; + if(fn_stack) free(fn_stack); } //----------------------------------------------------------------------------- bool mglParse::AddParam(int n, const char *str, bool isstr) @@ -235,7 +271,7 @@ mglNum *mglParse::FindNum(const char *str) //----------------------------------------------------------------------------- bool mglParse::AddParam(int n, const wchar_t *str, bool isstr) { - if(n<0 || n>9 || wcschr(str,'$')) return false; + if(n<0 || n>39 || wcschr(str,'$')) return false; if(!isstr) parlen += wcslen(str); if(par[n]) delete []par[n]; par[n] = new wchar_t[wcslen(str)+1]; @@ -474,11 +510,32 @@ int mglParse::PreExec(mglGraph *, long k, wchar_t **arg, mglArg *a) return n; } //----------------------------------------------------------------------------- +void mglParse::PutArg(const wchar_t *string, wchar_t *str, bool def) +{ + if(parlen>0) + { + wchar_t *sb = new wchar_t[wcslen(string)+1], *t; + if(def) str = str+10; + register long n; + while((t=wcschr(str,'$'))!=0) + { + wcscpy(sb,t+2); + t[0]=0; + n = t[1]-'0'; if(n>=0 && n<=9 && par[n]) wcscat(str,par[n]); + n = t[1]-'a'; if(n>=0 && n<='z'-'a' && par[n+10]) wcscat(str,par[n+10]); + if(t[1]=='$') wcscat(str,L"\xffff"); + wcscat(str,sb); + } + delete []sb; + while((t=wcschr(str,L'\xffff'))!=0) *t='$'; + } +} +//----------------------------------------------------------------------------- // return values: 0 - OK, 1 - wrong arguments, 2 - wrong command, 3 - string too long, 4 -- unclosed string int mglParse::Parse(mglGraph *gr, const wchar_t *string, long pos) { if(!gr || Stop) return 0; - wchar_t *str, *s = new wchar_t[wcslen(string)+1+parlen],*arg[1024],*t; + wchar_t *str, *s = new wchar_t[wcslen(string)+1+40*parlen],*arg[1024],*t; str = s; wcscpy(str,string); wcstrim_mgl(str); @@ -499,13 +556,13 @@ int mglParse::Parse(mglGraph *gr, const wchar_t *string, long pos) } } // check if string is closed - for(n=1,k=0;n='0' && ss[1]<='9') @@ -515,8 +572,15 @@ int mglParse::Parse(mglGraph *gr, const wchar_t *string, long pos) AddParam(n, ss); delete []s; return 0; } + if(*ss=='$' && ss[1]>='a' && ss[1]<='z') + { + int n=ss[1]-'a';// res = 0; + ss +=2; mgl_wcstrim(ss); + AddParam(n+10, ss); + delete []s; return 0; + } } - if(!skip() && !wcsncmp(str+3,L"num",3) && (str[6]==' ' || str[6]=='\t')) + if(!wcsncmp(str+3,L"num",3)) { str += 7; wcstrim_mgl(str); int res = 1; if(*str=='$' && str[1]>='0' && str[1]<='9') @@ -529,9 +593,19 @@ int mglParse::Parse(mglGraph *gr, const wchar_t *string, long pos) AddParam(n, buf); delete []buf; } + if(*str=='$' && str[1]>='a' && str[1]<='z') + { + int n=str[1]-'a'; res = 0; + str +=2; mgl_wcstrim(str); + const mglData &d=mglFormulaCalc(str, this); + char *buf=new char[128]; + sprintf(buf,"%g",d.a[0]); + AddParam(n+10, buf); + delete []buf; + } delete []s; return res; } - if(!skip() && !wcsncmp(str+3,L"chr",3) && (str[6]==' ' || str[6]=='\t')) + if(!wcsncmp(str+3,L"chr",3)) { str += 7; wcstrim_mgl(str); int res = 1; if(*str=='$' && str[1]>='0' && str[1]<='9') @@ -542,9 +616,17 @@ int mglParse::Parse(mglGraph *gr, const wchar_t *string, long pos) wchar_t buf[2]={0,0}; buf[0] = wchar_t(d.a[0]); AddParam(n, buf); } + if(*str=='$' && str[1]>='a' && str[1]<='z') + { + int n=str[1]-'a'; res = 0; + str +=2; mgl_wcstrim(str); + const mglData &d=mglFormulaCalc(str, this); + wchar_t buf[2]={0,0}; buf[0] = wchar_t(d.a[0]); + AddParam(n+10, buf); + } delete []s; return res; } - if(!skip() && !wcsncmp(str+3,L"pal",3) && (str[6]==' ' || str[6]=='\t')) + if(!wcsncmp(str+3,L"pal",3)) { str += 7; wcstrim_mgl(str); int res = 1; if(*str=='$' && str[1]>='0' && str[1]<='9') @@ -556,6 +638,15 @@ int mglParse::Parse(mglGraph *gr, const wchar_t *string, long pos) buf[0] = gr->DefPal[int(d.a[0])%gr->NumPal]; AddParam(n, buf); } + if(*str=='$' && str[1]>='a' && str[1]<='z') + { + int n=str[1]-'a'; res = 0; + str +=2; mgl_wcstrim(str); + const mglData &d=mglFormulaCalc(str, this); + wchar_t buf[2]={0,0}; + buf[0] = gr->DefPal[int(d.a[0])%gr->NumPal]; + AddParam(n+10, buf); + } delete []s; return res; } } @@ -565,24 +656,10 @@ int mglParse::Parse(mglGraph *gr, const wchar_t *string, long pos) while(*t && isspace(*t)) t++; // if command have format 'for $N ...' then change it to 'for N ...' if(*t=='$' && t[1]>='0' && t[1]<='9') *t = ' '; + if(*t=='$' && t[1]>='a' && t[1]<='z') *t = ' '; } // parse arguments (parameters $1, ..., $9) - if(parlen>0) - { - wchar_t *sb = new wchar_t[wcslen(string)+1]; - while((t=wcschr(str,'$'))!=0) - { - wcscpy(sb,t+2); - t[0]=0; - long n = t[1]-'0'; - if(n>=0 && n<=9 && par[n]) wcscat(str,par[n]); - wcscat(str,sb); - } - delete []sb; - } - - wcstrim_mgl(str); - if(!skip() && !wcscmp(str,L"stop")) { Stop = true; delete []s; return 0; } + PutArg (string,str,false); wcstrim_mgl(str); for(k=0;k<1024;k++) // parse string to substrings (by spaces) { @@ -605,6 +682,9 @@ int mglParse::Parse(mglGraph *gr, const wchar_t *string, long pos) mglArg *a = new mglArg[k]; FillArg(gr, k, arg, a); // execute first special (program-flow-control) commands + if(!skip() && !wcscmp(arg[0],L"stop")) + { Stop = true; delete []s; delete []a; return 0; } + if(!wcscmp(arg[0],L"func")) { delete []s; delete []a; return 0; } n = FlowExec(gr, arg[0],k-1,a); if(n) { delete []s; delete []a; return n-1; } if(skip()) { delete []s; delete []a; return 0; } @@ -623,16 +703,45 @@ int mglParse::Parse(mglGraph *gr, const wchar_t *string, long pos) n = 1; if(a[0].type==1) { - n=0; mgl_wcstombs(a[0].s, a[0].w, 1024); - FILE *fp = fopen(a[0].s,"rt"); Execute(gr,fp); fclose(fp); + int na=0; + mgl_wcstombs(a[0].s, a[0].w, 1024); n=-IsFunc(a[0].w,&na); + if(n && k!=na+2) + { + if(gr->Message) + sprintf(gr->Message,"Bad arguments for %ls: %ld instead of %d\n", + a[0].w,k-2,na); + n = 1; + } + else if(n) + { + if(!fn_stack) + { fn_num = 100; + fn_stack = (mglFnStack*)malloc(fn_num*sizeof(mglFnStack)); } + if(fn_pos >= fn_num) + { fn_num+= 100; + fn_stack = (mglFnStack*)realloc(fn_stack,fn_num*sizeof(mglFnStack)); } + memcpy(fn_stack[fn_pos].par,par+1,9*sizeof(wchar_t*)); + memset(par+1,0,9*sizeof(wchar_t*)); + for(int i=1;i=0 || r<=9)) + char ch = arg[1][0]; + int r = ch-'0'; + if(ch>='a' && ch<='z') r = 10+ch-'a'; +// int r = int(a[0].v); + if(arg[1][1]==0 && (r>=0 || r<=39)) { if(a[1].type==0) { @@ -652,7 +761,7 @@ int mglParse::Parse(mglGraph *gr, const wchar_t *string, long pos) } if(n==0) { - for(int i=9;i>0;i--) + for(int i=39;i>0;i--) { for_stack[i]=for_stack[i-1]; if_for[i]=if_for[i-1]; } for_stack[0] = r+1; fval[r].nz = pos; if_for[0]=if_pos; wchar_t buf[32]; mglprintf(buf,32,L"%g",fval[r].a[0]); @@ -755,7 +864,7 @@ int mglParse::FlowExec(mglGraph *, const wchar_t *com, long m, mglArg *a) } else n = 1; if(n==0) - { if_stack[if_pos] = cond; if_pos = if_pos<19 ? if_pos+1 : 19; } + { if_stack[if_pos] = cond; if_pos = if_pos<39 ? if_pos+1 : 39; } } else if(!Skip && !wcscmp(com,L"endif")) { @@ -796,6 +905,13 @@ int mglParse::FlowExec(mglGraph *, const wchar_t *com, long m, mglArg *a) if(if_pos==if_for[0]) if_pos = if_pos>0 ? if_pos-1 : 0; if(out) mglprintf(out,1024,L"break;"); for_br = true; } + else if(!skip() && !wcscmp(com, L"return")) // parse command "delete" + { + if(!fn_pos) return 2; + fn_pos--; n = -fn_stack[fn_pos].pos-1; + for(int i=1;i<10;i++) if(par[i]) delete []par[i]; + memcpy(par+1,fn_stack[fn_pos].par,9*sizeof(wchar_t*)); + } else if(!ifskip() && !Skip && !wcscmp(com,L"next")) { if(if_pos==if_for[0]) if_pos = if_pos>0 ? if_pos-1 : 0; @@ -811,9 +927,9 @@ int mglParse::FlowExec(mglGraph *, const wchar_t *com, long m, mglArg *a) } else { - for(int i=0;i<9;i++) + for(int i=0;i<39;i++) { for_stack[i]=for_stack[i+1]; if_for[i]=if_for[i+1]; } - for_stack[9] = 0; for_br=false; + for_stack[39] = 0; for_br=false; } } if(out) mglprintf(out,1024,L"}"); @@ -845,7 +961,7 @@ void mgl_error_print(int line, int r, mglGraph *gr) if(r==2) printf("Wrong command in line %d\n", line); if(r==3) printf("String too long in line %d\n", line); if(r==4) printf("Unbalanced ' in line %d\n", line); - gr->Message[0]=0; + if(gr->Message) gr->Message[0]=0; } void mglParse::Execute(mglGraph *gr, FILE *fp, bool print) { @@ -868,14 +984,16 @@ void mglParse::Execute(mglGraph *gr, int n, const wchar_t **text, void (*error)( { if(gr==0 || n<1 || text==0) return; long i, r; - for_br=Skip=false; if_pos=0; + for_br=Skip=false; if_pos=fn_pos=0; ScanFunc(0); + for(i=0;i0) error(i, r, gr); + if(r>0) error(i+1, r, gr); if(gr->Message && gr->Message[0]) error(i,0,gr); } } @@ -1127,7 +1245,7 @@ void mglParse::AddCommand(mglCommand *cmd, int mc) //----------------------------------------------------------------------------- mglCommand mglParse::Prg[]={ {L"break",L"Break for-cycle",L"break", 0, 0, 0, 5}, - {L"call",L"Execute script in external file",L"call 'filename'", 0, 0, 0, 5}, + {L"call",L"Execute script in external file",L"call 'name' [args]", 0, 0, 0, 5}, {L"continue",L"Skip commands and iterate for-cycle again",L"continue", 0, 0, 0, 5}, {L"defchr",L"Define parameter as character",L"defchr $N val", 0, 0, 0, 5}, {L"define",L"Define constant or parameter",L"define $N sth | Var val", 0, 0, 0, 5}, @@ -1138,9 +1256,11 @@ mglCommand mglParse::Prg[]={ {L"elseif",L"Conditional operator",L"elseif val|Dat ['cond']", 0, 0, 0, 5}, {L"endif",L"Finish if/else block",L"endif", 0, 0, 0, 5}, {L"for",L"For cycle",L"for $N v1 v2 [dv] | $N Dat", 0, 0, 0, 5}, + {L"func",L"Start function definition and stop execution of main script",L"func 'name' [narg]", 0, 0, 0, 5}, {L"if",L"Conditional operator",L"if val|Dat ['cond']", 0, 0, 0, 5}, {L"next",L"Start next for-cycle iteration",L"next", 0, 0, 0, 5}, {L"once",L"Start/close commands which should executed only once",L"once val", 0, 0, 0, 5}, + {L"return",L"Return from function",L"return", 0, 0, 0, 5}, {L"stop",L"Stop execution",L"stop", 0, 0, 0, 5}, {L"",0,0, 0, 0, 0, 0}}; //----------------------------------------------------------------------------- @@ -1156,6 +1276,7 @@ void mgl_parse_text(HMGL gr, HMPR p, const char *str) { p->Execute(gr, str); } void mgl_parsew_text(HMGL gr, HMPR p, const wchar_t *str){ p->Parse(gr, str); } void mgl_restore_once(HMPR p) { p->RestoreOnce(); } void mgl_parser_allow_setsize(HMPR p, int a) { p->AllowSetSize = a; } +void mgl_scan_func(HMPR p, const wchar_t *line) { p->ScanFunc(line); } //----------------------------------------------------------------------------- uintptr_t mgl_create_parser_() { return uintptr_t(new mglParse); } void mgl_delete_parser_(uintptr_t* p) { delete _PR_; } diff --git a/mgl/mgl_tex_table.cpp b/mgl/mgl_tex_table.cpp index b518d8f..75ca877 100644 --- a/mgl/mgl_tex_table.cpp +++ b/mgl/mgl_tex_table.cpp @@ -159,7 +159,7 @@ mglTeXsymb mgl_tex_symb[] = { {0x2144, L"Yup"}, {0x1b5, L"Zbar"}, {0x396, L"Zeta"}, - {0x2c6, L"^"}, + {0x5e, L"^"}, {0xe5, L"aa"}, {0x223e, L"ac"}, {0x23e6, L"accurrent"}, @@ -174,7 +174,7 @@ mglTeXsymb mgl_tex_symb[] = { {0xe6, L"ae"}, {0x2135, L"aleph"}, {0x3b1, L"alpha"}, - {0x2210, L"amalg"}, +// {0x2210, L"amalg"}, {0x2a3f, L"amalg"}, {0x299f, L"angdnr"}, {0x2220, L"angle"}, diff --git a/mgl/mgl_vect.cpp b/mgl/mgl_vect.cpp index de8003a..f65afb5 100644 --- a/mgl/mgl_vect.cpp +++ b/mgl/mgl_vect.cpp @@ -78,7 +78,7 @@ void mglGraph::Traj(const mglData &x, const mglData &y, const mglData &z, tt[2*i] = ScalePoint(pp[6*i],pp[6*i+1],pp[6*i+2]); tt[2*i+1] = ScalePoint(pp[6*i+3],pp[6*i+4],pp[6*i+5]); } - vects_plot(n,pp,cc,tt); + vects_plot(n,pp,cc,tt,false); } cmap[0]=cm; NumCol=nc; SetPal(0); EndGroup(); @@ -167,9 +167,9 @@ void mglGraph::Vect(const mglData &x, const mglData &y, const mglData &ax, const tt[2*i0+1]= ScalePoint(pp[6*i0+3],pp[6*i0+4],pp[6*i0+5]); } if(flag & MGL_VEC_DOT) - lines_plot(nn*mm,pp,(flag&MGL_VEC_COL)?0:cc,tt,true); + lines_plot(nn*mm,pp,(flag&MGL_VEC_COL)?0:cc,tt,true,flag&MGL_VEC_GRD); else - vects_plot(nn*mm,pp,(flag&MGL_VEC_COL)?0:cc,tt); + vects_plot(nn*mm,pp,(flag&MGL_VEC_COL)?0:cc,tt,flag&MGL_VEC_GRD); } EndGroup(); delete []pp; delete []tt; delete []cc; @@ -189,7 +189,7 @@ void mglGraph::Vect(const mglData &ax, const mglData &ay, const char *sch, mreal // //----------------------------------------------------------------------------- void mglGraph::VectL(const mglData &x, const mglData &y, const mglData &ax, const mglData &ay, const char *sch, mreal zVal) -{ Vect(x,y,ax,ay,sch,zVal,MGL_VEC_COL|MGL_VEC_DOT); } +{ Vect(x,y,ax,ay,sch,zVal,MGL_VEC_COL|MGL_VEC_DOT|MGL_VEC_GRD); } //----------------------------------------------------------------------------- void mglGraph::VectL(const mglData &ax, const mglData &ay, const char *sch, mreal zVal) { @@ -205,7 +205,7 @@ void mglGraph::VectL(const mglData &ax, const mglData &ay, const char *sch, mrea // //----------------------------------------------------------------------------- void mglGraph::VectC(const mglData &x, const mglData &y, const mglData &ax, const mglData &ay, const char *sch, mreal zVal) -{ Vect(x,y,ax,ay,sch,zVal,MGL_VEC_LEN|MGL_VEC_DOT); } +{ Vect(x,y,ax,ay,sch,zVal,MGL_VEC_LEN|MGL_VEC_DOT|MGL_VEC_GRD); } //----------------------------------------------------------------------------- void mglGraph::VectC(const mglData &ax, const mglData &ay, const char *sch, mreal zVal) { @@ -294,9 +294,9 @@ void mglGraph::Vect(const mglData &x, const mglData &y, const mglData &z, const tt[2*i0+1]= ScalePoint(pp[6*i0+3],pp[6*i0+4],pp[6*i0+5]); } if(flag & MGL_VEC_DOT) - lines_plot(nn*mm*ll,pp,(flag&MGL_VEC_COL)?0:cc,tt,true); + lines_plot(nn*mm*ll,pp,(flag&MGL_VEC_COL)?0:cc,tt,true,flag&MGL_VEC_GRD); else - vects_plot(nn*mm*ll,pp,(flag&MGL_VEC_COL)?0:cc,tt); + vects_plot(nn*mm*ll,pp,(flag&MGL_VEC_COL)?0:cc,tt,flag&MGL_VEC_GRD); } EndGroup(); delete []pp; delete []tt; delete []cc; @@ -318,7 +318,7 @@ void mglGraph::Vect(const mglData &ax, const mglData &ay, const mglData &az, con // //----------------------------------------------------------------------------- void mglGraph::VectL(const mglData &x, const mglData &y, const mglData &z, const mglData &ax, const mglData &ay, const mglData &az, const char *sch) -{ Vect(x,y,z,ax,ay,az,sch,MGL_VEC_COL|MGL_VEC_DOT); } +{ Vect(x,y,z,ax,ay,az,sch,MGL_VEC_COL|MGL_VEC_DOT|MGL_VEC_GRD); } //----------------------------------------------------------------------------- void mglGraph::VectL(const mglData &ax, const mglData &ay, const mglData &az, const char *sch) { @@ -337,7 +337,7 @@ void mglGraph::VectL(const mglData &ax, const mglData &ay, const mglData &az, co //----------------------------------------------------------------------------- void mglGraph::VectC(const mglData &x, const mglData &y, const mglData &z, const mglData &ax, const mglData &ay, const mglData &az, const char *sch) -{ Vect(x,y,z,ax,ay,az,sch,MGL_VEC_LEN|MGL_VEC_DOT); } +{ Vect(x,y,z,ax,ay,az,sch,MGL_VEC_LEN|MGL_VEC_DOT|MGL_VEC_GRD); } //----------------------------------------------------------------------------- void mglGraph::VectC(const mglData &ax, const mglData &ay, const mglData &az, const char *sch) { diff --git a/mgl/mgl_zb.cpp b/mgl/mgl_zb.cpp index b7162b7..c152739 100644 --- a/mgl/mgl_zb.cpp +++ b/mgl/mgl_zb.cpp @@ -216,7 +216,8 @@ void mglGraphZB::Clf(mglColor Back) } //----------------------------------------------------------------------------- void mglGraphZB::SetSize(int w,int h) -{ +{ + if(w<=0 || h<=0) { SetWarn(mglWarnSize); return; } if(C) { delete []C; delete []Z; } C = new unsigned char[w*h*32]; // ����� *1 ��� TranspType>0 !!! Z = new mreal[w*h*8]; @@ -811,9 +812,11 @@ void mglGraphAB::mark_plot(mreal *pp, char type) mreal p[12]={0,0,pp[2],0,0,pp[2],0,0,pp[2],0,0,pp[2]}; mreal v, ss=MarkSize*0.35*font_factor; register long i,j,s; - if(type=='.' || ss==0) + if(type=='.' || type=='C' || ss==0) { bool aa=UseAlpha; UseAlpha = true; + ss *= 1.1; if(type=='C') for(i=long(-4*ss);i<=long(4*ss);i++) + pnt_plot(long(pp[0]+ss*cos(i*M_PI_4/ss)), long(pp[1]+ss*sin(i*M_PI_4/ss)),pp[2],cs); s = long(5.5+fabs(PenWidth)); for(i=-s;i<=s;i++) for(j=-s;j<=s;j++) { @@ -821,103 +824,137 @@ void mglGraphAB::mark_plot(mreal *pp, char type) cs[3] = (unsigned char)(255.f*exp(-6.f*v)); if(cs[3]==0) continue; pnt_plot(long(pp[0])+i,long(pp[1])+j,pp[2],cs); - } + } UseAlpha = aa; } else { mreal pw = PenWidth; PenWidth = BaseLineWidth; int pd = PDef; PDef = 0xffff; - register mreal zv = strchr("oOVDTS",type) ? pp[2]+BaseLineWidth : pp[2]; + register mreal zv = strchr("oOVDTS",type) ? pp[2]+BaseLineWidth : pp[2]; + if(!strchr("xsSoO",type)) ss *= 1.1; switch(type) { + case 'P': + p[0] = pp[0]-ss; p[1] = pp[1]-ss; p[3] = pp[0]+ss; p[4] = pp[1]-ss; + mglGraphAB::line_plot(p,p+3,CDef,CDef); + p[0] = pp[0]-ss; p[1] = pp[1]-ss; p[3] = pp[0]-ss; p[4] = pp[1]+ss; + mglGraphAB::line_plot(p,p+3,CDef,CDef); + p[0] = pp[0]-ss; p[1] = pp[1]+ss; p[3] = pp[0]+ss; p[4] = pp[1]+ss; + mglGraphAB::line_plot(p,p+3,CDef,CDef); + p[0] = pp[0]+ss; p[1] = pp[1]-ss; p[3] = pp[0]+ss; p[4] = pp[1]+ss; + mglGraphAB::line_plot(p,p+3,CDef,CDef); case '+': - ss = ss*1.1; p[0] = pp[0]-ss; p[1] = pp[1]; p[3] = pp[0]+ss; p[4] = pp[1]; - line_plot(p,p+3,CDef,CDef); + mglGraphAB::line_plot(p,p+3,CDef,CDef); p[0] = pp[0]; p[1] = pp[1]-ss; p[3] = pp[0]; p[4] = pp[1]+ss; - line_plot(p,p+3,CDef,CDef); + mglGraphAB::line_plot(p,p+3,CDef,CDef); break; + case 'X': + p[0] = pp[0]-ss; p[1] = pp[1]-ss; p[3] = pp[0]+ss; p[4] = pp[1]-ss; + mglGraphAB::line_plot(p,p+3,CDef,CDef); + p[0] = pp[0]-ss; p[1] = pp[1]-ss; p[3] = pp[0]-ss; p[4] = pp[1]+ss; + mglGraphAB::line_plot(p,p+3,CDef,CDef); + p[0] = pp[0]-ss; p[1] = pp[1]+ss; p[3] = pp[0]+ss; p[4] = pp[1]+ss; + mglGraphAB::line_plot(p,p+3,CDef,CDef); + p[0] = pp[0]+ss; p[1] = pp[1]-ss; p[3] = pp[0]+ss; p[4] = pp[1]+ss; + mglGraphAB::line_plot(p,p+3,CDef,CDef); case 'x': p[0] = pp[0]-ss; p[1] = pp[1]-ss; p[3] = pp[0]+ss; p[4] = pp[1]+ss; - line_plot(p,p+3,CDef,CDef); + mglGraphAB::line_plot(p,p+3,CDef,CDef); p[0] = pp[0]+ss; p[1] = pp[1]-ss; p[3] = pp[0]-ss; p[4] = pp[1]+ss; - line_plot(p,p+3,CDef,CDef); + mglGraphAB::line_plot(p,p+3,CDef,CDef); break; + case 'S': + for(i=long(-ss-1);i<=long(ss+1);i++) for(j=long(-ss-1);j<=long(ss+1);j++) + pnt_plot(long(pp[0])+i,long(pp[1])+j,zv,cs); case 's': p[0] = pp[0]-ss; p[1] = pp[1]-ss; p[3] = pp[0]+ss; p[4] = pp[1]-ss; - line_plot(p,p+3,CDef,CDef); + mglGraphAB::line_plot(p,p+3,CDef,CDef); p[0] = pp[0]+ss; p[1] = pp[1]-ss; p[3] = pp[0]+ss; p[4] = pp[1]+ss; - line_plot(p,p+3,CDef,CDef); + mglGraphAB::line_plot(p,p+3,CDef,CDef); p[0] = pp[0]+ss; p[1] = pp[1]+ss; p[3] = pp[0]-ss; p[4] = pp[1]+ss; - line_plot(p,p+3,CDef,CDef); + mglGraphAB::line_plot(p,p+3,CDef,CDef); p[0] = pp[0]-ss; p[1] = pp[1]+ss; p[3] = pp[0]-ss; p[4] = pp[1]-ss; - line_plot(p,p+3,CDef,CDef); + mglGraphAB::line_plot(p,p+3,CDef,CDef); break; + case 'D': + for(i=long(-ss-1);i<=long(ss+1);i++) for(j=long(-ss-1);j<=long(ss+1);j++) + if(abs(i)+abs(j)<=long(ss+1)) + pnt_plot(long(pp[0])+i,long(pp[1])+j,zv,cs); case 'd': - ss = ss*1.1; p[0] = pp[0]; p[1] = pp[1]-ss; p[3] = pp[0]+ss; p[4] = pp[1]; - line_plot(p,p+3,CDef,CDef); + mglGraphAB::line_plot(p,p+3,CDef,CDef); p[0] = pp[0]+ss; p[1] = pp[1]; p[3] = pp[0]; p[4] = pp[1]+ss; - line_plot(p,p+3,CDef,CDef); + mglGraphAB::line_plot(p,p+3,CDef,CDef); p[0] = pp[0]; p[1] = pp[1]+ss; p[3] = pp[0]-ss; p[4] = pp[1]; - line_plot(p,p+3,CDef,CDef); + mglGraphAB::line_plot(p,p+3,CDef,CDef); p[0] = pp[0]-ss; p[1] = pp[1]; p[3] = pp[0]; p[4] = pp[1]-ss; - line_plot(p,p+3,CDef,CDef); + mglGraphAB::line_plot(p,p+3,CDef,CDef); + break; + case 'Y': + p[0] = pp[0]; p[1] = pp[1]-ss; p[3] = pp[0]; p[4] = pp[1]; + mglGraphAB::line_plot(p,p+3,CDef,CDef); + p[0] = pp[0]-0.8*ss; p[1] = pp[1]+0.6*ss; p[3] = pp[0]; p[4] = pp[1]; + mglGraphAB::line_plot(p,p+3,CDef,CDef); + p[0] = pp[0]+0.8*ss; p[1] = pp[1]+0.6*ss; p[3] = pp[0]; p[4] = pp[1]; + mglGraphAB::line_plot(p,p+3,CDef,CDef); break; case '*': - ss = ss*1.1; p[0] = pp[0]-ss; p[1] = pp[1]; p[3] = pp[0]+ss; p[4] = pp[1]; - line_plot(p,p+3,CDef,CDef); + mglGraphAB::line_plot(p,p+3,CDef,CDef); p[0] = pp[0]-0.6*ss; p[1] = pp[1]-0.8*ss; p[3] = pp[0]+0.6*ss; p[4] = pp[1]+0.8*ss; - line_plot(p,p+3,CDef,CDef); + mglGraphAB::line_plot(p,p+3,CDef,CDef); p[0] = pp[0]-0.6*ss; p[1] = pp[1]+0.8*ss; p[3] = pp[0]+0.6*ss; p[4] = pp[1]-0.8*ss; - line_plot(p,p+3,CDef,CDef); + mglGraphAB::line_plot(p,p+3,CDef,CDef); break; + case 'T': + for(i=long(-ss-1);i<=long(ss+1);i++) for(j=long(-ss/2-1);j<=long(ss+1);j++) + if(3*abs(i)+2*j<=long(2*ss+1)) + pnt_plot(long(pp[0])+i,long(pp[1])+j,zv,cs); case '^': - ss = ss*1.1; p[0] = pp[0]-ss; p[1] = pp[1]-ss/2; p[3] = pp[0]; p[4] = pp[1]+ss; - line_plot(p,p+3,CDef,CDef); + mglGraphAB::line_plot(p,p+3,CDef,CDef); p[0] = pp[0]-ss; p[1] = pp[1]-ss/2; p[3] = pp[0]+ss; p[4] = pp[1]-ss/2; - line_plot(p,p+3,CDef,CDef); + mglGraphAB::line_plot(p,p+3,CDef,CDef); p[0] = pp[0]+ss; p[1] = pp[1]-ss/2; p[3] = pp[0]; p[4] = pp[1]+ss; - line_plot(p,p+3,CDef,CDef); + mglGraphAB::line_plot(p,p+3,CDef,CDef); break; + case 'V': + for(i=long(-ss-1);i<=long(ss+1);i++) for(j=long(-ss-1);j<=long(ss/2+1);j++) + if(3*abs(i)-2*j<=long(2*ss+1)) + pnt_plot(long(pp[0])+i,long(pp[1])+j,zv,cs); case 'v': - ss = ss*1.1; p[0] = pp[0]-ss; p[1] = pp[1]+ss/2; p[3] = pp[0]; p[4] = pp[1]-ss; - line_plot(p,p+3,CDef,CDef); + mglGraphAB::line_plot(p,p+3,CDef,CDef); p[0] = pp[0]-ss; p[1] = pp[1]+ss/2; p[3] = pp[0]+ss; p[4] = pp[1]+ss/2; - line_plot(p,p+3,CDef,CDef); + mglGraphAB::line_plot(p,p+3,CDef,CDef); p[0] = pp[0]+ss; p[1] = pp[1]+ss/2; p[3] = pp[0]; p[4] = pp[1]-ss; - line_plot(p,p+3,CDef,CDef); + mglGraphAB::line_plot(p,p+3,CDef,CDef); break; - case 'S': - for(i=long(-ss);i<=long(ss);i++) for(j=long(-ss);j<=long(ss);j++) - pnt_plot(long(pp[0])+i,long(pp[1])+j,zv,cs); + case 'L': + for(i=long(-ss-1);i<=long(ss+1);i++) for(j=long(-ss-1);j<=long(ss/2+1);j++) + if(3*abs(i)-2*j<=long(2*ss+1)) + pnt_plot(long(pp[0])+j,long(pp[1])+i,zv,cs); + case '<': + p[0] = pp[0]+ss/2; p[1] = pp[1]-ss; p[3] = pp[0]-ss; p[4] = pp[1]; + mglGraphAB::line_plot(p,p+3,CDef,CDef); + p[0] = pp[0]+ss/2; p[1] = pp[1]+ss; p[3] = pp[0]-ss; p[4] = pp[1]; + mglGraphAB::line_plot(p,p+3,CDef,CDef); + p[0] = p[3] = pp[0]+ss/2; p[1] = pp[1]-ss; p[4] = pp[1]+ss; + mglGraphAB::line_plot(p,p+3,CDef,CDef); break; - case 'D': - ss = ss*1.1; - for(i=long(-ss);i<=long(ss);i++) for(j=long(-ss);j<=long(ss);j++) - if(abs(i)+abs(j)<=long(ss)) - pnt_plot(long(pp[0])+i,long(pp[1])+j,zv,cs); - break; - case 'T': - ss = ss*1.1; - for(i=long(-ss);i<=long(ss);i++) for(j=long(-ss/2);j<=long(ss);j++) - if(3*abs(i)+2*j<=2*long(ss)) - pnt_plot(long(pp[0])+i,long(pp[1])+j,zv,cs); - break; - case 'V': - ss = ss*1.1; - for(i=long(-ss);i<=long(ss);i++) for(j=long(-ss);j<=long(ss/2);j++) - if(3*abs(i)-2*j<=2*long(ss)) - pnt_plot(long(pp[0])+i,long(pp[1])+j,zv,cs); - break; - case 'o': - for(i=long(-4*ss);i<=long(4*ss);i++) - pnt_plot(long(pp[0]+ss*cos(i*M_PI_4/ss)), - long(pp[1]+ss*sin(i*M_PI_4/ss)),zv,cs); + case 'R': + for(i=long(-ss-1);i<=long(ss+1);i++) for(j=long(-ss/2-1);j<=long(ss+1);j++) + if(3*abs(i)+2*j<=long(2*ss+1)) + pnt_plot(long(pp[0])+j,long(pp[1])+i,zv,cs); + case '>': + p[0] = pp[0]-ss/2; p[1] = pp[1]-ss; p[3] = pp[0]+ss; p[4] = pp[1]; + mglGraphAB::line_plot(p,p+3,CDef,CDef); + p[0] = pp[0]-ss/2; p[1] = pp[1]+ss; p[3] = pp[0]+ss; p[4] = pp[1]; + mglGraphAB::line_plot(p,p+3,CDef,CDef); + p[0] = p[3] = pp[0]-ss/2; p[1] = pp[1]-ss; p[4] = pp[1]+ss; + mglGraphAB::line_plot(p,p+3,CDef,CDef); break; case 'O': for(i=long(-ss);i<=long(ss);i++) for(j=long(-ss);j<=long(ss);j++) @@ -925,6 +962,10 @@ void mglGraphAB::mark_plot(mreal *pp, char type) if(i*i+j*j>=ss*ss) continue; pnt_plot(long(pp[0])+i,long(pp[1])+j,zv,cs); } + case 'o': + for(i=long(-4*ss);i<=long(4*ss);i++) + pnt_plot(long(pp[0]+ss*cos(i*M_PI_4/ss)), + long(pp[1]+ss*sin(i*M_PI_4/ss)),zv,cs); break; } PDef = pd; PenWidth = pw; diff --git a/mgl/mgl_zb2.cpp b/mgl/mgl_zb2.cpp index 5de8c35..1c2f7a0 100644 --- a/mgl/mgl_zb2.cpp +++ b/mgl/mgl_zb2.cpp @@ -487,46 +487,21 @@ void mglGraphAB::quads_plot(long n,mreal *pp,mreal *cc,bool *tt) { // if(!DrawFace) return; register long i; - mreal *p,*c; + mreal *p; + mreal *c1=CDef,*c2=CDef,*c3=CDef,*c4=CDef; PostScale(pp,4*n); LightScale(); - if(cc) - { - for(i=0;i1?cmap[1]:cmap[0]; + mglColor col,c1=cmap[0],c2=(grd && NumCol>1)?cmap[1]:cmap[0]; s1[3] = s2[3] = AlphaDef; PostScale(pp,2*n); long pOld = PDef; @@ -579,7 +584,7 @@ void mglGraphAB::lines_plot(long n,mreal *pp,mreal *cc,bool *tt, bool b) { col = GetC(cc[i]-0.5,false); s1[0] = col.r; s1[1] = col.g; s1[2] = col.b; - col = GetC(cc[i],false); + if(grd) col = GetC(cc[i],false); s2[0] = col.r; s2[1] = col.g; s2[2] = col.b; } } @@ -594,11 +599,11 @@ void mglGraphAB::lines_plot(long n,mreal *pp,mreal *cc,bool *tt, bool b) PDef = pOld; } //----------------------------------------------------------------------------- -void mglGraphAB::vects_plot(long n,mreal *pp,mreal *cc,bool *tt) +void mglGraphAB::vects_plot(long n,mreal *pp,mreal *cc,bool *tt, bool grd) { register long i; mreal s1[4],s2[4],*p,q[6],d; - mglColor col,c1=cmap[0],c2=NumCol>1?cmap[1]:cmap[0]; + mglColor col,c1=cmap[0],c2=(grd && NumCol>1)?cmap[1]:cmap[0]; s1[3] = s2[3] = AlphaDef; PostScale(pp,2*n); long pOld = PDef; @@ -613,7 +618,7 @@ void mglGraphAB::vects_plot(long n,mreal *pp,mreal *cc,bool *tt) { col = GetC(cc[i]-0.5,false); s1[0] = col.r; s1[1] = col.g; s1[2] = col.b; - col = GetC(cc[i],false); + if(grd) col = GetC(cc[i],false); s2[0] = col.r; s2[1] = col.g; s2[2] = col.b; } } @@ -713,7 +718,7 @@ void mglGraphAB::Glyph(mreal x, mreal y, mreal f, int s, long j, char col) void mglGraphAB::glyph_fill(mreal x,mreal y, mreal f, int nt, const short *trig, mreal *c) { long ik,ii; - mreal p[12], n[3]={0,0,0}, pw = Width>2 ? fabs(PenWidth) : 1e-5*Width; + mreal p[12], pw = Width>2 ? fabs(PenWidth) : 1e-5*Width; if(!trig || nt<=0) return; for(ik=0;ik/dev/null 2>&1; then \ + for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ + if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ + done; \ + else :; fi && \ + if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $@ `test -f 'mgl_en.texi' || echo '$(srcdir)/'`mgl_en.texi; \ + then \ + rc=0; \ + else \ + rc=$$?; \ + $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ + fi; \ + rm -rf $$backupdir; exit $$rc + +mgl_en.dvi: mgl_en.texi $(mgl_en_TEXINFOS) + TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2DVI) -o $@ `test -f 'mgl_en.texi' || echo '$(srcdir)/'`mgl_en.texi + +mgl_en.pdf: mgl_en.texi $(mgl_en_TEXINFOS) + TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2PDF) -o $@ `test -f 'mgl_en.texi' || echo '$(srcdir)/'`mgl_en.texi + +mgl_en.html: mgl_en.texi $(mgl_en_TEXINFOS) + rm -rf $(@:.html=.htp) + if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $(@:.html=.htp) `test -f 'mgl_en.texi' || echo '$(srcdir)/'`mgl_en.texi; \ + then \ + rm -rf $@; \ + if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ + mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \ + else \ + if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ + rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \ + exit 1; \ + fi + +mgl_ru.info: mgl_ru.texi $(mgl_ru_TEXINFOS) + restore=: && backupdir="$(am__leading_dot)am$$$$" && \ + rm -rf $$backupdir && mkdir $$backupdir && \ + if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ + for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ + if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ + done; \ + else :; fi && \ + if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $@ `test -f 'mgl_ru.texi' || echo '$(srcdir)/'`mgl_ru.texi; \ + then \ + rc=0; \ + else \ + rc=$$?; \ + $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ + fi; \ + rm -rf $$backupdir; exit $$rc + +mgl_ru.dvi: mgl_ru.texi $(mgl_ru_TEXINFOS) + TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2DVI) -o $@ `test -f 'mgl_ru.texi' || echo '$(srcdir)/'`mgl_ru.texi + +mgl_ru.pdf: mgl_ru.texi $(mgl_ru_TEXINFOS) + TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ + MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ + $(TEXI2PDF) -o $@ `test -f 'mgl_ru.texi' || echo '$(srcdir)/'`mgl_ru.texi + +mgl_ru.html: mgl_ru.texi $(mgl_ru_TEXINFOS) + rm -rf $(@:.html=.htp) + if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ + -o $(@:.html=.htp) `test -f 'mgl_ru.texi' || echo '$(srcdir)/'`mgl_ru.texi; \ + then \ + rm -rf $@; \ + if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ + mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \ + else \ + if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ + rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \ + exit 1; \ + fi .dvi.ps: TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ $(DVIPS) -o $@ $< @@ -524,13 +615,23 @@ mostlyclean-aminfo: mathgl_ru.cps mathgl_ru.fn mathgl_ru.fns mathgl_ru.ky \ mathgl_ru.kys mathgl_ru.log mathgl_ru.pg mathgl_ru.tmp \ mathgl_ru.toc mathgl_ru.tp mathgl_ru.tps mathgl_ru.vr \ - mathgl_ru.vrs + mathgl_ru.vrs mgl_en.aux mgl_en.cp mgl_en.cps mgl_en.fn \ + mgl_en.fns mgl_en.ky mgl_en.kys mgl_en.log mgl_en.pg \ + mgl_en.tmp mgl_en.toc mgl_en.tp mgl_en.tps mgl_en.vr \ + mgl_en.vrs mgl_ru.aux mgl_ru.cp mgl_ru.cps mgl_ru.fn \ + mgl_ru.fns mgl_ru.ky mgl_ru.kys mgl_ru.log mgl_ru.pg \ + mgl_ru.tmp mgl_ru.toc mgl_ru.tp mgl_ru.tps mgl_ru.vr \ + mgl_ru.vrs clean-aminfo: -test -z "mathgl_en.dvi mathgl_en.pdf mathgl_en.ps mathgl_en.html mathgl_ru.dvi \ - mathgl_ru.pdf mathgl_ru.ps mathgl_ru.html" \ + mathgl_ru.pdf mathgl_ru.ps mathgl_ru.html mgl_en.dvi \ + mgl_en.pdf mgl_en.ps mgl_en.html mgl_ru.dvi mgl_ru.pdf \ + mgl_ru.ps mgl_ru.html" \ || rm -rf mathgl_en.dvi mathgl_en.pdf mathgl_en.ps mathgl_en.html mathgl_ru.dvi \ - mathgl_ru.pdf mathgl_ru.ps mathgl_ru.html + mathgl_ru.pdf mathgl_ru.ps mathgl_ru.html mgl_en.dvi \ + mgl_en.pdf mgl_en.ps mgl_en.html mgl_ru.dvi mgl_ru.pdf \ + mgl_ru.ps mgl_ru.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ @@ -546,7 +647,7 @@ maintainer-clean-aminfo: # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): - @failcom='exit 1'; \ + @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ @@ -571,7 +672,7 @@ $(RECURSIVE_TARGETS): fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): - @failcom='exit 1'; \ + @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ @@ -935,16 +1036,18 @@ uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ uninstall-local uninstall-pdf-am uninstall-ps-am -#install-data-local: install-html install-pdf -install-data-local: install-html - mkdir -p $(mglpng) - cp -r $(top_srcdir)/texinfo/png_static/*.png $(mglpng) +#mglpng=$(DESTDIR)$(docdir)/png_static +#install-data-local: install-html install-pdf +install-data-local: +# mkdir -p $(mglpng) +# cp -r $(top_srcdir)/texinfo/png_static/*.png $(mglpng) uninstall-local: - rm -rf $(mglpng) +# rm -rf $(mglpng) #all-local: html pdf all-local: html + ./filter.py # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/texinfo/appendix_en.texi b/texinfo/appendix_en.texi index b5ccc38..7841b66 100644 --- a/texinfo/appendix_en.texi +++ b/texinfo/appendix_en.texi @@ -11,7 +11,57 @@ The full list of TeX-like commands recognizable by MathGL is shown below. If com @strong{Accents}: \hat, \tilde, \dot, \ddot, \dddot, \ddddot, \acute, \check, \grave, \vec, \bar, \breve -@strong{Special symbols}: \textquotedbl, \textdollar, \And, \textasciigrave, \textsubw, \colon, \less, \greater, \lbrack, \backslash, \rbrack, \textasciicircum, \lbrace, \vert, \rbrace, \textasciitilde, \aa, \ae, \textexclamdown, \textcent, \sterling, \textcurrency, \yen, \textbrokenbar, \S, \textasciidieresis, \textcopyright, \textordfeminine, \guillemotleft, \neg, \textregistered, \textasciimacron, \textdegree, \pm, \texttwosuperior, \textthreesuperior, \textasciiacute, \textmu, \P, \cdotp, \textonesuperior, \textordmasculine, \guillemotright, \textonequarter, \textonehalf, \textthreequarters, \textquestiondown, \AA, \AE, \DH, \times, \O, \TH, \ss, \dh, \div, \o, \th, \DJ, \dj, \textcrh, \L, \l, \OE, \oe, \NG, \ng, \textcrb, \texthtc, \textflorin, \texthvlig, \texthtk, \textctd, \textctl, \textctn, \textctt, \textdotlessj, \textbarl, \textcrlambda, \lambdabar, \Ohorn, \ohorn, \texthtp, \textlooptoprevesh, \textlhookt, \texthtt, \Uhorn, \uhorn, \Zbar, \textbenttailyogh, \textcrtwo, \textcrinvglotstop, \textpipe, \textdoublepipe, \textdoublebarpipe, \textexclam, \textturna, \textscripta, \textturnscripta, \texthtb, \textopeno, \textctc, \textrtaild, \texthtd, \textreve, \textschwa, \texthtg, \textscriptg, \textscg, \textgamma, \textramshorns, \textturnh, \texthth, \texththeng, \textbari, \textiota, \textturnmrleg, \textltailm, \textltailn, \textrtailn, \textscn, \textbaro, \textscoelig, \textcloseomega, \textphi, \textturnr, \textscr, \textinvscr, \textrtails, \textesh, \textbardotlessjvar, \textvibyi, \textctesh, \textturnt, \textrtailt, \textbaru, \textrtailz, \textctz, \textyogh, \textctyogh, \textglotstop, \textrevglotstop, \textinvglotstop, \textstretchcvar, \textbullseye, \textscb, \textrhookschwa, \textepsilon, \textrevepsilon, \textrhookrevepsilon, \textcloserevepsilon, \textbardotlessj, \textsci, \textltilde, \textbeltl, \textrtaill, \textlyoghlig, \textturnm, \textturnlonglegr, \textturnrrtail, \textlonglegr, \textrtailr, \textfishhookr, \textlhti, \textupsilon, \textscriptv, \textturnv, \textturnw, \textturny, \textscy, \textcloseepsilon, \texthtscg, \textsch, \textctj, \textturnk, \textscl, \texthtq, \textbarglotstop, \textbarrevglotstop, \textdzlig, \textdyoghlig, \textdctzlig, \texttslig, \texttctctlig, \texttctctlig, \textlongy, \textlongy, \ipasupgamma, \ipasupl, \ipasups, \ipasupx, \ipasuprerglotstpp, \tonebarextrahigh, \tonebarhigh, \tonebarmid, \tonebarlow, \tonebarextralow, \textsuph, \textsuphth, \textsupj, \textsupr, \textsupturnr, \textsupturnrrtail, \textsupinvscr, \textsupw, \textsupy, \cprime, \cdprime, \textturncomma, \rasp, \lasp, \texthamza, \textain, \textraiseglotstop, \textraiserevglotstop, \textlptr, \textrptr, \textuptr, \textdptr, \$\wedge$, \v, \textprimstress, \textmacron, \textacute, \textgrave, \textsecstress, \textlowmacron, \textlowgrave, \textlowacute, \textlengthmark, \texthalflength, \textrhalfring, \textlhalfring, \textraised, \textlowered, \textadvanced, \textretracted, \textbreve, \textdotaccent, \textringaccent, \textogonek, \textsmalltilde, \textdoubleacute, \textrhoticity, \textovercross, \ipavoicing, \ipaunaspirated, \sampi, \Alpha, \Beta, \Gamma, \Delta, \Epsilon, \Zeta, \Eta, \Theta, \Iota, \Kappa, \Lambda, \Mu, \Nu, \Xi, \Omicron, \Pi, \Rho, \Sigma, \Tau, \textsilon, \Phi, \Chi, \Psi, \Omega, \alpha, \beta, \gamma, \delta, \varepsilon, \zeta, \eta, \theta, \iota, \kappa, \lambda, \mu, \nu, \xi, \omicron, \pi, \rho, \varsigma, \sigma, \tau, \silon, \varphi, \chi, \psi, \omega, \varbeta, \vartheta, \silon, \phi, \varpi, \oldKoppa, \oldkoppa, \Stigma, \stigma, \Digamma, \digamma, \Koppa, \koppa, \varkappa, \varrho, \varTheta, \epsilon, \backepsilon, \textsca, \textsce, \textscu, \textlhookd, \textlhookk, \textlhookl, \texthooks, \testhookx, \texthookz, \texthyphen, \nobreakhyphen, \figdash, \endash, \emdash, \horizbar, \Vert, \twolowline, \lq, \rq, \dagger, \dag, \ddagger, \ddag, \textbullet, \enleadertwodots, \dots, \textperthousand, \textpertenthousand, \textprime, \prime, \textdprime, \dprime, \texttrprime, \trprime, \textbackprime, \backprime, \textbackdprime, \backdprime, \textbacktrprime, \backtrprime, \caretinsert, \guilsinglleft, \tieconcat, \hyphenbullet, \fracslash, \Question, \closure, \textAsterisks, \textdiscount, \textqprime, \qprime, \quotsinglbase, \quotsinglright, \textquotedblleft, \textquotedblright, \quotdblbase, \quotdblright, \guilsinglright, \textreferencemark, \Exclam, \overline, \textasterisklow, \textsemicolonreversed, \medmathspace, \supn, \textfranc, \textlira, \textpesetas, \euro, \BbbC, \incare, \Eulerconst, \scrI, \Im, \scrL, \ell, \BbbN, \textnumero, \textcircledP, \wp, \BbbP, \texttrademark, \BbbZ, \textoz, \textohm, \mho, \frakZ, \turnediota, \scrE, \scrF, \Finv, \scrM, \scro, \aleph, \beth, \gimel, \daleth, \Bbbsum, \Game, \sansLturned, \sansLmirrored, \Yup, \itBbbD, \itBbbd, \itBbbe, \itBbbi, \itBbbj, \scrg, \scrH, \frakH, \BbbH, \Planckconst, \hslash, \hbar, \BbbQ, \scrR, \Re, \BbbR, \textrecipe, \Angstrom, \scrB, \frakC, \textestimated, \scre, \Bbbpi, \Bbbgamma, \BbbGamma, \BbbPi, \PropertyLine, \upand, \fraconethird, \fractwothirds, \fraconefifth, \fractwofifths, \fracthreefifths, \fracfourfifths, \fraconesixth, \fracfivesixths, \fraconeeighth, \fracthreeeighths, \fracfiveeighths, \fracseveneights, \ldasharrhead, \leftdasharrow, \leftdasharrowhead, \rightdasharrow, \updasharrow, \leftarrow, \gets, \shortleftarrow, \uparrow, \rightarrow, \to, \shortrightarrow, \downarrow, \leftrightarrow, \updownarrow, \nwarrow, \nearrow, \searrow, \swarrow, \downdasharrow, \barleftarrow, \rightarrowbar, \leftwhitearrow, \upwhitearrow, \rightwhitearrow, \downwhitearrow, \nleftarrow, \nrightarrow, \leftsquigarrow, \rightsquigarrow, \leadsto, \twoheadleftarrow, \twoheaduparrow, \twoheadrightarrow, \twoheaddownarrow, \leftarrowtail, \rightarrowtail, \mapsfrom, \mapsup, \mapsto, \mapsdown, \updownarrowbar, \hookleftarrow, \hookrightarrow, \looparrowleft, \looparrowright, \leftrightsquigarrow, \nleftrightarrow, \downzigzagarrow, \Lsh, \Rsh, \Ldsh, \Rdsh, \linefeed, \carriagereturn, \curvearrowleft, \curvearrowright, \barovernorthwestarrow, \barleftarrowrightarrowbar, \acwopencirclearrow, \cwopencirclearrow, \leftharpoonup, \leftharpoondown, \upharpoonright, \upharpoonleft, \rightharpoonup, \rightharpoondown, \downharpoonright, \downharpoonleft, \rightleftarrows, \updownarrows, \leftrightarrows, \leftleftarrows, \upuparrows, \rightrightarrows, \downdownarrows, \leftrightharpoons, \rightleftharpoons, \nLeftarrow, \nLeftrightarrow, \nRightarrow, \Leftarrow, \Uparrow, \Rightarrow, \Downarrow, \Leftrightarrow, \Updownarrow, \Nwarrow, \Nearrow, \Searrow, \Swarrow, \Lleftarrow, \Rrightarrow, \leftsquigarrow, \rightsquigarrow, \nHuparrow, \nHdownarrow, \whitearrowupfrombar, \circleonrightarrow, \downuparrows, \rightthreearrows, \nvleftarrow, \nvrightarrow, \nvleftrightarrow, \nVleftarrow, \nVrightarrow, \nVleftrightarrow, \leftarrowtriangle, \rightarrowtriangle, \leftrightarrowtriangle, \forall, \complement, \partial, \exists, \nexists, \varnothing, \emptyset, \increment, \nabla, \in, \varin, \notin, \smallin, \ni, \owns, \varni, \nni, \smallni, \QED, \prod, \coprod, \amalg, \sum, \minus, \mp, \dotplus, \slash, \smallsetminus, \setminus, \ast, \circ, \bullet, \surd, \sqrt, \sqrt3, \sqrt4, \cuberoot, \fourthroot, \propto, \varpropto, \infty, \rightangle, \angle, \measuredangle, \sphericalangle, \mid, \nmid, \parallel, \nparallel, \wedge, \vee, \cap, \cup, \smallint, \int, \iint, \iiint, \oint, \oiint, \oiiint, \intclockwise, \varointclockwise, \ointctrclockwise, \therefore, \because, \colon, \Colon, \dotminus, \dashcolon, \dotsminusdots, \kernelcontraction, \sim, \thicksim, \backsim, \ac, \sinewave, \wr, \nsim, \eqsim, \simeq, \nsime, \cong, \simneqq, \ncong, \approx, \thickapprox, \napprox, \approxeq, \approxident, \backcong, \asymp, \Bumpeq, \bumpeq, \doteq, \Doteq, \fallingdotseq, \risingdotseq, \coloneq, \eqcolon, \eqcirc, \circeq, \arceq, \wedgeq, \veeeq, \stareq, \triangleq, \eqdef, \measeq, \questeq, \ne, \neq, \equiv, \nequiv, \Equiv, \leq, \le, \geq, \ge, \leqq, \geqq, \lneqq, \gneqq, \ll, \gg, \between, \nasymp, \nless, \ngtr, \nleq, \ngeq, \lesssim, \gtrsim, \nlesssim, \ngtrsim, \lessgtr, \gtrless, \nlessgtr, \ngtrless, \prec, \succ, \preccurlyeq, \succcurlyeq, \precsim, \succsim, \nprec, \nsucc, \subset, \supset, \nsubset, \nsupset, \subseteq, \supseteq, \nsubseteq, \nsupseteq, \subsetneq, \supsetneq, \cupleftarrow, \cupdot, \uplus, \sqsubset, \sqsupset, \sqsubseteq, \sqsupseteq, \sqcap, \sqcup, \oplus, \ominus, \otimes, \oslash, \odot, \circledcirc, \circledast, \circledequal, \circleddash, \boxplus, \boxminus, \boxtimes, \boxdot, \vdash, \dashv, \top, \bot, \assert, \models, \vDash, \Vdash, \Vvdash, \VDash, \nvdash, \nvDash, \nVdash, \nVDash, \prurel, \scurel, \vartriangleleft, \lhd, \vartriangleright, \rhd, \trianglelefteq, \unlhd, \trianglerighteq, \unrhd, \origof, \imageof, \multimap, \hermitmatrix, \intercal, \veebar, \barwedge, \barvee, \measuredrightangle, \varlrtriangle, \bigwedge, \bigvee, \bigcap, \bigcup, \smalldiamond, \cdot, \star, \divideontimes, \bowtie, \ltimes, \rtimes, \leftthreetimes, \rightthreetimes, \backsimeq, \curlyvee, \curlywedge, \Subset, \Supset, \Cap, \Cup, \pitchfork, \equalparallel, \lessdot, \gtrdot, \lll, \ggg, \lesseqgtr, \gtreqless, \eqless, \eqgtr, \curlyeqprec, \curlyeqsucc, \npreccurlyeq, \nsucccurlyeq, \nsqsubseteq, \nsqsupseteq, \sqsubsetneq, \sqsupsetneq, \lnsim, \gnsim, \precnsim, \succnsim, \ntriangleleft, \ntriangleright, \ntrianglelefteq, \ntrianglerighteq, \vdots, \cdots, \adots, \ddots, \disin, \varisins, \isins, \isindot, \varisinobar, \isinobar, \isinvb, \isinE, \nisd, \varnis, \nis, \varniobar, \niobar, \bagmember, \diameter, \house, \varbarwedge, \vardoublebarwedge, \lceil, \rceil, \lfloor, \rfloor, \drcrop, \dlcrop, \urcrop, \ulcrop, \invnot, \sqlozenge, \profline, \profsurf, \recorder, \target, \viewdata, \cloverleaf, \turnednot, \watchicon, \ulcorner, \urcorner, \llcorner, \lrcorner, \inttop, \intbottom, \frown, \smile, \clangle, \crangle, \varhexagonlrbonds, \cylcty, \profalar, \conictaper, \topbot, \obar, \APLnotslash, \APLnotbackslash, \APLboxupcaret, \APLboxquestion, \rangledownzigzagarrow, \dircurrent, \hexagon, \lparenuend, \lparenextender, \lparenlend, \rparenuend, \rparenextender, \rparenlend, \lbrackuend, \lbrackextender, \lbracklend, \rbrackuend, \rbrackextender, \rbracklend, \lbraceuend, \lbracemid, \lbracelend, \vbraceextender, \rbraceuend, \rbracemid, \rbracelend, \intextender, \harrowextender, \lmoustache, \rmoustache, \sumtop, \sumbottom, \overbracket, \underbracket, \bbrktbrk, \sqrtbottom, \lvboxline, \rvboxline, \carreturn, \varrowextender, \overparen, \underparen, \overbrace, \underbrace, \obrbrak, \ubrbrak, \trapezium, \benzenr, \strns, \fltns, \accurrent, \elinters, \textvisiblespace, \circledone, \circledtwo, \circledthree, \circledfour, \circledfive, \circledsix, \circledseven, \circledeight, \circlednine, \circledA, \circledB, \circledC, \circledD, \circledE, \circledF, \circledG, \circledH, \circledI, \circledJ, \circledK, \circledL, \circledM, \circledN, \circledO, \circledP, \circledQ, \circledR, \circledS, \circledT, \circledU, \circledV, \circledW, \circledX, \circledY, \circledZ, \circleda, \circledb, \circledc, \circledd, \circlede, \circledf, \circledg, \circledh, \circledi, \circledj, \circledk, \circledl, \circledm, \circledn, \circledo, \circledp, \circledq, \circledr, \circleds, \circledt, \circledu, \circledv, \circledw, \circledx, \circledy, \circledz, \circledzero, \bdhrule, \bdvrule, \bdtriplevdash, \bdquadhdash, \bdquadvdash, \bddvrh, \bddvlh, \bduvrh, \bduvlh, \bdbvrh, \bdbvlh, \bddvbh, \bduvbh, \bdbvbh, \bdHrule, \bdVrule, \bddvrH, \bddVrh, \bddVrH, \bddvlH, \bddVlh, \bddVlH, \bduvrH, \bduVrh, \bduVrH, \bduvlH, \bduVlh, \bduVlH, \bdbvrH, \bdbVrh, \bdbVrH, \bdbvlH, \bdbVlh, \bdbVlH, \bddvbH, \bddVbh, \bddVbH, \bduvbH, \bduVbh, \bduVbH, \bdbvbH, \bdbVbh, \bdbVbH, \bdnesw, \bdnwse, \blockuphalf, \blocklowhalf, \blockfull, \blocklefthalf, \blockrighthalf, \blockqtrshaded, \blockhalfshaded, \blockthreeqtrshaded, \mdlgblksquare, \mdlgwhtsquare, \squoval, \blackinwhitesquare, \squarehfill, \squarevfill, \squarehvfill, \squarenwsefill, \squareneswfill, \squarecrossfill, \squaregrayfill, \smblksquare, \smwhtsquare, \hrectangleblack, \hrectangle, \vrectangleblack, \vrectangle, \parallelogramblack, \parallelogram, \bigblacktriangleup, \bigtriangleup, \blacktriangle, \vartriangle, \blacktriangleright, \triangleright, \smallblacktriangleright, \smalltriangleright, \blackpointerright, \whitepointerright, \bigblacktriangledown, \bigtriangledown, \blacktriangledown, \triangledown, \blacktriangleleft, \triangleleft, \smallblacktriangleleft, \smalltriangleleft, \blackpointerleft, \whitepointerleft, \mdlgblkdiamond, \mdlgwhtdiamond, \diamond, \blackinwhitediamond, \fisheye, \lozenge, \mdlgwhtcircle, \dottedcircle, \circlevertfill, \bullseye, \mdlgblkcircle, \circlelefthalfblack, \circlerighthalfblack, \circlebottomhalfblack, \circletophalfblack, \circleurquadblack, \blackcircleulquadwhite, \blacklefthalfcircle, \blackrighthalfcircle, \inversebullet, \inversewhitecircle, \invwhiteupperhalfcircle, \invwhitelowerhalfcircle, \ularc, \urarc, \lrarc, \llarc, \topsemicircle, \botsemicircle, \lrblacktriangle, \llblacktriangle, \ulblacktriangle, \urblacktriangle, \smwhtcircle, \squareleftblack, \squareleftblack, \squareulblack, \squarelrblack, \boxbar, \trianglecdot, \triangleleftblack, \trianglerightblack, \lgwhtcircle, \squareulquad, \squarellquad, \squarelrquad, \squareurquad, \circleulquad, \circlellquad, \circlelrquad, \circleurquad, \ultriangle, \urtriangle, \lltriangle, \mdwhtsquare, \box, \mdblksquare, \mdsmwhtsquare, \mdsmblksquare, \lrtriangle, \bigstar, \bigwhitestar, \astrosun, \conjunction, \phone, \XBox, \danger, \frownie, \smiley, \blacksmiley, \sun, \rightmoon, \leftmoon, \mercury, \female, \earth, \male, \jupiter, \saturn, \neptune, \pluto, \aries, \taurus, \spadesuit, \heartsuit, \diamondsuit, \clubsuit, \varspadesuit, \varheartsuit, \vardiamondsuit, \varclubsuit, \quarternote, \eighthnote, \twonotes, \flat, \natural, \sharp, \acidfree, \dicei, \diceii, \diceiii, \diceiv, \dicev, \dicevi, \circledrightdot, \circledtwodots, \blackcircledrightdot, \blackcircledtwodots, \triangleexclam, \Hermaphrodite, \mdwhtcircl, \mdblkrcl, \mdsmwhtcircl, \neuter, \scissors, \envelope, \checkmark, \maltese, \circledstar, \varstar, \dingasterisk, \lbrbrak, \rbrbrak, \circledsansone, \circledsanstwo, \circledsansthree, \circledsansfour, \circledsansfive, \circledsanssix, \circledsansseven, \circledsanseight, \circledsansnine, \circledsansten, \blackcircledsansone, \blackcircledsanstwo, \blackcircledsansthree, \blackcircledsansfour, \blackcircledsansfive, \blackcircledsanssix, \blackcircledsansseven, \blackcircledsanseight, \blackcircledsansnine, \blackcircledsansten, \draftingarrow, \threedangle, \whiteinwhitetriangle, \perp, \subsetcirc, \supsetcirc, \lbag, \rbag, \veedot, \bsolhsub, \suphsol, \longdivision, \diamondcdot, \wedgedot, \upin, \pullback, \pushout, \leftouterjoin, \rightouterjoin, \fullouterjoin, \bigbot, \bigtop, \DashVDash, \dashVdash, \multimapinv, \vlongdash, \longdashv, \cirbot, \lozengeminus, \concavediamond, \concavediamondtickleft, \concavediamondtickright, \whitesquaretickleft, \whitesquaretickright, \lBrack, \rBrack, \langle, \rangle, \lAngle, \rAngle, \Lbrbrak, \Rbrbrak, \UUparrow, \DDownarrow, \acwgapcirclearrow, \cwgapcirclearrow, \rightarrowonoplus, \longleftarrow, \longrightarrow, \longleftrightarrow, \Longleftarrow, \Longrightarrow, \Longleftrightarrow, \longmapsfrom, \longmapsto, \Longmapsfrom, \Longmapsto, \longrightsquigarrow, \nvtwoheadrightarrow, \nVtwoheadrightarrow, \nvLeftarrow, \nvRightarrow, \nvLeftrightarrow, \twoheadmapsto, \Mapsfrom, \Mapsto, \downarrowbarred, \uparrowbarred, \Uuparrow, \Ddownarrow, \leftbkarrow, \rightbkarrow, \leftdbkarrow, \dbkarow, \drbkarow, \rightdotarrow, \baruparrow, \downarrowbar, \nvrightarrowtail, \nVrightarrowtail, \twoheadrightarrowtail, \nvtwoheadrightarrowtail, \nVtwoheadrightarrowtail, \lefttail, \righttail, \leftdbltail, \rightdbltail, \diamondleftarrow, \rightarrowdiamond, \diamondleftarrowbar, \barrightarrowdiamond, \nwsearrow, \neswarrow, \hknwarrow, \hknearrow, \hksearow, \hkswarow, \tona, \toea, \tosa, \towa, \rdiagovfdiag, \fdiagovrdiag, \seovnearrow, \neovsearrow, \fdiagovnearrow, \rdiagovsearrow, \neovnwarrow, \nwovnearrow, \rightcurvedarrow, \uprightcurvearrow, \downrightcurvedarrow, \leftdowncurvedarrow, \rightdowncurvedarrow, \cwrightarcarrow, \acwleftarcarrow, \acwoverarcarrow, \acwundercurvearrow, \curvearrowrightminus, \curvearrowleftplus, \cwundercurvearrow, \ccwundercurvearrow, \acwcirclearrow, \cwcirclearrow, \rightarrowshortleftarrow, \leftarrowshortrightarrow, \shortrightarrowleftarrow, \rightarrowplus, \leftarrowplus, \rightarrowx, \leftrightarrowcircle, \twoheaduparrowcircle, \leftrightharpoonupdown, \leftrightharpoondownup, \updownharpoonrightleft, \updownharpoonleftright, \leftrightharpoonupup, \updownharpoonrightright, \leftrightharpoondowndown, \updownharpoonleftleft, \barleftharpoonup, \rightharpoonupbar, \barupharpoonright, \downharpoonrightbar, \barleftharpoondown, \rightharpoondownbar, \barupharpoonleft, \downharpoonleftbar, \leftharpoonupbar, \barrightharpoonup, \upharpoonrightbar, \bardownharpoonright, \leftharpoondownbar, \barrightharpoondown, \upharpoonleftbar, \bardownharpoonleft, \leftharpoonsupdown, \upharpoonsleftright, \rightharpoonsupdown, \downharpoonsleftright, \leftrightharpoonsup, \leftrightharpoonsdown, \rightleftharpoonsup, \rightleftharpoonsdown, \leftharpoonupdash, \dashleftharpoondown, \rightharpoonupdash, \dashrightharpoondown, \updownharpoonsleftright, \downupharpoonsleftright, \rightimply, \equalrightarrow, \similarrightarrow, \leftarrowsimilar, \rightarrowsimilar, \rightarrowapprox, \ltlarr, \leftarrowless, \gtrarr, \subrarr, \leftarrowsubset, \suplarr, \leftfishtail, \rightfishtail, \upfishtail, \downfishtail, \Vvert, \mdsmblkcircle, \typecolon, \lBrace, \rBrace, \lParen, \rParen, \llparenthesis, \rrparenthesis, \llangle, \rrangle, \lbrackubar, \rbrackubar, \lbrackultick, \rbracklrtick, \lbracklltick, \rbrackurtick, \langledot, \rangledot, \lparenless, \rparengtr, \Lparengtr, \Rparenless, \lblkbrbrak, \rblkbrbrak, \fourvdots, \vzigzag, \measuredangleleft, \rightanglesqr, \rightanglemdot, \angles, \angdnr, \gtlpar, \sphericalangleup, \turnangle, \revangle, \angleubar, \revangleubar, \wideangledown, \wideangleup, \measanglerutone, \measanglelutonw, \measanglerdtose, \measangleldtosw, \measangleurtone, \measangleultonw, \measangledrtose, \measangledltosw, \revemptyset, \emptysetobar, \emptysetocirc, \emptysetoarr, \emptysetoarrl, \circlehbar, \circledvert, \circledparallel, \obslash, \operp, \obot, \olcross, \odotslashdot, \uparrowoncircle, \circledwhitebullet, \circledbullet, \olessthan, \ogreaterthan, \cirscir, \cirE, \boxdiag, \boxbslash, \boxast, \boxcircle, \boxbox, \boxonbox, \triangleodot, \triangleubar, \triangles, \triangleserifs, \rtriltri, \ltrivb, \vbrtri, \lfbowtie, \rfbowtie, \fbowtie, \lftimes, \rftimes, \hourglass, \blackhourglass, \lvzigzag, \rvzigzag, \Lvzigzag, \Rvzigzag, \iinfin, \tieinfty, \nvinfty, \dualmap, \laplac, \lrtriangleeq, \shuffle, \eparsl, \smeparsl, \eqvparsl, \gleichstark, \thermod, \downtriangleleftblack, \downtrianglerightblack, \blackdiamonddownarrow, \mdlgblklozenge, \circledownarrow, \blackcircledownarrow, \errbarsquare, \errbarblacksquare, \errbardiamond, \errbarblackdiamond, \errbarcircle, \errbarblackcircle, \ruledelayed, \setminus, \dsol, \rsolbar, \xsol, \xbsol, \doubleplus, \tripleplus, \lcurvyangle, \rcurvyangle, \tplus, \tminus, \sumint, \iiiint, \intbar, \intBar, \fint, \circfint, \awint, \rppolint, \scpolint, \npolint, \pointnt, \sqint, \intlharhk, \intx, \intcap, \intcup, \upint, \lowint, \zpipe, \ringplus, \plushat, \simplus, \plusdot, \plussim, \plussubtwo, \plustrif, \commaminus, \minusdot, \minusfdots, \minusrdots, \opluslhrim, \oplusrhrim, \vectimes, \dottimes, \timesbar, \btimes, \smashtimes, \otimeslhrim, \otimesrhrim, \otimeshat, \Otimes, \odiv, \triangleplus, \triangleminus, \triangletimes, \intprod, \intprodr, \fcmp, \amalg, \capdot, \uminus, \barcup, \barcap, \capwedge, \cupvee, \twocups, \twocaps, \closedvarcup, \closedvarcap, \Sqcap, \Sqcup, \closedvarcupsmashprod, \wedgeodot, \veeodot, \Wedge, \Vee, \wedgeonwedge, \veeonvee, \bigslopedvee, \bigslopedwedge, \veeonwedge, \wedgemidvert, \veemidvert, \midbarwedge, \midbarvee, \doublebarwedge, \wedgebar, \wedgedoublebar, \varveebar, \doublebarvee, \veedoublebar, \dsub, \rsub, \eqdot, \dotequiv, \equivVert, \equivVvert, \dotsim, \simrdots, \simminussim, \congdot, \asteq, \hatapprox, \approxeqq, \eqqplus, \pluseqq, \eqqsim, \Coloneq, \eqeq, \eqeqeq, \ddotseq, \equivDD, \ltcir, \gtcir, \ltquest, \gtquest, \leqslant, \geqslant, \lesdot, \gesdot, \lesdoto, \gesdoto, \lesdotor, \gesdotol, \lessapprox, \gtrapprox, \lneq, \gneq, \lnapprox, \gnapprox, \lesseqqgtr, \gtreqqless, \lsime, \gsime, \lsimg, \gsiml, \lgE, \glE, \lesges, \gesles, \eqslantless, \eqslantgtr, \elsdot, \egsdot, \eqqless, \eqqgtr, \eqqslantless, \eqqslantgtr, \simless, \simgtr, \simlE, \simgE, \Lt, \Gt, \partialmeetcontraction, \glj, \gla, \ltcc, \gtcc, \lescc, \gescc, \smt, \lat, \smte, \late, \bumpeqq, \preceq, \succeq, \precneq, \succneq, \preceqq, \succeqq, \precneqq, \succneqq, \precapprox, \succapprox, \precnapprox, \succnapprox, \Prec, \Sc, \subsetdot, \supsetdot, \subsetplus, \supsetplus, \submult, \supmult, \subedot, \supedot, \subseteqq, \supseteqq, \subsim, \supsim, \subsetapprox, \supsetapprox, \subsetneqq, \supsetneqq, \lsqhook, \rsqhook, \csub, \csup, \csube, \csupe, \subsup, \supsub, \subsub, \supsup, \suphsub, \supdsub, \forkv, \topfork, \mlcp, \forks, \forksnot, \shortlefttack, \shortdowntack, \shortuptack, \perps, \vDdash, \dashV, \Dashv, \DashV, \varVdash, \Barv, \vBar, \vBarv, \barV, \Vbar, \Not, \bNot, \revnmid, \cirmid, \midcir, \topcir, \nhpar, \parsim, \interleave, \nhVvert, \threedotcolon, \lllnest, \gggnest, \leqqslant, \leqqslant, \talloblong, \squareurblack, \squarellblack, \diamondleftblack, \diamondrightblack, \diamondtopblack, \diamondbotblack, \dottedsquare, \lgblksquare, \lgwhtsquare, \vysmlblksquare, \vysmlwhtsquare, \pentagonblack, \pentagon, \varhexagon, \varhexagonblack, \hexagonblack, \lgblkcircle, \mdblkdiamond, \mdwhtdiamond, \mdblklozenge, \mdwhtlozenge, \smblkdiamond, \smblklozenge, \smwhtlozenge, \blkhorzoval, \whthorzoval, \blkvertoval, \whtvertoval, \circleonleftarrow, \leftthreearrows, \leftarrowonoplus, \longleftsquigarrow, \nvtwoheadleftarrow, \nVtwoheadleftarrow, \twoheadmapsfrom, \twoheadleftdbkarrow, \leftdotarrow, \nvleftarrowtail, \nVleftarrowtail, \twoheadleftarrowtail, \nvtwoheadleftarrowtail, \nVtwoheadleftarrowtail, \leftarrowx, \leftcurvedarrow, \equalleftarrow, \bsimilarleftarrow, \leftarrowbackapprox, \rightarrowgtr, \rightarrowsupset, \LLeftarrow, \RRightarrow, \bsimilarrightarrow, \rightarrowbackapprox, \similarleftarrow, \leftarrowapprox, \leftarrowbsimilar, \righarrowbsimilar, \medwhitestar, \medblackstar, \smwhitestar, \rightpentagonblack, \rightpentagon, \postalmark, \hzigzag, \hiraganano, \textheng, \texthen, \calB, \calE, \calF, \calH, \calM, \calR. +@strong{Special symbols}: + +\# (#), \% (%), \& (&), \^ (^). + +\AA (Å), \AE (Æ), \APLboxquestion (⍰), \APLboxupcaret (⍓), \APLnotbackslash (⍀), \APLnotslash (⌿), \Alpha (Α), \And (&), \Angstrom (Å), \Barv (â«§), \BbbC (ℂ), \BbbGamma (ℾ), \BbbH (ℍ), \BbbN (ℕ), \BbbP (ℙ), \BbbPi (ℿ), \BbbQ (ℚ), \BbbR (ℝ), \BbbZ (ℤ), \Bbbgamma (ℽ), \Bbbpi (ℼ), \Bbbsum (⅀), \Beta (Β), \Bumpeq (≎), \Cap (⋒), \Chi (Χ), \Colon (∷), \Coloneq (â©´), \Cup (⋓), \DDownarrow (⟱), \DH (Ð), \DJ (Đ), \DashV (â«¥), \DashVDash (⟚), \Dashv (⫤), \Ddownarrow (⤋), \Delta (Δ), \Digamma (Ϝ), \Doteq (≑), \Downarrow (⇓), \Epsilon (Ε), \Equiv (≣), \Eta (Η), \Eulerconst (ℇ), \Exclam (‼), \Finv (Ⅎ), \Game (⅁), \Gamma (Γ), \Gt (⪢), \Hermaphrodite (⚥), \Im (ℑ), \Iota (Ι), \Kappa (Κ), \Koppa (Ϟ), \L (Ł), \LLeftarrow (⭅), \Lambda (Λ), \Lbrbrak (⟬), \Ldsh (↲), \Leftarrow (⇐), \Leftrightarrow (⇔), \Lleftarrow (⇚), \Longleftarrow (⟸), \Longleftrightarrow (⟺), \Longmapsfrom (⟽), \Longmapsto (⟾), \Longrightarrow (⟹), \Lparengtr (⦕), \Lsh (↰), \Lt (⪡), \Lvzigzag (⧚), \Mapsfrom (⤆), \Mapsto (⤇), \Mu (Μ), \NG (Ŋ), \Nearrow (⇗), \Not (⫬), \Nu (Ν), \Nwarrow (⇖), \O (Ø), \OE (Œ), \Ohorn (Æ ), \Omega (Ω), \Omicron (Ο), \Otimes (⨷), \P (¶), \Phi (Φ), \Pi (Π), \Planckconst (ℎ), \Prec (⪻), \PropertyLine (⅊), \Psi (Ψ), \QED (∎), \Question (⁇), \RRightarrow (⭆), \Rbrbrak (⟭), \Rdsh (↳), \Re (ℜ), \Rho (Ρ), \Rightarrow (⇒), \Rparenless (⦖), \Rrightarrow (⇛), \Rsh (↱), \Rvzigzag (⧛), \S (§), \Sc (⪼), \Searrow (⇘), \Sigma (Σ), \Sqcap (⩎), \Sqcup (⩏), \Stigma (Ϛ), \Subset (⋐), \Supset (⋑), \Swarrow (⇙), \TH (Þ), \Tau (Τ), \Theta (Θ), \UUparrow (⟰), \Uhorn (Ư), \Uparrow (⇑), \Updownarrow (⇕), \Uuparrow (⤊), \VDash (⊫), \Vbar (â««), \Vdash (⊩), \Vee (⩔), \Vert (‖), \Vvdash (⊪), \Vvert (⦀), \Wedge (⩓), \XBox (☒), \Xi (Ξ), \Yup (⅄), \Zbar (Ƶ), \Zeta (Ζ). + +\aa (Ã¥), \ac (∾), \accurrent (⏦), \acidfree (♾), \acwcirclearrow (⥀), \acwgapcirclearrow (⟲), \acwleftarcarrow (⤹), \acwopencirclearrow (↺), \acwoverarcarrow (⤺), \acwundercurvearrow (⤻), \adots (⋰), \ae (æ), \aleph (ℵ), \alpha (α), \amalg (⨿), \angdnr (⦟), \angle (∠), \angles (⦞), \angleubar (⦤), \approx (≈), \approxeq (≊), \approxeqq (â©°), \approxident (≋), \arceq (≘), \aries (♈), \assert (⊦), \ast (∗), \asteq (â©®), \astrosun (☉), \asymp (≍), \awint (⨑). + +\bNot (â«­), \backcong (≌), \backdprime (‶), \backepsilon (϶), \backprime (‵), \backsim (∽), \backsimeq (⋍), \backslash (\), \backtrprime (‷), \bagmember (⋿), \barV (⫪), \barcap (⩃), \barcup (⩂), \bardownharpoonleft (⥡), \bardownharpoonright (⥝), \barleftarrow (⇤), \barleftarrowrightarrowbar (↹), \barleftharpoondown (⥖), \barleftharpoonup (⥒), \barovernorthwestarrow (↸), \barrightarrowdiamond (⤠), \barrightharpoondown (⥟), \barrightharpoonup (⥛), \baruparrow (⤒), \barupharpoonleft (⥘), \barupharpoonright (⥔), \barvee (⊽), \barwedge (⊼), \bbrktbrk (⎶), \bdHrule (═), \bdVrule (║), \bdbVbH (╬), \bdbVbh (╫), \bdbVlH (╣), \bdbVlh (╢), \bdbVrH (╠), \bdbVrh (╟), \bdbvbH (╪), \bdbvbh (┼), \bdbvlH (╡), \bdbvlh (┤), \bdbvrH (╞), \bdbvrh (├), \bddVbH (╦), \bddVbh (╥), \bddVlH (╗), \bddVlh (╖), \bddVrH (╔), \bddVrh (╓), \bddvbH (╤), \bddvbh (┬), \bddvlH (╕), \bddvlh (┐), \bddvrH (╒), \bddvrh (┌), \bdhrule (─), \bdnesw (╱), \bdnwse (╲), \bdquadhdash (┈), \bdquadvdash (┊), \bdtriplevdash (┆), \bduVbH (╩), \bduVbh (╨), \bduVlH (╝), \bduVlh (╜), \bduVrH (╚), \bduVrh (╙), \bduvbH (╧), \bduvbh (┴), \bduvlH (╛), \bduvlh (┘), \bduvrH (╘), \bduvrh (└), \bdvrule (│), \because (∵), \benzenr (⏣), \beta (β), \beth (ℶ), \between (≬), \bigblacktriangledown (▼), \bigblacktriangleup (▲), \bigbot (⟘), \bigcap (⋂), \bigcup (⋃), \bigslopedvee (⩗), \bigslopedwedge (⩘), \bigstar (★), \bigtop (⟙), \bigtriangledown (▽), \bigtriangleup (△), \bigvee (⋁), \bigwedge (⋀), \bigwhitestar (☆), \blackcircledownarrow (â§­), \blackcircledrightdot (⚈), \blackcircledsanseight (➑), \blackcircledsansfive (➎), \blackcircledsansfour (➍), \blackcircledsansnine (➒), \blackcircledsansone (➊), \blackcircledsansseven (➐), \blackcircledsanssix (➏), \blackcircledsansten (➓), \blackcircledsansthree (➌), \blackcircledsanstwo (➋), \blackcircledtwodots (⚉), \blackcircleulquadwhite (◕), \blackdiamonddownarrow (⧪), \blackhourglass (⧗), \blackinwhitediamond (◈), \blackinwhitesquare (▣), \blacklefthalfcircle (◖), \blackpointerleft (◄), \blackpointerright (►), \blackrighthalfcircle (◗), \blacksmiley (☻), \blacktriangle (▴), \blacktriangledown (▾), \blacktriangleleft (◀), \blacktriangleright (▶), \blkhorzoval (⬬), \blkvertoval (⬮), \blockfull (█), \blockhalfshaded (▒), \blocklefthalf (▌), \blocklowhalf (▄), \blockqtrshaded (░), \blockrighthalf (▐), \blockthreeqtrshaded (▓), \blockuphalf (▀), \bot (⊥), \botsemicircle (◡), \bowtie (⋈), \box (◻), \boxast (⧆), \boxbar (◫), \boxbox (⧈), \boxbslash (⧅), \boxcircle (⧇), \boxdiag (⧄), \boxdot (⊡), \boxminus (⊟), \boxonbox (⧉), \boxplus (⊞), \boxtimes (⊠), \bsimilarleftarrow (⭁), \bsimilarrightarrow (⭇), \bsolhsub (⟈), \btimes (⨲), \bullet (∙), \bullseye (◎), \bumpeq (≏), \bumpeqq (⪮). + +\calB (ℬ), \calE (ℰ), \calF (ℱ), \calH (ℋ), \calM (ℳ), \calR (ℛ), \cap (∩), \capdot (⩀), \capwedge (⩄), \caretinsert (‸), \carreturn (⏎), \carriagereturn (↵), \ccwundercurvearrow (⤿), \cdot (⋅), \cdotp (·), \cdots (⋯), \cdprime (ʺ), \checkmark (✓), \chi (χ), \cirE (⧃), \cirbot (⟟), \circ (∘), \circeq (≗), \circfint (⨐), \circlebottomhalfblack (◒), \circledA (Ⓐ), \circledB (Ⓑ), \circledC (Ⓒ), \circledD (Ⓓ), \circledE (Ⓔ), \circledF (Ⓕ), \circledG (Ⓖ), \circledH (Ⓗ), \circledI (Ⓘ), \circledJ (Ⓙ), \circledK (Ⓚ), \circledL (Ⓛ), \circledM (Ⓜ), \circledN (Ⓝ), \circledO (Ⓞ), \circledP (Ⓟ), \circledQ (Ⓠ), \circledR (Ⓡ), \circledS (Ⓢ), \circledT (Ⓣ), \circledU (Ⓤ), \circledV (Ⓥ), \circledW (Ⓦ), \circledX (Ⓧ), \circledY (Ⓨ), \circledZ (Ⓩ), \circleda (ⓐ), \circledast (⊛), \circledb (ⓑ), \circledbullet (⦿), \circledc (ⓒ), \circledcirc (⊚), \circledd (ⓓ), \circleddash (⊝), \circlede (ⓔ), \circledeight (⑧), \circledequal (⊜), \circledf (ⓕ), \circledfive (⑤), \circledfour (④), \circledg (ⓖ), \circledh (ⓗ), \circledi (ⓘ), \circledj (ⓙ), \circledk (ⓚ), \circledl (ⓛ), \circledm (ⓜ), \circledn (ⓝ), \circlednine (⑨), \circledo (ⓞ), \circledone (①), \circledownarrow (⧬), \circledp (ⓟ), \circledparallel (⦷), \circledq (ⓠ), \circledr (ⓡ), \circledrightdot (⚆), \circleds (ⓢ), \circledsanseight (➇), \circledsansfive (➄), \circledsansfour (➃), \circledsansnine (➈), \circledsansone (➀), \circledsansseven (➆), \circledsanssix (➅), \circledsansten (➉), \circledsansthree (➂), \circledsanstwo (➁), \circledseven (⑦), \circledsix (⑥), \circledstar (✪), \circledt (ⓣ), \circledthree (③), \circledtwo (②), \circledtwodots (⚇), \circledu (ⓤ), \circledv (ⓥ), \circledvert (⦶), \circledw (ⓦ), \circledwhitebullet (⦾), \circledx (ⓧ), \circledy (ⓨ), \circledz (ⓩ), \circledzero (⓪), \circlehbar (⦵), \circlelefthalfblack (◐), \circlellquad (◵), \circlelrquad (◶), \circleonleftarrow (⬰), \circleonrightarrow (⇴), \circlerighthalfblack (◑), \circletophalfblack (◓), \circleulquad (◴), \circleurquad (◷), \circleurquadblack (◔), \circlevertfill (◍), \cirmid (⫯), \cirscir (⧂), \clangle (〈), \closedvarcap (⩍), \closedvarcup (⩌), \closedvarcupsmashprod (⩐), \closure (⁐), \cloverleaf (⌘), \clubsuit (♣), \colon (:), \colon (∶), \coloneq (≔), \commaminus (⨩), \complement (∁), \concavediamond (⟡), \concavediamondtickleft (⟢), \concavediamondtickright (⟣), \cong (≅), \congdot (â©­), \conictaper (⌲), \conjunction (☌), \coprod (∐), \cprime (ʹ), \crangle (〉), \csub (⫏), \csube (⫑), \csup (⫐), \csupe (⫒), \cuberoot (∛), \cup (∪), \cupdot (⊍), \cupleftarrow (⊌), \cupvee (⩅), \curlyeqprec (⋞), \curlyeqsucc (⋟), \curlyvee (⋎), \curlywedge (⋏), \curvearrowleft (↶), \curvearrowleftplus (⤽), \curvearrowright (↷), \curvearrowrightminus (⤼), \cwcirclearrow (⥁), \cwgapcirclearrow (⟳), \cwopencirclearrow (↻), \cwrightarcarrow (⤸), \cwundercurvearrow (⤾), \cylcty (⌭). + +\dag (†), \dagger (†), \daleth (ℸ), \danger (☡), \dashV (â«£), \dashVdash (⟛), \dashcolon (∹), \dashleftharpoondown (⥫), \dashrightharpoondown (⥭), \dashv (⊣), \dbkarow (⤏), \ddag (‡), \ddagger (‡), \ddots (⋱), \ddotseq (â©·), \delta (δ), \dh (ð), \diameter (⌀), \diamond (◇), \diamondbotblack (⬙), \diamondcdot (⟐), \diamondleftarrow (⤝), \diamondleftarrowbar (⤟), \diamondleftblack (⬖), \diamondrightblack (⬗), \diamondsuit (♢), \diamondtopblack (⬘), \dicei (⚀), \diceii (⚁), \diceiii (⚂), \diceiv (⚃), \dicev (⚄), \dicevi (⚅), \digamma (ϝ), \dingasterisk (✽), \dircurrent (⎓), \disin (⋲), \div (÷), \divideontimes (⋇), \dj (đ), \dlcrop (⌍), \doteq (≐), \dotequiv (â©§), \dotminus (∸), \dotplus (∔), \dots (…), \dotsim (⩪), \dotsminusdots (∺), \dottedcircle (◌), \dottedsquare (⬚), \dottimes (⨰), \doublebarvee (â©¢), \doublebarwedge (⩞), \doubleplus (⧺), \downarrow (↓), \downarrowbar (⤓), \downarrowbarred (⤈), \downdasharrow (⇣), \downdownarrows (⇊), \downfishtail (⥿), \downharpoonleft (⇃), \downharpoonleftbar (⥙), \downharpoonright (⇂), \downharpoonrightbar (⥕), \downharpoonsleftright (⥥), \downrightcurvedarrow (⤵), \downtriangleleftblack (⧨), \downtrianglerightblack (â§©), \downuparrows (⇵), \downupharpoonsleftright (⥯), \downwhitearrow (⇩), \downzigzagarrow (↯), \dprime (″), \draftingarrow (➛), \drbkarow (⤐), \drcrop (⌌), \dsol (â§¶), \dsub (⩤), \dualmap (⧟). + +\earth (♁), \egsdot (⪘), \eighthnote (♪), \elinters (⏧), \ell (ℓ), \elsdot (⪗), \emdash (—), \emptyset (∅), \emptysetoarr (⦳), \emptysetoarrl (⦴), \emptysetobar (⦱), \emptysetocirc (⦲), \endash (–), \enleadertwodots (‥), \envelope (✉), \eparsl (â§£), \epsilon (ϵ), \eqcirc (≖), \eqcolon (≕), \eqdef (≝), \eqdot (⩦), \eqeq (⩵), \eqeqeq (â©¶), \eqgtr (⋝), \eqless (⋜), \eqqgtr (⪚), \eqqless (⪙), \eqqplus (⩱), \eqqsim (⩳), \eqqslantgtr (⪜), \eqqslantless (⪛), \eqsim (≂), \eqslantgtr (⪖), \eqslantless (⪕), \equalleftarrow (⭀), \equalparallel (⋕), \equalrightarrow (⥱), \equiv (≡), \equivDD (⩸), \equivVert (⩨), \equivVvert (â©©), \eqvparsl (â§¥), \errbarblackcircle (â§³), \errbarblackdiamond (â§±), \errbarblacksquare (⧯), \errbarcircle (â§²), \errbardiamond (â§°), \errbarsquare (â§®), \eta (η), \euro (€), \exists (∃). + +\fallingdotseq (≒), \fbowtie (⧓), \fcmp (⨾), \fdiagovnearrow (⤯), \fdiagovrdiag (⤬), \female (♀), \figdash (‒), \fint (⨏), \fisheye (◉), \flat (♭), \fltns (⏥), \forall (∀), \forks (⫝̸), \forksnot (⫝), \forkv (⫙), \fourthroot (∜), \fourvdots (⦙), \fracfiveeighths (⅝), \fracfivesixths (⅚), \fracfourfifths (⅘), \fraconeeighth (⅛), \fraconefifth (⅕), \fraconesixth (⅙), \fraconethird (⅓), \fracseveneights (⅞), \fracslash (⁄), \fracthreeeighths (⅜), \fracthreefifths (⅗), \fractwofifths (⅖), \fractwothirds (⅔), \frakC (ℭ), \frakH (ℌ), \frakZ (ℨ), \frown (⌢), \frownie (☹), \fullouterjoin (⟗). + +\gamma (γ), \ge (≥), \geq (≥), \geqq (≧), \geqslant (⩾), \gescc (⪩), \gesdot (⪀), \gesdoto (⪂), \gesdotol (⪄), \gesles (⪔), \gets (←), \gg (≫), \ggg (⋙), \gggnest (⫸), \gimel (ℷ), \glE (⪒), \gla (⪥), \gleichstark (⧦), \glj (⪤), \gnapprox (⪊), \gneq (⪈), \gneqq (≩), \gnsim (⋧), \greater (>), \gsime (⪎), \gsiml (⪐), \gtcc (⪧), \gtcir (⩺), \gtlpar (⦠), \gtquest (⩼), \gtrapprox (⪆), \gtrarr (⥸), \gtrdot (⋗), \gtreqless (⋛), \gtreqqless (⪌), \gtrless (≷), \gtrsim (≳), \guillemotleft («), \guillemotright (»), \guilsinglleft (‹), \guilsinglright (›). + +\harrowextender (⎯), \hatapprox (⩯), \hbar (ℏ), \heartsuit (♡), \hermitmatrix (⊹), \hexagon (⎔), \hexagonblack (⬣), \hiraganano (の), \hknearrow (⤤), \hknwarrow (⤣), \hksearow (⤥), \hkswarow (⤦), \hookleftarrow (↩), \hookrightarrow (↪), \horizbar (―), \hourglass (⧖), \house (⌂), \hrectangle (▭), \hrectangleblack (▬), \hslash (ℏ), \hyphenbullet (⁃), \hzigzag (〰). + +\iiiint (⨌), \iiint (∭), \iinfin (⧜), \iint (∬), \imageof (⊷), \in (∈), \incare (℅), \increment (∆), \infty (∞), \int (∫), \intBar (⨎), \intbar (⨍), \intbottom (⌡), \intcap (⨙), \intclockwise (∱), \intcup (⨚), \intercal (⊺), \interleave (â«´), \intextender (⎮), \intlharhk (⨗), \intprod (⨼), \intprodr (⨽), \inttop (⌠), \intx (⨘), \inversebullet (◘), \inversewhitecircle (◙), \invnot (⌐), \invwhitelowerhalfcircle (◛), \invwhiteupperhalfcircle (◚), \iota (ι), \ipasupgamma (Ë ), \ipasupl (Ë¡), \ipasuprerglotstpp (ˤ), \ipasups (Ë¢), \ipasupx (Ë£), \ipaunaspirated (Ë­), \ipavoicing (ˬ), \isinE (⋹), \isindot (⋵), \isinobar (⋷), \isins (⋴), \isinvb (⋸), \itBbbD (ⅅ), \itBbbd (ⅆ), \itBbbe (ⅇ), \itBbbi (ⅈ), \itBbbj (ⅉ). + +\jupiter (♃), \kappa (κ), \kernelcontraction (∻), \koppa (ϟ). + +\l (ł), \lAngle (⟪), \lBrace (⦃), \lBrack (⟦), \lParen (⦅), \lambda (λ), \lambdabar (ƛ), \langle (⟨), \langledot (⦑), \laplac (â§ ), \lasp (ʽ), \lat (⪫), \late (⪭), \lbag (⟅), \lblkbrbrak (⦗), \lbrace (@{), \lbracelend (⎩), \lbracemid (⎨), \lbraceuend (⎧), \lbrack ([), \lbrackextender (⎢), \lbracklend (⎣), \lbracklltick (⦏), \lbrackubar (⦋), \lbrackuend (⎡), \lbrackultick (⦍), \lbrbrak (❲), \lceil (⌈), \lcurvyangle (â§¼), \ldasharrhead (⇠), \le (≤), \leadsto (↝), \leftarrow (←), \leftarrowapprox (⭊), \leftarrowbackapprox (⭂), \leftarrowbsimilar (⭋), \leftarrowless (⥷), \leftarrowonoplus (⬲), \leftarrowplus (⥆), \leftarrowshortrightarrow (⥃), \leftarrowsimilar (⥳), \leftarrowsubset (⥺), \leftarrowtail (↢), \leftarrowtriangle (⇽), \leftarrowx (⬾), \leftbkarrow (⤌), \leftcurvedarrow (⬿), \leftdasharrow (⇠), \leftdasharrowhead (⇡), \leftdbkarrow (⤎), \leftdbltail (⤛), \leftdotarrow (⬸), \leftdowncurvedarrow (⤶), \leftfishtail (⥼), \leftharpoondown (↽), \leftharpoondownbar (⥞), \leftharpoonsupdown (⥢), \leftharpoonup (↼), \leftharpoonupbar (⥚), \leftharpoonupdash (⥪), \leftleftarrows (⇇), \leftmoon (☾), \leftouterjoin (⟕), \leftrightarrow (↔), \leftrightarrowcircle (⥈), \leftrightarrows (⇆), \leftrightarrowtriangle (⇿), \leftrightharpoondowndown (⥐), \leftrightharpoondownup (⥋), \leftrightharpoons (⇋), \leftrightharpoonsdown (⥧), \leftrightharpoonsup (⥦), \leftrightharpoonupdown (⥊), \leftrightharpoonupup (⥎), \leftrightsquigarrow (↭), \leftsquigarrow (↜), \leftsquigarrow (⇜), \lefttail (⤙), \leftthreearrows (⬱), \leftthreetimes (⋋), \leftwhitearrow (⇦), \leq (≤), \leqq (≦), \leqqslant (⫹), \leqqslant (⫺), \leqslant (⩽), \lescc (⪨), \lesdot (â©¿), \lesdoto (⪁), \lesdotor (⪃), \lesges (⪓), \less (<), \lessapprox (⪅), \lessdot (⋖), \lesseqgtr (⋚), \lesseqqgtr (⪋), \lessgtr (≶), \lesssim (≲), \lfbowtie (⧑), \lfloor (⌊), \lftimes (⧔), \lgE (⪑), \lgblkcircle (⬤), \lgblksquare (⬛), \lgwhtcircle (◯), \lgwhtsquare (⬜), \lhd (⊲), \linefeed (↴), \ll (≪), \llangle (⦉), \llarc (◟), \llblacktriangle (◣), \llcorner (⌞), \lll (⋘), \lllnest (â«·), \llparenthesis (⦇), \lltriangle (◺), \lmoustache (⎰), \lnapprox (⪉), \lneq (⪇), \lneqq (≨), \lnsim (⋦), \longdashv (⟞), \longdivision (⟌), \longleftarrow (⟵), \longleftrightarrow (⟷), \longleftsquigarrow (⬳), \longmapsfrom (⟻), \longmapsto (⟼), \longrightarrow (⟶), \longrightsquigarrow (⟿), \looparrowleft (↫), \looparrowright (↬), \lowint (⨜), \lozenge (◊), \lozengeminus (⟠), \lparenextender (⎜), \lparenlend (⎝), \lparenless (⦓), \lparenuend (⎛), \lq (‘), \lrarc (◞), \lrblacktriangle (◢), \lrcorner (⌟), \lrtriangle (◿), \lrtriangleeq (â§¡), \lsime (⪍), \lsimg (⪏), \lsqhook (⫍), \ltcc (⪦), \ltcir (⩹), \ltimes (⋉), \ltlarr (⥶), \ltquest (â©»), \ltrivb (⧏), \lvboxline (⎸), \lvzigzag (⧘). + +\male (♂), \maltese (✠), \mapsdown (↧), \mapsfrom (↤), \mapsto (↦), \mapsup (↥), \mdblkdiamond (⬥), \mdblklozenge (⬧), \mdblkrcl (⚫), \mdblksquare (◼), \mdlgblkcircle (●), \mdlgblkdiamond (◆), \mdlgblklozenge (â§«), \mdlgblksquare (■), \mdlgwhtcircle (○), \mdlgwhtdiamond (◇), \mdlgwhtsquare (□), \mdsmblkcircle (⦁), \mdsmblksquare (◾), \mdsmwhtcircl (⚬), \mdsmwhtsquare (◽), \mdwhtcircl (⚪), \mdwhtdiamond (⬦), \mdwhtlozenge (⬨), \mdwhtsquare (◻), \measangledltosw (⦯), \measangledrtose (⦮), \measangleldtosw (⦫), \measanglelutonw (⦩), \measanglerdtose (⦪), \measanglerutone (⦨), \measangleultonw (⦭), \measangleurtone (⦬), \measeq (≞), \measuredangle (∡), \measuredangleleft (⦛), \measuredrightangle (⊾), \medblackstar (⭑), \medmathspace ( ), \medwhitestar (⭐), \mercury (☿), \mho (℧), \mid (∣), \midbarvee (⩝), \midbarwedge (⩜), \midcir (â«°), \minus (−), \minusdot (⨪), \minusfdots (⨫), \minusrdots (⨬), \mlcp (⫛), \models (⊧), \mp (∓), \mu (μ), \multimap (⊸), \multimapinv (⟜). + +\nHdownarrow (⇟), \nHuparrow (⇞), \nLeftarrow (⇍), \nLeftrightarrow (⇎), \nRightarrow (⇏), \nVDash (⊯), \nVdash (⊮), \nVleftarrow (⇺), \nVleftarrowtail (⬺), \nVleftrightarrow (⇼), \nVrightarrow (⇻), \nVrightarrowtail (⤕), \nVtwoheadleftarrow (⬵), \nVtwoheadleftarrowtail (⬽), \nVtwoheadrightarrow (⤁), \nVtwoheadrightarrowtail (⤘), \nabla (∇), \napprox (≉), \nasymp (≭), \natural (♮), \ncong (≇), \ne (≠), \nearrow (↗), \neg (¬), \neovnwarrow (⤱), \neovsearrow (⤮), \neptune (♆), \neq (≠), \nequiv (≢), \neswarrow (⤢), \neuter (⚲), \nexists (∄), \ng (ŋ), \ngeq (≱), \ngtr (≯), \ngtrless (≹), \ngtrsim (≵), \nhVvert (⫵), \nhpar (⫲), \ni (∋), \niobar (⋾), \nis (⋼), \nisd (⋺), \nleftarrow (↚), \nleftrightarrow (↮), \nleq (≰), \nless (≮), \nlessgtr (≸), \nlesssim (≴), \nmid (∤), \nni (∌), \nobreakhyphen (‑), \notin (∉), \nparallel (∦), \npolint (⨔), \nprec (⊀), \npreccurlyeq (⋠), \nrightarrow (↛), \nsim (≁), \nsime (≄), \nsqsubseteq (⋢), \nsqsupseteq (⋣), \nsubset (⊄), \nsubseteq (⊈), \nsucc (⊁), \nsucccurlyeq (⋡), \nsupset (⊅), \nsupseteq (⊉), \ntriangleleft (⋪), \ntrianglelefteq (⋬), \ntriangleright (⋫), \ntrianglerighteq (⋭), \nu (ν), \nvDash (⊭), \nvLeftarrow (⤂), \nvLeftrightarrow (⤄), \nvRightarrow (⤃), \nvdash (⊬), \nvinfty (⧞), \nvleftarrow (⇷), \nvleftarrowtail (⬹), \nvleftrightarrow (⇹), \nvrightarrow (⇸), \nvrightarrowtail (⤔), \nvtwoheadleftarrow (⬴), \nvtwoheadleftarrowtail (⬼), \nvtwoheadrightarrow (⤀), \nvtwoheadrightarrowtail (⤗), \nwarrow (↖), \nwovnearrow (⤲), \nwsearrow (⤡). + +\o (ø), \obar (⌽), \obot (⦺), \obrbrak (⏠), \obslash (⦸), \odiv (⨸), \odot (⊙), \odotslashdot (⦼), \oe (œ), \ogreaterthan (⧁), \ohorn (Æ¡), \oiiint (∰), \oiint (∯), \oint (∮), \ointctrclockwise (∳), \olcross (⦻), \oldKoppa (Ϙ), \oldkoppa (ϙ), \olessthan (⧀), \omega (ω), \omicron (ο), \ominus (⊖), \operp (⦹), \oplus (⊕), \opluslhrim (⨭), \oplusrhrim (⨮), \origof (⊶), \oslash (⊘), \otimes (⊗), \otimeshat (⨶), \otimeslhrim (⨴), \otimesrhrim (⨵), \overbrace (⏞), \overbracket (⎴), \overline (‾), \overparen (⏜), \owns (∋). + +\parallel (∥), \parallelogram (▱), \parallelogramblack (▰), \parsim (⫳), \partial (∂), \partialmeetcontraction (⪣), \pentagon (⬠), \pentagonblack (⬟), \perp (⟂), \perps (â«¡), \phi (ϕ), \phone (☎), \pi (π), \pitchfork (⋔), \plusdot (⨥), \pluseqq (⩲), \plushat (⨣), \plussim (⨦), \plussubtwo (⨧), \plustrif (⨨), \pluto (♇), \pm (±), \pointnt (⨕), \postalmark (〒), \prec (≺), \precapprox (⪷), \preccurlyeq (≼), \preceq (⪯), \preceqq (⪳), \precnapprox (⪹), \precneq (⪱), \precneqq (⪵), \precnsim (⋨), \precsim (≾), \prime (′), \prod (∏), \profalar (⌮), \profline (⌒), \profsurf (⌓), \propto (∝), \prurel (⊰), \psi (ψ), \pullback (⟓), \pushout (⟔). + +\qprime (⁗), \quarternote (♩), \questeq (≟), \quotdblbase („), \quotdblright (‟), \quotsinglbase (‚), \quotsinglright (‛). + +\rAngle (⟫), \rBrace (⦄), \rBrack (⟧), \rParen (⦆), \rangle (⟩), \rangledot (⦒), \rangledownzigzagarrow (⍼), \rasp (ʼ), \rbag (⟆), \rblkbrbrak (⦘), \rbrace (@}), \rbracelend (⎭), \rbracemid (⎬), \rbraceuend (⎫), \rbrack (]), \rbrackextender (⎥), \rbracklend (⎦), \rbracklrtick (⦎), \rbrackubar (⦌), \rbrackuend (⎤), \rbrackurtick (⦐), \rbrbrak (❳), \rceil (⌉), \rcurvyangle (â§½), \rdiagovfdiag (⤫), \rdiagovsearrow (⤰), \recorder (⌕), \revangle (⦣), \revangleubar (⦥), \revemptyset (⦰), \revnmid (â«®), \rfbowtie (⧒), \rfloor (⌋), \rftimes (⧕), \rhd (⊳), \rho (ρ), \righarrowbsimilar (⭌), \rightangle (∟), \rightanglemdot (⦝), \rightanglesqr (⦜), \rightarrow (→), \rightarrowapprox (⥵), \rightarrowbackapprox (⭈), \rightarrowbar (⇥), \rightarrowdiamond (⤞), \rightarrowgtr (⭃), \rightarrowonoplus (⟴), \rightarrowplus (⥅), \rightarrowshortleftarrow (⥂), \rightarrowsimilar (⥴), \rightarrowsupset (⭄), \rightarrowtail (↣), \rightarrowtriangle (⇾), \rightarrowx (⥇), \rightbkarrow (⤍), \rightcurvedarrow (⤳), \rightdasharrow (⇢), \rightdbltail (⤜), \rightdotarrow (⤑), \rightdowncurvedarrow (⤷), \rightfishtail (⥽), \rightharpoondown (⇁), \rightharpoondownbar (⥗), \rightharpoonsupdown (⥤), \rightharpoonup (⇀), \rightharpoonupbar (⥓), \rightharpoonupdash (⥬), \rightimply (⥰), \rightleftarrows (⇄), \rightleftharpoons (⇌), \rightleftharpoonsdown (⥩), \rightleftharpoonsup (⥨), \rightmoon (☽), \rightouterjoin (⟖), \rightpentagon (⭔), \rightpentagonblack (⭓), \rightrightarrows (⇉), \rightsquigarrow (↝), \rightsquigarrow (⇝), \righttail (⤚), \rightthreearrows (⇶), \rightthreetimes (⋌), \rightwhitearrow (⇨), \ringplus (⨢), \risingdotseq (≓), \rmoustache (⎱), \rparenextender (⎟), \rparengtr (⦔), \rparenlend (⎠), \rparenuend (⎞), \rppolint (⨒), \rq (’), \rrangle (⦊), \rrparenthesis (⦈), \rsolbar (â§·), \rsqhook (⫎), \rsub (â©¥), \rtimes (⋊), \rtriltri (⧎), \ruledelayed (â§´), \rvboxline (⎹), \rvzigzag (⧙). + +\sampi (Ï¡), \sansLmirrored (⅃), \sansLturned (⅂), \saturn (♄), \scissors (✂), \scpolint (⨓), \scrB (ℬ), \scrE (ℰ), \scrF (ℱ), \scrH (ℋ), \scrI (ℐ), \scrL (ℒ), \scrM (ℳ), \scrR (ℛ), \scre (ℯ), \scrg (ℊ), \scro (ℴ), \scurel (⊱), \searrow (↘), \seovnearrow (⤭), \setminus (∖), \setminus (â§µ), \sharp (♯), \shortdowntack (⫟), \shortleftarrow (←), \shortlefttack (⫞), \shortrightarrow (→), \shortrightarrowleftarrow (⥄), \shortuptack (â« ), \shuffle (â§¢), \sigma (σ), \silon (υ), \silon (ϒ), \sim (∼), \simeq (≃), \simgE (⪠), \simgtr (⪞), \similarleftarrow (⭉), \similarrightarrow (⥲), \simlE (⪟), \simless (⪝), \simminussim (⩬), \simneqq (≆), \simplus (⨤), \simrdots (â©«), \sinewave (∿), \slash (∕), \smallblacktriangleleft (◂), \smallblacktriangleright (▸), \smalldiamond (⋄), \smallin (∊), \smallint (∫), \smallni (∍), \smallsetminus (∖), \smalltriangleleft (◃), \smalltriangleright (▹), \smashtimes (⨳), \smblkdiamond (⬩), \smblklozenge (⬪), \smblksquare (▪), \smeparsl (⧤), \smile (⌣), \smiley (☺), \smt (⪪), \smte (⪬), \smwhitestar (⭒), \smwhtcircle (◦), \smwhtlozenge (⬫), \smwhtsquare (▫), \spadesuit (♠), \sphericalangle (∢), \sphericalangleup (⦡), \sqcap (⊓), \sqcup (⊔), \sqint (⨖), \sqlozenge (⌑), \sqrt (√), \sqrt3 (∛), \sqrt4 (∜), \sqrtbottom (⎷), \sqsubset (⊏), \sqsubseteq (⊑), \sqsubsetneq (⋤), \sqsupset (⊐), \sqsupseteq (⊒), \sqsupsetneq (⋥), \squarecrossfill (▩), \squaregrayfill (▩), \squarehfill (▤), \squarehvfill (▦), \squareleftblack (◧), \squareleftblack (◨), \squarellblack (⬕), \squarellquad (◱), \squarelrblack (◪), \squarelrquad (◲), \squareneswfill (▨), \squarenwsefill (▧), \squareulblack (◩), \squareulquad (◰), \squareurblack (⬔), \squareurquad (◳), \squarevfill (▥), \squoval (▢), \ss (ß), \star (⋆), \stareq (≛), \sterling (£), \stigma (ϛ), \strns (⏤), \subedot (⫃), \submult (⫁), \subrarr (⥹), \subset (⊂), \subsetapprox (⫉), \subsetcirc (⟃), \subsetdot (⪽), \subseteq (⊆), \subseteqq (⫅), \subsetneq (⊊), \subsetneqq (⫋), \subsetplus (⪿), \subsim (⫇), \subsub (⫕), \subsup (⫓), \succ (≻), \succapprox (⪸), \succcurlyeq (≽), \succeq (⪰), \succeqq (⪴), \succnapprox (⪺), \succneq (⪲), \succneqq (⪶), \succnsim (⋩), \succsim (≿), \sum (∑), \sumbottom (⎳), \sumint (⨋), \sumtop (⎲), \sun (☼), \supdsub (⫘), \supedot (⫄), \suphsol (⟉), \suphsub (⫗), \suplarr (⥻), \supmult (⫂), \supn (ⁿ), \supset (⊃), \supsetapprox (⫊), \supsetcirc (⟄), \supsetdot (⪾), \supseteq (⊇), \supseteqq (⫆), \supsetneq (⊋), \supsetneqq (⫌), \supsetplus (⫀), \supsim (⫈), \supsub (⫔), \supsup (⫖), \surd (√), \swarrow (↙). + +\talloblong (⫾), \target (⌖), \tau (τ), \taurus (♉), \testhookx (ᶍ), \textAsterisks (⁑), \textacute (ˊ), \textadvanced (˖), \textain (Ê¿), \textasciiacute (´), \textasciicircum (^), \textasciidieresis (¨), \textasciigrave (`), \textasciimacron (¯), \textasciitilde (~), \textasterisklow (⁎), \textbackdprime (‶), \textbackprime (‵), \textbacktrprime (‷), \textbardotlessj (ɟ), \textbardotlessjvar (ʄ), \textbarglotstop (Ê¡), \textbari (ɨ), \textbarl (ƚ), \textbaro (ɵ), \textbarrevglotstop (Ê¢), \textbaru (ʉ), \textbeltl (ɬ), \textbenttailyogh (ƺ), \textbreve (˘), \textbrokenbar (¦), \textbullet (•), \textbullseye (ʘ), \textcent (¢), \textcircledP (℗), \textcloseepsilon (ʚ), \textcloseomega (É·), \textcloserevepsilon (ɞ), \textcopyright (©), \textcrb (ƀ), \textcrh (ħ), \textcrinvglotstop (ƾ), \textcrlambda (ƛ), \textcrtwo (Æ»), \textctc (ɕ), \textctd (È¡), \textctesh (ʆ), \textctj (ʝ), \textctl (È´), \textctn (ȵ), \textctt (ȶ), \textctyogh (ʓ), \textctz (ʑ), \textcurrency (¤), \textdctzlig (Ê¥), \textdegree (°), \textdiscount (⁒), \textdollar ($), \textdotaccent (˙), \textdotlessj (È·), \textdoubleacute (˝), \textdoublebarpipe (ǂ), \textdoublepipe (ǁ), \textdprime (″), \textdptr (˅), \textdyoghlig (ʤ), \textdzlig (Ê£), \textepsilon (ɛ), \textesh (ʃ), \textestimated (℮), \textexclam (ǃ), \textexclamdown (¡), \textfishhookr (ɾ), \textflorin (ƒ), \textfranc (₣), \textgamma (É£), \textglotstop (ʔ), \textgrave (ˋ), \texthalflength (ˑ), \texthamza (ʾ), \texthen (ꜧ), \textheng (ꜧ), \texthooks (ᶊ), \texthookz (ᶎ), \texthtb (ɓ), \texthtc (ƈ), \texthtd (ɗ), \texthtg (É ), \texthth (ɦ), \texththeng (ɧ), \texthtk (ƙ), \texthtp (Æ¥), \texthtq (Ê ), \texthtscg (ʛ), \texthtt (Æ­), \texthvlig (ƕ), \texthyphen (‐), \textinvglotstop (ʖ), \textinvscr (ʁ), \textiota (É©), \textlengthmark (ː), \textlhalfring (˓), \textlhookd (ᶁ), \textlhookk (ᶄ), \textlhookl (ᶅ), \textlhookt (Æ«), \textlhti (É¿), \textlira (₤), \textlonglegr (ɼ), \textlongy (Ê®), \textlongy (ʯ), \textlooptoprevesh (ƪ), \textlowacute (ˏ), \textlowered (˕), \textlowgrave (ˎ), \textlowmacron (ˍ), \textlptr (˂), \textltailm (ɱ), \textltailn (ɲ), \textltilde (É«), \textlyoghlig (É®), \textmacron (ˉ), \textmu (µ), \textnumero (№), \textogonek (˛), \textohm (Ω), \textonehalf (½), \textonequarter (¼), \textonesuperior (¹), \textopeno (ɔ), \textordfeminine (ª), \textordmasculine (º), \textovercross (˟), \textoz (℥), \textpertenthousand (‱), \textperthousand (‰), \textpesetas (₧), \textphi (ɸ), \textpipe (ǀ), \textprime (′), \textprimstress (ˈ), \textqprime (⁗), \textquestiondown (¿), \textquotedbl ("), \textquotedblleft (“), \textquotedblright (”), \textraised (˔), \textraiseglotstop (ˀ), \textraiserevglotstop (ˁ), \textramshorns (ɤ), \textrecipe (℞), \textreferencemark (※), \textregistered (®), \textretracted (˗), \textreve (ɘ), \textrevepsilon (ɜ), \textrevglotstop (ʕ), \textrhalfring (˒), \textrhookrevepsilon (ɝ), \textrhookschwa (ɚ), \textrhoticity (˞), \textringaccent (˚), \textrptr (˃), \textrtaild (ɖ), \textrtaill (É­), \textrtailn (ɳ), \textrtailr (ɽ), \textrtails (ʂ), \textrtailt (ʈ), \textrtailz (ʐ), \textsca (ᴀ), \textscb (ʙ), \textsce (ᴇ), \textscg (É¢), \textsch (ʜ), \textschwa (ə), \textsci (ɪ), \textscl (ʟ), \textscn (É´), \textscoelig (ɶ), \textscr (ʀ), \textscripta (ɑ), \textscriptg (É¡), \textscriptv (ʋ), \textscu (ᴜ), \textscy (ʏ), \textsecstress (ˌ), \textsemicolonreversed (⁏), \textsilon (Î¥), \textsmalltilde (˜), \textstretchcvar (ʗ), \textsubw (w), \textsuph (ʰ), \textsuphth (ʱ), \textsupinvscr (ʶ), \textsupj (ʲ), \textsupr (ʳ), \textsupturnr (Ê´), \textsupturnrrtail (ʵ), \textsupw (Ê·), \textsupy (ʸ), \texttctctlig (ʧ), \texttctctlig (ʨ), \textthreequarters (¾), \textthreesuperior (³), \texttrademark (™), \texttrprime (‴), \texttslig (ʦ), \textturna (ɐ), \textturncomma (Ê»), \textturnh (É¥), \textturnk (ʞ), \textturnlonglegr (ɺ), \textturnm (ɯ), \textturnmrleg (ɰ), \textturnr (ɹ), \textturnrrtail (É»), \textturnscripta (ɒ), \textturnt (ʇ), \textturnv (ʌ), \textturnw (ʍ), \textturny (ʎ), \texttwosuperior (²), \textupsilon (ʊ), \textuptr (˄), \textvibyi (ʅ), \textvisiblespace (␣), \textyogh (ʒ), \th (þ), \therefore (∴), \thermod (â§§), \theta (θ), \thickapprox (≈), \thicksim (∼), \threedangle (⟀), \threedotcolon (â«¶), \tieconcat (⁀), \tieinfty (⧝), \times (×), \timesbar (⨱), \tminus (â§¿), \to (→), \toea (⤨), \tona (⤧), \tonebarextrahigh (Ë¥), \tonebarextralow (Ë©), \tonebarhigh (˦), \tonebarlow (˨), \tonebarmid (˧), \top (⊤), \topbot (⌶), \topcir (⫱), \topfork (⫚), \topsemicircle (◠), \tosa (⤩), \towa (⤪), \tplus (â§¾), \trapezium (⏢), \trianglecdot (◬), \triangledown (▿), \triangleexclam (⚠), \triangleleft (◁), \triangleleftblack (◭), \trianglelefteq (⊴), \triangleminus (⨺), \triangleodot (⧊), \triangleplus (⨹), \triangleq (≜), \triangleright (▷), \trianglerightblack (◮), \trianglerighteq (⊵), \triangles (⧌), \triangleserifs (⧍), \triangletimes (⨻), \triangleubar (⧋), \tripleplus (â§»), \trprime (‴), \turnangle (⦢), \turnediota (℩), \turnednot (⌙), \twocaps (⩋), \twocups (⩊), \twoheaddownarrow (↡), \twoheadleftarrow (↞), \twoheadleftarrowtail (⬻), \twoheadleftdbkarrow (⬷), \twoheadmapsfrom (⬶), \twoheadmapsto (⤅), \twoheadrightarrow (↠), \twoheadrightarrowtail (⤖), \twoheaduparrow (↟), \twoheaduparrowcircle (⥉), \twolowline (‗), \twonotes (♫), \typecolon (⦂). + +\ubrbrak (⏡), \uhorn (ư), \ularc (◜), \ulblacktriangle (◤), \ulcorner (⌜), \ulcrop (⌏), \ultriangle (◸), \uminus (⩁), \underbrace (⏟), \underbracket (⎵), \underparen (⏝), \unlhd (⊴), \unrhd (⊵), \upand (⅋), \uparrow (↑), \uparrowbarred (⤉), \uparrowoncircle (⦽), \updasharrow (⇢), \updownarrow (↕), \updownarrowbar (↨), \updownarrows (⇅), \updownharpoonleftleft (⥑), \updownharpoonleftright (⥍), \updownharpoonrightleft (⥌), \updownharpoonrightright (⥏), \updownharpoonsleftright (⥮), \upfishtail (⥾), \upharpoonleft (↿), \upharpoonleftbar (⥠), \upharpoonright (↾), \upharpoonrightbar (⥜), \upharpoonsleftright (⥣), \upin (⟒), \upint (⨛), \uplus (⊎), \uprightcurvearrow (⤴), \upuparrows (⇈), \upwhitearrow (⇧), \urarc (◝), \urblacktriangle (◥), \urcorner (⌝), \urcrop (⌎), \urtriangle (◹). + +\v (ˇ), \vBar (⫨), \vBarv (â«©), \vDash (⊨), \vDdash (â«¢), \varTheta (Ï´), \varVdash (⫦), \varbarwedge (⌅), \varbeta (ϐ), \varclubsuit (♧), \vardiamondsuit (♦), \vardoublebarwedge (⌆), \varepsilon (ε), \varheartsuit (♥), \varhexagon (⬡), \varhexagonblack (⬢), \varhexagonlrbonds (⌬), \varin (∈), \varisinobar (⋶), \varisins (⋳), \varkappa (ϰ), \varlrtriangle (⊿), \varni (∋), \varniobar (⋽), \varnis (⋻), \varnothing (∅), \varointclockwise (∲), \varphi (φ), \varpi (ϖ), \varpropto (∝), \varrho (ϱ), \varrowextender (⏐), \varsigma (ς), \varspadesuit (♤), \varstar (✶), \vartheta (ϑ), \vartriangle (▵), \vartriangleleft (⊲), \vartriangleright (⊳), \varveebar (â©¡), \vbraceextender (⎪), \vbrtri (⧐), \vdash (⊢), \vdots (⋮), \vectimes (⨯), \vee (∨), \veebar (⊻), \veedot (⟇), \veedoublebar (â©£), \veeeq (≚), \veemidvert (⩛), \veeodot (⩒), \veeonvee (⩖), \veeonwedge (⩙), \vert (|), \viewdata (⌗), \vlongdash (⟝), \vrectangle (▯), \vrectangleblack (▮), \vysmlblksquare (⬝), \vysmlwhtsquare (⬞), \vzigzag (⦚). + +\watchicon (⌚), \wedge (∧), \wedgebar (⩟), \wedgedot (⟑), \wedgedoublebar (â© ), \wedgemidvert (⩚), \wedgeodot (⩑), \wedgeonwedge (⩕), \wedgeq (≙), \whitearrowupfrombar (⇪), \whiteinwhitetriangle (⟁), \whitepointerleft (◅), \whitepointerright (▻), \whitesquaretickleft (⟤), \whitesquaretickright (⟥), \whthorzoval (⬭), \whtvertoval (⬯), \wideangledown (⦦), \wideangleup (⦧), \wp (℘), \wr (≀). + +\xbsol (â§¹), \xi (ξ), \xsol (⧸), \yen (Â¥), \zeta (ζ), \zpipe (⨠), IF ANYBODY WILL CHECK WHETHER ALL NAMES CORRESPOND TO RIGHT TEX SYMBOLS I SHALL APPRECIATE IT GREATLY. diff --git a/texinfo/appendix_ru.texi b/texinfo/appendix_ru.texi index 51b049f..beb6c26 100644 --- a/texinfo/appendix_ru.texi +++ b/texinfo/appendix_ru.texi @@ -10,7 +10,56 @@ @strong{Акценты}: \hat, \tilde, \dot, \ddot, \dddot, \ddddot, \acute, \check, \grave, \vec, \bar, \breve -@strong{Специальные символы}: \textquotedbl, \textdollar, \And, \textasciigrave, \textsubw, \colon, \less, \greater, \lbrack, \backslash, \rbrack, \textasciicircum, \lbrace, \vert, \rbrace, \textasciitilde, \aa, \ae, \textexclamdown, \textcent, \sterling, \textcurrency, \yen, \textbrokenbar, \S, \textasciidieresis, \textcopyright, \textordfeminine, \guillemotleft, \neg, \textregistered, \textasciimacron, \textdegree, \pm, \texttwosuperior, \textthreesuperior, \textasciiacute, \textmu, \P, \cdotp, \textonesuperior, \textordmasculine, \guillemotright, \textonequarter, \textonehalf, \textthreequarters, \textquestiondown, \AA, \AE, \DH, \times, \O, \TH, \ss, \dh, \div, \o, \th, \DJ, \dj, \textcrh, \L, \l, \OE, \oe, \NG, \ng, \textcrb, \texthtc, \textflorin, \texthvlig, \texthtk, \textctd, \textctl, \textctn, \textctt, \textdotlessj, \textbarl, \textcrlambda, \lambdabar, \Ohorn, \ohorn, \texthtp, \textlooptoprevesh, \textlhookt, \texthtt, \Uhorn, \uhorn, \Zbar, \textbenttailyogh, \textcrtwo, \textcrinvglotstop, \textpipe, \textdoublepipe, \textdoublebarpipe, \textexclam, \textturna, \textscripta, \textturnscripta, \texthtb, \textopeno, \textctc, \textrtaild, \texthtd, \textreve, \textschwa, \texthtg, \textscriptg, \textscg, \textgamma, \textramshorns, \textturnh, \texthth, \texththeng, \textbari, \textiota, \textturnmrleg, \textltailm, \textltailn, \textrtailn, \textscn, \textbaro, \textscoelig, \textcloseomega, \textphi, \textturnr, \textscr, \textinvscr, \textrtails, \textesh, \textbardotlessjvar, \textvibyi, \textctesh, \textturnt, \textrtailt, \textbaru, \textrtailz, \textctz, \textyogh, \textctyogh, \textglotstop, \textrevglotstop, \textinvglotstop, \textstretchcvar, \textbullseye, \textscb, \textrhookschwa, \textepsilon, \textrevepsilon, \textrhookrevepsilon, \textcloserevepsilon, \textbardotlessj, \textsci, \textltilde, \textbeltl, \textrtaill, \textlyoghlig, \textturnm, \textturnlonglegr, \textturnrrtail, \textlonglegr, \textrtailr, \textfishhookr, \textlhti, \textupsilon, \textscriptv, \textturnv, \textturnw, \textturny, \textscy, \textcloseepsilon, \texthtscg, \textsch, \textctj, \textturnk, \textscl, \texthtq, \textbarglotstop, \textbarrevglotstop, \textdzlig, \textdyoghlig, \textdctzlig, \texttslig, \texttctctlig, \texttctctlig, \textlongy, \textlongy, \ipasupgamma, \ipasupl, \ipasups, \ipasupx, \ipasuprerglotstpp, \tonebarextrahigh, \tonebarhigh, \tonebarmid, \tonebarlow, \tonebarextralow, \textsuph, \textsuphth, \textsupj, \textsupr, \textsupturnr, \textsupturnrrtail, \textsupinvscr, \textsupw, \textsupy, \cprime, \cdprime, \textturncomma, \rasp, \lasp, \texthamza, \textain, \textraiseglotstop, \textraiserevglotstop, \textlptr, \textrptr, \textuptr, \textdptr, \$\wedge$, \v, \textprimstress, \textmacron, \textacute, \textgrave, \textsecstress, \textlowmacron, \textlowgrave, \textlowacute, \textlengthmark, \texthalflength, \textrhalfring, \textlhalfring, \textraised, \textlowered, \textadvanced, \textretracted, \textbreve, \textdotaccent, \textringaccent, \textogonek, \textsmalltilde, \textdoubleacute, \textrhoticity, \textovercross, \ipavoicing, \ipaunaspirated, \sampi, \Alpha, \Beta, \Gamma, \Delta, \Epsilon, \Zeta, \Eta, \Theta, \Iota, \Kappa, \Lambda, \Mu, \Nu, \Xi, \Omicron, \Pi, \Rho, \Sigma, \Tau, \textsilon, \Phi, \Chi, \Psi, \Omega, \alpha, \beta, \gamma, \delta, \varepsilon, \zeta, \eta, \theta, \iota, \kappa, \lambda, \mu, \nu, \xi, \omicron, \pi, \rho, \varsigma, \sigma, \tau, \silon, \varphi, \chi, \psi, \omega, \varbeta, \vartheta, \silon, \phi, \varpi, \oldKoppa, \oldkoppa, \Stigma, \stigma, \Digamma, \digamma, \Koppa, \koppa, \varkappa, \varrho, \varTheta, \epsilon, \backepsilon, \textsca, \textsce, \textscu, \textlhookd, \textlhookk, \textlhookl, \texthooks, \testhookx, \texthookz, \texthyphen, \nobreakhyphen, \figdash, \endash, \emdash, \horizbar, \Vert, \twolowline, \lq, \rq, \dagger, \dag, \ddagger, \ddag, \textbullet, \enleadertwodots, \dots, \textperthousand, \textpertenthousand, \textprime, \prime, \textdprime, \dprime, \texttrprime, \trprime, \textbackprime, \backprime, \textbackdprime, \backdprime, \textbacktrprime, \backtrprime, \caretinsert, \guilsinglleft, \tieconcat, \hyphenbullet, \fracslash, \Question, \closure, \textAsterisks, \textdiscount, \textqprime, \qprime, \quotsinglbase, \quotsinglright, \textquotedblleft, \textquotedblright, \quotdblbase, \quotdblright, \guilsinglright, \textreferencemark, \Exclam, \overline, \textasterisklow, \textsemicolonreversed, \medmathspace, \supn, \textfranc, \textlira, \textpesetas, \euro, \BbbC, \incare, \Eulerconst, \scrI, \Im, \scrL, \ell, \BbbN, \textnumero, \textcircledP, \wp, \BbbP, \texttrademark, \BbbZ, \textoz, \textohm, \mho, \frakZ, \turnediota, \scrE, \scrF, \Finv, \scrM, \scro, \aleph, \beth, \gimel, \daleth, \Bbbsum, \Game, \sansLturned, \sansLmirrored, \Yup, \itBbbD, \itBbbd, \itBbbe, \itBbbi, \itBbbj, \scrg, \scrH, \frakH, \BbbH, \Planckconst, \hslash, \hbar, \BbbQ, \scrR, \Re, \BbbR, \textrecipe, \Angstrom, \scrB, \frakC, \textestimated, \scre, \Bbbpi, \Bbbgamma, \BbbGamma, \BbbPi, \PropertyLine, \upand, \fraconethird, \fractwothirds, \fraconefifth, \fractwofifths, \fracthreefifths, \fracfourfifths, \fraconesixth, \fracfivesixths, \fraconeeighth, \fracthreeeighths, \fracfiveeighths, \fracseveneights, \ldasharrhead, \leftdasharrow, \leftdasharrowhead, \rightdasharrow, \updasharrow, \leftarrow, \gets, \shortleftarrow, \uparrow, \rightarrow, \to, \shortrightarrow, \downarrow, \leftrightarrow, \updownarrow, \nwarrow, \nearrow, \searrow, \swarrow, \downdasharrow, \barleftarrow, \rightarrowbar, \leftwhitearrow, \upwhitearrow, \rightwhitearrow, \downwhitearrow, \nleftarrow, \nrightarrow, \leftsquigarrow, \rightsquigarrow, \leadsto, \twoheadleftarrow, \twoheaduparrow, \twoheadrightarrow, \twoheaddownarrow, \leftarrowtail, \rightarrowtail, \mapsfrom, \mapsup, \mapsto, \mapsdown, \updownarrowbar, \hookleftarrow, \hookrightarrow, \looparrowleft, \looparrowright, \leftrightsquigarrow, \nleftrightarrow, \downzigzagarrow, \Lsh, \Rsh, \Ldsh, \Rdsh, \linefeed, \carriagereturn, \curvearrowleft, \curvearrowright, \barovernorthwestarrow, \barleftarrowrightarrowbar, \acwopencirclearrow, \cwopencirclearrow, \leftharpoonup, \leftharpoondown, \upharpoonright, \upharpoonleft, \rightharpoonup, \rightharpoondown, \downharpoonright, \downharpoonleft, \rightleftarrows, \updownarrows, \leftrightarrows, \leftleftarrows, \upuparrows, \rightrightarrows, \downdownarrows, \leftrightharpoons, \rightleftharpoons, \nLeftarrow, \nLeftrightarrow, \nRightarrow, \Leftarrow, \Uparrow, \Rightarrow, \Downarrow, \Leftrightarrow, \Updownarrow, \Nwarrow, \Nearrow, \Searrow, \Swarrow, \Lleftarrow, \Rrightarrow, \leftsquigarrow, \rightsquigarrow, \nHuparrow, \nHdownarrow, \whitearrowupfrombar, \circleonrightarrow, \downuparrows, \rightthreearrows, \nvleftarrow, \nvrightarrow, \nvleftrightarrow, \nVleftarrow, \nVrightarrow, \nVleftrightarrow, \leftarrowtriangle, \rightarrowtriangle, \leftrightarrowtriangle, \forall, \complement, \partial, \exists, \nexists, \varnothing, \emptyset, \increment, \nabla, \in, \varin, \notin, \smallin, \ni, \owns, \varni, \nni, \smallni, \QED, \prod, \coprod, \amalg, \sum, \minus, \mp, \dotplus, \slash, \smallsetminus, \setminus, \ast, \circ, \bullet, \surd, \sqrt, \sqrt3, \sqrt4, \cuberoot, \fourthroot, \propto, \varpropto, \infty, \rightangle, \angle, \measuredangle, \sphericalangle, \mid, \nmid, \parallel, \nparallel, \wedge, \vee, \cap, \cup, \smallint, \int, \iint, \iiint, \oint, \oiint, \oiiint, \intclockwise, \varointclockwise, \ointctrclockwise, \therefore, \because, \colon, \Colon, \dotminus, \dashcolon, \dotsminusdots, \kernelcontraction, \sim, \thicksim, \backsim, \ac, \sinewave, \wr, \nsim, \eqsim, \simeq, \nsime, \cong, \simneqq, \ncong, \approx, \thickapprox, \napprox, \approxeq, \approxident, \backcong, \asymp, \Bumpeq, \bumpeq, \doteq, \Doteq, \fallingdotseq, \risingdotseq, \coloneq, \eqcolon, \eqcirc, \circeq, \arceq, \wedgeq, \veeeq, \stareq, \triangleq, \eqdef, \measeq, \questeq, \ne, \neq, \equiv, \nequiv, \Equiv, \leq, \le, \geq, \ge, \leqq, \geqq, \lneqq, \gneqq, \ll, \gg, \between, \nasymp, \nless, \ngtr, \nleq, \ngeq, \lesssim, \gtrsim, \nlesssim, \ngtrsim, \lessgtr, \gtrless, \nlessgtr, \ngtrless, \prec, \succ, \preccurlyeq, \succcurlyeq, \precsim, \succsim, \nprec, \nsucc, \subset, \supset, \nsubset, \nsupset, \subseteq, \supseteq, \nsubseteq, \nsupseteq, \subsetneq, \supsetneq, \cupleftarrow, \cupdot, \uplus, \sqsubset, \sqsupset, \sqsubseteq, \sqsupseteq, \sqcap, \sqcup, \oplus, \ominus, \otimes, \oslash, \odot, \circledcirc, \circledast, \circledequal, \circleddash, \boxplus, \boxminus, \boxtimes, \boxdot, \vdash, \dashv, \top, \bot, \assert, \models, \vDash, \Vdash, \Vvdash, \VDash, \nvdash, \nvDash, \nVdash, \nVDash, \prurel, \scurel, \vartriangleleft, \lhd, \vartriangleright, \rhd, \trianglelefteq, \unlhd, \trianglerighteq, \unrhd, \origof, \imageof, \multimap, \hermitmatrix, \intercal, \veebar, \barwedge, \barvee, \measuredrightangle, \varlrtriangle, \bigwedge, \bigvee, \bigcap, \bigcup, \smalldiamond, \cdot, \star, \divideontimes, \bowtie, \ltimes, \rtimes, \leftthreetimes, \rightthreetimes, \backsimeq, \curlyvee, \curlywedge, \Subset, \Supset, \Cap, \Cup, \pitchfork, \equalparallel, \lessdot, \gtrdot, \lll, \ggg, \lesseqgtr, \gtreqless, \eqless, \eqgtr, \curlyeqprec, \curlyeqsucc, \npreccurlyeq, \nsucccurlyeq, \nsqsubseteq, \nsqsupseteq, \sqsubsetneq, \sqsupsetneq, \lnsim, \gnsim, \precnsim, \succnsim, \ntriangleleft, \ntriangleright, \ntrianglelefteq, \ntrianglerighteq, \vdots, \cdots, \adots, \ddots, \disin, \varisins, \isins, \isindot, \varisinobar, \isinobar, \isinvb, \isinE, \nisd, \varnis, \nis, \varniobar, \niobar, \bagmember, \diameter, \house, \varbarwedge, \vardoublebarwedge, \lceil, \rceil, \lfloor, \rfloor, \drcrop, \dlcrop, \urcrop, \ulcrop, \invnot, \sqlozenge, \profline, \profsurf, \recorder, \target, \viewdata, \cloverleaf, \turnednot, \watchicon, \ulcorner, \urcorner, \llcorner, \lrcorner, \inttop, \intbottom, \frown, \smile, \clangle, \crangle, \varhexagonlrbonds, \cylcty, \profalar, \conictaper, \topbot, \obar, \APLnotslash, \APLnotbackslash, \APLboxupcaret, \APLboxquestion, \rangledownzigzagarrow, \dircurrent, \hexagon, \lparenuend, \lparenextender, \lparenlend, \rparenuend, \rparenextender, \rparenlend, \lbrackuend, \lbrackextender, \lbracklend, \rbrackuend, \rbrackextender, \rbracklend, \lbraceuend, \lbracemid, \lbracelend, \vbraceextender, \rbraceuend, \rbracemid, \rbracelend, \intextender, \harrowextender, \lmoustache, \rmoustache, \sumtop, \sumbottom, \overbracket, \underbracket, \bbrktbrk, \sqrtbottom, \lvboxline, \rvboxline, \carreturn, \varrowextender, \overparen, \underparen, \overbrace, \underbrace, \obrbrak, \ubrbrak, \trapezium, \benzenr, \strns, \fltns, \accurrent, \elinters, \textvisiblespace, \circledone, \circledtwo, \circledthree, \circledfour, \circledfive, \circledsix, \circledseven, \circledeight, \circlednine, \circledA, \circledB, \circledC, \circledD, \circledE, \circledF, \circledG, \circledH, \circledI, \circledJ, \circledK, \circledL, \circledM, \circledN, \circledO, \circledP, \circledQ, \circledR, \circledS, \circledT, \circledU, \circledV, \circledW, \circledX, \circledY, \circledZ, \circleda, \circledb, \circledc, \circledd, \circlede, \circledf, \circledg, \circledh, \circledi, \circledj, \circledk, \circledl, \circledm, \circledn, \circledo, \circledp, \circledq, \circledr, \circleds, \circledt, \circledu, \circledv, \circledw, \circledx, \circledy, \circledz, \circledzero, \bdhrule, \bdvrule, \bdtriplevdash, \bdquadhdash, \bdquadvdash, \bddvrh, \bddvlh, \bduvrh, \bduvlh, \bdbvrh, \bdbvlh, \bddvbh, \bduvbh, \bdbvbh, \bdHrule, \bdVrule, \bddvrH, \bddVrh, \bddVrH, \bddvlH, \bddVlh, \bddVlH, \bduvrH, \bduVrh, \bduVrH, \bduvlH, \bduVlh, \bduVlH, \bdbvrH, \bdbVrh, \bdbVrH, \bdbvlH, \bdbVlh, \bdbVlH, \bddvbH, \bddVbh, \bddVbH, \bduvbH, \bduVbh, \bduVbH, \bdbvbH, \bdbVbh, \bdbVbH, \bdnesw, \bdnwse, \blockuphalf, \blocklowhalf, \blockfull, \blocklefthalf, \blockrighthalf, \blockqtrshaded, \blockhalfshaded, \blockthreeqtrshaded, \mdlgblksquare, \mdlgwhtsquare, \squoval, \blackinwhitesquare, \squarehfill, \squarevfill, \squarehvfill, \squarenwsefill, \squareneswfill, \squarecrossfill, \squaregrayfill, \smblksquare, \smwhtsquare, \hrectangleblack, \hrectangle, \vrectangleblack, \vrectangle, \parallelogramblack, \parallelogram, \bigblacktriangleup, \bigtriangleup, \blacktriangle, \vartriangle, \blacktriangleright, \triangleright, \smallblacktriangleright, \smalltriangleright, \blackpointerright, \whitepointerright, \bigblacktriangledown, \bigtriangledown, \blacktriangledown, \triangledown, \blacktriangleleft, \triangleleft, \smallblacktriangleleft, \smalltriangleleft, \blackpointerleft, \whitepointerleft, \mdlgblkdiamond, \mdlgwhtdiamond, \diamond, \blackinwhitediamond, \fisheye, \lozenge, \mdlgwhtcircle, \dottedcircle, \circlevertfill, \bullseye, \mdlgblkcircle, \circlelefthalfblack, \circlerighthalfblack, \circlebottomhalfblack, \circletophalfblack, \circleurquadblack, \blackcircleulquadwhite, \blacklefthalfcircle, \blackrighthalfcircle, \inversebullet, \inversewhitecircle, \invwhiteupperhalfcircle, \invwhitelowerhalfcircle, \ularc, \urarc, \lrarc, \llarc, \topsemicircle, \botsemicircle, \lrblacktriangle, \llblacktriangle, \ulblacktriangle, \urblacktriangle, \smwhtcircle, \squareleftblack, \squareleftblack, \squareulblack, \squarelrblack, \boxbar, \trianglecdot, \triangleleftblack, \trianglerightblack, \lgwhtcircle, \squareulquad, \squarellquad, \squarelrquad, \squareurquad, \circleulquad, \circlellquad, \circlelrquad, \circleurquad, \ultriangle, \urtriangle, \lltriangle, \mdwhtsquare, \box, \mdblksquare, \mdsmwhtsquare, \mdsmblksquare, \lrtriangle, \bigstar, \bigwhitestar, \astrosun, \conjunction, \phone, \XBox, \danger, \frownie, \smiley, \blacksmiley, \sun, \rightmoon, \leftmoon, \mercury, \female, \earth, \male, \jupiter, \saturn, \neptune, \pluto, \aries, \taurus, \spadesuit, \heartsuit, \diamondsuit, \clubsuit, \varspadesuit, \varheartsuit, \vardiamondsuit, \varclubsuit, \quarternote, \eighthnote, \twonotes, \flat, \natural, \sharp, \acidfree, \dicei, \diceii, \diceiii, \diceiv, \dicev, \dicevi, \circledrightdot, \circledtwodots, \blackcircledrightdot, \blackcircledtwodots, \triangleexclam, \Hermaphrodite, \mdwhtcircl, \mdblkrcl, \mdsmwhtcircl, \neuter, \scissors, \envelope, \checkmark, \maltese, \circledstar, \varstar, \dingasterisk, \lbrbrak, \rbrbrak, \circledsansone, \circledsanstwo, \circledsansthree, \circledsansfour, \circledsansfive, \circledsanssix, \circledsansseven, \circledsanseight, \circledsansnine, \circledsansten, \blackcircledsansone, \blackcircledsanstwo, \blackcircledsansthree, \blackcircledsansfour, \blackcircledsansfive, \blackcircledsanssix, \blackcircledsansseven, \blackcircledsanseight, \blackcircledsansnine, \blackcircledsansten, \draftingarrow, \threedangle, \whiteinwhitetriangle, \perp, \subsetcirc, \supsetcirc, \lbag, \rbag, \veedot, \bsolhsub, \suphsol, \longdivision, \diamondcdot, \wedgedot, \upin, \pullback, \pushout, \leftouterjoin, \rightouterjoin, \fullouterjoin, \bigbot, \bigtop, \DashVDash, \dashVdash, \multimapinv, \vlongdash, \longdashv, \cirbot, \lozengeminus, \concavediamond, \concavediamondtickleft, \concavediamondtickright, \whitesquaretickleft, \whitesquaretickright, \lBrack, \rBrack, \langle, \rangle, \lAngle, \rAngle, \Lbrbrak, \Rbrbrak, \UUparrow, \DDownarrow, \acwgapcirclearrow, \cwgapcirclearrow, \rightarrowonoplus, \longleftarrow, \longrightarrow, \longleftrightarrow, \Longleftarrow, \Longrightarrow, \Longleftrightarrow, \longmapsfrom, \longmapsto, \Longmapsfrom, \Longmapsto, \longrightsquigarrow, \nvtwoheadrightarrow, \nVtwoheadrightarrow, \nvLeftarrow, \nvRightarrow, \nvLeftrightarrow, \twoheadmapsto, \Mapsfrom, \Mapsto, \downarrowbarred, \uparrowbarred, \Uuparrow, \Ddownarrow, \leftbkarrow, \rightbkarrow, \leftdbkarrow, \dbkarow, \drbkarow, \rightdotarrow, \baruparrow, \downarrowbar, \nvrightarrowtail, \nVrightarrowtail, \twoheadrightarrowtail, \nvtwoheadrightarrowtail, \nVtwoheadrightarrowtail, \lefttail, \righttail, \leftdbltail, \rightdbltail, \diamondleftarrow, \rightarrowdiamond, \diamondleftarrowbar, \barrightarrowdiamond, \nwsearrow, \neswarrow, \hknwarrow, \hknearrow, \hksearow, \hkswarow, \tona, \toea, \tosa, \towa, \rdiagovfdiag, \fdiagovrdiag, \seovnearrow, \neovsearrow, \fdiagovnearrow, \rdiagovsearrow, \neovnwarrow, \nwovnearrow, \rightcurvedarrow, \uprightcurvearrow, \downrightcurvedarrow, \leftdowncurvedarrow, \rightdowncurvedarrow, \cwrightarcarrow, \acwleftarcarrow, \acwoverarcarrow, \acwundercurvearrow, \curvearrowrightminus, \curvearrowleftplus, \cwundercurvearrow, \ccwundercurvearrow, \acwcirclearrow, \cwcirclearrow, \rightarrowshortleftarrow, \leftarrowshortrightarrow, \shortrightarrowleftarrow, \rightarrowplus, \leftarrowplus, \rightarrowx, \leftrightarrowcircle, \twoheaduparrowcircle, \leftrightharpoonupdown, \leftrightharpoondownup, \updownharpoonrightleft, \updownharpoonleftright, \leftrightharpoonupup, \updownharpoonrightright, \leftrightharpoondowndown, \updownharpoonleftleft, \barleftharpoonup, \rightharpoonupbar, \barupharpoonright, \downharpoonrightbar, \barleftharpoondown, \rightharpoondownbar, \barupharpoonleft, \downharpoonleftbar, \leftharpoonupbar, \barrightharpoonup, \upharpoonrightbar, \bardownharpoonright, \leftharpoondownbar, \barrightharpoondown, \upharpoonleftbar, \bardownharpoonleft, \leftharpoonsupdown, \upharpoonsleftright, \rightharpoonsupdown, \downharpoonsleftright, \leftrightharpoonsup, \leftrightharpoonsdown, \rightleftharpoonsup, \rightleftharpoonsdown, \leftharpoonupdash, \dashleftharpoondown, \rightharpoonupdash, \dashrightharpoondown, \updownharpoonsleftright, \downupharpoonsleftright, \rightimply, \equalrightarrow, \similarrightarrow, \leftarrowsimilar, \rightarrowsimilar, \rightarrowapprox, \ltlarr, \leftarrowless, \gtrarr, \subrarr, \leftarrowsubset, \suplarr, \leftfishtail, \rightfishtail, \upfishtail, \downfishtail, \Vvert, \mdsmblkcircle, \typecolon, \lBrace, \rBrace, \lParen, \rParen, \llparenthesis, \rrparenthesis, \llangle, \rrangle, \lbrackubar, \rbrackubar, \lbrackultick, \rbracklrtick, \lbracklltick, \rbrackurtick, \langledot, \rangledot, \lparenless, \rparengtr, \Lparengtr, \Rparenless, \lblkbrbrak, \rblkbrbrak, \fourvdots, \vzigzag, \measuredangleleft, \rightanglesqr, \rightanglemdot, \angles, \angdnr, \gtlpar, \sphericalangleup, \turnangle, \revangle, \angleubar, \revangleubar, \wideangledown, \wideangleup, \measanglerutone, \measanglelutonw, \measanglerdtose, \measangleldtosw, \measangleurtone, \measangleultonw, \measangledrtose, \measangledltosw, \revemptyset, \emptysetobar, \emptysetocirc, \emptysetoarr, \emptysetoarrl, \circlehbar, \circledvert, \circledparallel, \obslash, \operp, \obot, \olcross, \odotslashdot, \uparrowoncircle, \circledwhitebullet, \circledbullet, \olessthan, \ogreaterthan, \cirscir, \cirE, \boxdiag, \boxbslash, \boxast, \boxcircle, \boxbox, \boxonbox, \triangleodot, \triangleubar, \triangles, \triangleserifs, \rtriltri, \ltrivb, \vbrtri, \lfbowtie, \rfbowtie, \fbowtie, \lftimes, \rftimes, \hourglass, \blackhourglass, \lvzigzag, \rvzigzag, \Lvzigzag, \Rvzigzag, \iinfin, \tieinfty, \nvinfty, \dualmap, \laplac, \lrtriangleeq, \shuffle, \eparsl, \smeparsl, \eqvparsl, \gleichstark, \thermod, \downtriangleleftblack, \downtrianglerightblack, \blackdiamonddownarrow, \mdlgblklozenge, \circledownarrow, \blackcircledownarrow, \errbarsquare, \errbarblacksquare, \errbardiamond, \errbarblackdiamond, \errbarcircle, \errbarblackcircle, \ruledelayed, \setminus, \dsol, \rsolbar, \xsol, \xbsol, \doubleplus, \tripleplus, \lcurvyangle, \rcurvyangle, \tplus, \tminus, \sumint, \iiiint, \intbar, \intBar, \fint, \circfint, \awint, \rppolint, \scpolint, \npolint, \pointnt, \sqint, \intlharhk, \intx, \intcap, \intcup, \upint, \lowint, \zpipe, \ringplus, \plushat, \simplus, \plusdot, \plussim, \plussubtwo, \plustrif, \commaminus, \minusdot, \minusfdots, \minusrdots, \opluslhrim, \oplusrhrim, \vectimes, \dottimes, \timesbar, \btimes, \smashtimes, \otimeslhrim, \otimesrhrim, \otimeshat, \Otimes, \odiv, \triangleplus, \triangleminus, \triangletimes, \intprod, \intprodr, \fcmp, \amalg, \capdot, \uminus, \barcup, \barcap, \capwedge, \cupvee, \twocups, \twocaps, \closedvarcup, \closedvarcap, \Sqcap, \Sqcup, \closedvarcupsmashprod, \wedgeodot, \veeodot, \Wedge, \Vee, \wedgeonwedge, \veeonvee, \bigslopedvee, \bigslopedwedge, \veeonwedge, \wedgemidvert, \veemidvert, \midbarwedge, \midbarvee, \doublebarwedge, \wedgebar, \wedgedoublebar, \varveebar, \doublebarvee, \veedoublebar, \dsub, \rsub, \eqdot, \dotequiv, \equivVert, \equivVvert, \dotsim, \simrdots, \simminussim, \congdot, \asteq, \hatapprox, \approxeqq, \eqqplus, \pluseqq, \eqqsim, \Coloneq, \eqeq, \eqeqeq, \ddotseq, \equivDD, \ltcir, \gtcir, \ltquest, \gtquest, \leqslant, \geqslant, \lesdot, \gesdot, \lesdoto, \gesdoto, \lesdotor, \gesdotol, \lessapprox, \gtrapprox, \lneq, \gneq, \lnapprox, \gnapprox, \lesseqqgtr, \gtreqqless, \lsime, \gsime, \lsimg, \gsiml, \lgE, \glE, \lesges, \gesles, \eqslantless, \eqslantgtr, \elsdot, \egsdot, \eqqless, \eqqgtr, \eqqslantless, \eqqslantgtr, \simless, \simgtr, \simlE, \simgE, \Lt, \Gt, \partialmeetcontraction, \glj, \gla, \ltcc, \gtcc, \lescc, \gescc, \smt, \lat, \smte, \late, \bumpeqq, \preceq, \succeq, \precneq, \succneq, \preceqq, \succeqq, \precneqq, \succneqq, \precapprox, \succapprox, \precnapprox, \succnapprox, \Prec, \Sc, \subsetdot, \supsetdot, \subsetplus, \supsetplus, \submult, \supmult, \subedot, \supedot, \subseteqq, \supseteqq, \subsim, \supsim, \subsetapprox, \supsetapprox, \subsetneqq, \supsetneqq, \lsqhook, \rsqhook, \csub, \csup, \csube, \csupe, \subsup, \supsub, \subsub, \supsup, \suphsub, \supdsub, \forkv, \topfork, \mlcp, \forks, \forksnot, \shortlefttack, \shortdowntack, \shortuptack, \perps, \vDdash, \dashV, \Dashv, \DashV, \varVdash, \Barv, \vBar, \vBarv, \barV, \Vbar, \Not, \bNot, \revnmid, \cirmid, \midcir, \topcir, \nhpar, \parsim, \interleave, \nhVvert, \threedotcolon, \lllnest, \gggnest, \leqqslant, \leqqslant, \talloblong, \squareurblack, \squarellblack, \diamondleftblack, \diamondrightblack, \diamondtopblack, \diamondbotblack, \dottedsquare, \lgblksquare, \lgwhtsquare, \vysmlblksquare, \vysmlwhtsquare, \pentagonblack, \pentagon, \varhexagon, \varhexagonblack, \hexagonblack, \lgblkcircle, \mdblkdiamond, \mdwhtdiamond, \mdblklozenge, \mdwhtlozenge, \smblkdiamond, \smblklozenge, \smwhtlozenge, \blkhorzoval, \whthorzoval, \blkvertoval, \whtvertoval, \circleonleftarrow, \leftthreearrows, \leftarrowonoplus, \longleftsquigarrow, \nvtwoheadleftarrow, \nVtwoheadleftarrow, \twoheadmapsfrom, \twoheadleftdbkarrow, \leftdotarrow, \nvleftarrowtail, \nVleftarrowtail, \twoheadleftarrowtail, \nvtwoheadleftarrowtail, \nVtwoheadleftarrowtail, \leftarrowx, \leftcurvedarrow, \equalleftarrow, \bsimilarleftarrow, \leftarrowbackapprox, \rightarrowgtr, \rightarrowsupset, \LLeftarrow, \RRightarrow, \bsimilarrightarrow, \rightarrowbackapprox, \similarleftarrow, \leftarrowapprox, \leftarrowbsimilar, \righarrowbsimilar, \medwhitestar, \medblackstar, \smwhitestar, \rightpentagonblack, \rightpentagon, \postalmark, \hzigzag, \hiraganano, \textheng, \texthen, \calB, \calE, \calF, \calH, \calM, \calR. +@strong{Специальные символы}: +\# (#), \% (%), \& (&), \^ (^). + +\AA (Å), \AE (Æ), \APLboxquestion (⍰), \APLboxupcaret (⍓), \APLnotbackslash (⍀), \APLnotslash (⌿), \Alpha (Α), \And (&), \Angstrom (Å), \Barv (â«§), \BbbC (ℂ), \BbbGamma (ℾ), \BbbH (ℍ), \BbbN (ℕ), \BbbP (ℙ), \BbbPi (ℿ), \BbbQ (ℚ), \BbbR (ℝ), \BbbZ (ℤ), \Bbbgamma (ℽ), \Bbbpi (ℼ), \Bbbsum (⅀), \Beta (Β), \Bumpeq (≎), \Cap (⋒), \Chi (Χ), \Colon (∷), \Coloneq (â©´), \Cup (⋓), \DDownarrow (⟱), \DH (Ð), \DJ (Đ), \DashV (â«¥), \DashVDash (⟚), \Dashv (⫤), \Ddownarrow (⤋), \Delta (Δ), \Digamma (Ϝ), \Doteq (≑), \Downarrow (⇓), \Epsilon (Ε), \Equiv (≣), \Eta (Η), \Eulerconst (ℇ), \Exclam (‼), \Finv (Ⅎ), \Game (⅁), \Gamma (Γ), \Gt (⪢), \Hermaphrodite (⚥), \Im (ℑ), \Iota (Ι), \Kappa (Κ), \Koppa (Ϟ), \L (Ł), \LLeftarrow (⭅), \Lambda (Λ), \Lbrbrak (⟬), \Ldsh (↲), \Leftarrow (⇐), \Leftrightarrow (⇔), \Lleftarrow (⇚), \Longleftarrow (⟸), \Longleftrightarrow (⟺), \Longmapsfrom (⟽), \Longmapsto (⟾), \Longrightarrow (⟹), \Lparengtr (⦕), \Lsh (↰), \Lt (⪡), \Lvzigzag (⧚), \Mapsfrom (⤆), \Mapsto (⤇), \Mu (Μ), \NG (Ŋ), \Nearrow (⇗), \Not (⫬), \Nu (Ν), \Nwarrow (⇖), \O (Ø), \OE (Œ), \Ohorn (Æ ), \Omega (Ω), \Omicron (Ο), \Otimes (⨷), \P (¶), \Phi (Φ), \Pi (Π), \Planckconst (ℎ), \Prec (⪻), \PropertyLine (⅊), \Psi (Ψ), \QED (∎), \Question (⁇), \RRightarrow (⭆), \Rbrbrak (⟭), \Rdsh (↳), \Re (ℜ), \Rho (Ρ), \Rightarrow (⇒), \Rparenless (⦖), \Rrightarrow (⇛), \Rsh (↱), \Rvzigzag (⧛), \S (§), \Sc (⪼), \Searrow (⇘), \Sigma (Σ), \Sqcap (⩎), \Sqcup (⩏), \Stigma (Ϛ), \Subset (⋐), \Supset (⋑), \Swarrow (⇙), \TH (Þ), \Tau (Τ), \Theta (Θ), \UUparrow (⟰), \Uhorn (Ư), \Uparrow (⇑), \Updownarrow (⇕), \Uuparrow (⤊), \VDash (⊫), \Vbar (â««), \Vdash (⊩), \Vee (⩔), \Vert (‖), \Vvdash (⊪), \Vvert (⦀), \Wedge (⩓), \XBox (☒), \Xi (Ξ), \Yup (⅄), \Zbar (Ƶ), \Zeta (Ζ). + +\aa (Ã¥), \ac (∾), \accurrent (⏦), \acidfree (♾), \acwcirclearrow (⥀), \acwgapcirclearrow (⟲), \acwleftarcarrow (⤹), \acwopencirclearrow (↺), \acwoverarcarrow (⤺), \acwundercurvearrow (⤻), \adots (⋰), \ae (æ), \aleph (ℵ), \alpha (α), \amalg (⨿), \angdnr (⦟), \angle (∠), \angles (⦞), \angleubar (⦤), \approx (≈), \approxeq (≊), \approxeqq (â©°), \approxident (≋), \arceq (≘), \aries (♈), \assert (⊦), \ast (∗), \asteq (â©®), \astrosun (☉), \asymp (≍), \awint (⨑). + +\bNot (â«­), \backcong (≌), \backdprime (‶), \backepsilon (϶), \backprime (‵), \backsim (∽), \backsimeq (⋍), \backslash (\), \backtrprime (‷), \bagmember (⋿), \barV (⫪), \barcap (⩃), \barcup (⩂), \bardownharpoonleft (⥡), \bardownharpoonright (⥝), \barleftarrow (⇤), \barleftarrowrightarrowbar (↹), \barleftharpoondown (⥖), \barleftharpoonup (⥒), \barovernorthwestarrow (↸), \barrightarrowdiamond (⤠), \barrightharpoondown (⥟), \barrightharpoonup (⥛), \baruparrow (⤒), \barupharpoonleft (⥘), \barupharpoonright (⥔), \barvee (⊽), \barwedge (⊼), \bbrktbrk (⎶), \bdHrule (═), \bdVrule (║), \bdbVbH (╬), \bdbVbh (╫), \bdbVlH (╣), \bdbVlh (╢), \bdbVrH (╠), \bdbVrh (╟), \bdbvbH (╪), \bdbvbh (┼), \bdbvlH (╡), \bdbvlh (┤), \bdbvrH (╞), \bdbvrh (├), \bddVbH (╦), \bddVbh (╥), \bddVlH (╗), \bddVlh (╖), \bddVrH (╔), \bddVrh (╓), \bddvbH (╤), \bddvbh (┬), \bddvlH (╕), \bddvlh (┐), \bddvrH (╒), \bddvrh (┌), \bdhrule (─), \bdnesw (╱), \bdnwse (╲), \bdquadhdash (┈), \bdquadvdash (┊), \bdtriplevdash (┆), \bduVbH (╩), \bduVbh (╨), \bduVlH (╝), \bduVlh (╜), \bduVrH (╚), \bduVrh (╙), \bduvbH (╧), \bduvbh (┴), \bduvlH (╛), \bduvlh (┘), \bduvrH (╘), \bduvrh (└), \bdvrule (│), \because (∵), \benzenr (⏣), \beta (β), \beth (ℶ), \between (≬), \bigblacktriangledown (▼), \bigblacktriangleup (▲), \bigbot (⟘), \bigcap (⋂), \bigcup (⋃), \bigslopedvee (⩗), \bigslopedwedge (⩘), \bigstar (★), \bigtop (⟙), \bigtriangledown (▽), \bigtriangleup (△), \bigvee (⋁), \bigwedge (⋀), \bigwhitestar (☆), \blackcircledownarrow (â§­), \blackcircledrightdot (⚈), \blackcircledsanseight (➑), \blackcircledsansfive (➎), \blackcircledsansfour (➍), \blackcircledsansnine (➒), \blackcircledsansone (➊), \blackcircledsansseven (➐), \blackcircledsanssix (➏), \blackcircledsansten (➓), \blackcircledsansthree (➌), \blackcircledsanstwo (➋), \blackcircledtwodots (⚉), \blackcircleulquadwhite (◕), \blackdiamonddownarrow (⧪), \blackhourglass (⧗), \blackinwhitediamond (◈), \blackinwhitesquare (▣), \blacklefthalfcircle (◖), \blackpointerleft (◄), \blackpointerright (►), \blackrighthalfcircle (◗), \blacksmiley (☻), \blacktriangle (▴), \blacktriangledown (▾), \blacktriangleleft (◀), \blacktriangleright (▶), \blkhorzoval (⬬), \blkvertoval (⬮), \blockfull (█), \blockhalfshaded (▒), \blocklefthalf (▌), \blocklowhalf (▄), \blockqtrshaded (░), \blockrighthalf (▐), \blockthreeqtrshaded (▓), \blockuphalf (▀), \bot (⊥), \botsemicircle (◡), \bowtie (⋈), \box (◻), \boxast (⧆), \boxbar (◫), \boxbox (⧈), \boxbslash (⧅), \boxcircle (⧇), \boxdiag (⧄), \boxdot (⊡), \boxminus (⊟), \boxonbox (⧉), \boxplus (⊞), \boxtimes (⊠), \bsimilarleftarrow (⭁), \bsimilarrightarrow (⭇), \bsolhsub (⟈), \btimes (⨲), \bullet (∙), \bullseye (◎), \bumpeq (≏), \bumpeqq (⪮). + +\calB (ℬ), \calE (ℰ), \calF (ℱ), \calH (ℋ), \calM (ℳ), \calR (ℛ), \cap (∩), \capdot (⩀), \capwedge (⩄), \caretinsert (‸), \carreturn (⏎), \carriagereturn (↵), \ccwundercurvearrow (⤿), \cdot (⋅), \cdotp (·), \cdots (⋯), \cdprime (ʺ), \checkmark (✓), \chi (χ), \cirE (⧃), \cirbot (⟟), \circ (∘), \circeq (≗), \circfint (⨐), \circlebottomhalfblack (◒), \circledA (Ⓐ), \circledB (Ⓑ), \circledC (Ⓒ), \circledD (Ⓓ), \circledE (Ⓔ), \circledF (Ⓕ), \circledG (Ⓖ), \circledH (Ⓗ), \circledI (Ⓘ), \circledJ (Ⓙ), \circledK (Ⓚ), \circledL (Ⓛ), \circledM (Ⓜ), \circledN (Ⓝ), \circledO (Ⓞ), \circledP (Ⓟ), \circledQ (Ⓠ), \circledR (Ⓡ), \circledS (Ⓢ), \circledT (Ⓣ), \circledU (Ⓤ), \circledV (Ⓥ), \circledW (Ⓦ), \circledX (Ⓧ), \circledY (Ⓨ), \circledZ (Ⓩ), \circleda (ⓐ), \circledast (⊛), \circledb (ⓑ), \circledbullet (⦿), \circledc (ⓒ), \circledcirc (⊚), \circledd (ⓓ), \circleddash (⊝), \circlede (ⓔ), \circledeight (⑧), \circledequal (⊜), \circledf (ⓕ), \circledfive (⑤), \circledfour (④), \circledg (ⓖ), \circledh (ⓗ), \circledi (ⓘ), \circledj (ⓙ), \circledk (ⓚ), \circledl (ⓛ), \circledm (ⓜ), \circledn (ⓝ), \circlednine (⑨), \circledo (ⓞ), \circledone (①), \circledownarrow (⧬), \circledp (ⓟ), \circledparallel (⦷), \circledq (ⓠ), \circledr (ⓡ), \circledrightdot (⚆), \circleds (ⓢ), \circledsanseight (➇), \circledsansfive (➄), \circledsansfour (➃), \circledsansnine (➈), \circledsansone (➀), \circledsansseven (➆), \circledsanssix (➅), \circledsansten (➉), \circledsansthree (➂), \circledsanstwo (➁), \circledseven (⑦), \circledsix (⑥), \circledstar (✪), \circledt (ⓣ), \circledthree (③), \circledtwo (②), \circledtwodots (⚇), \circledu (ⓤ), \circledv (ⓥ), \circledvert (⦶), \circledw (ⓦ), \circledwhitebullet (⦾), \circledx (ⓧ), \circledy (ⓨ), \circledz (ⓩ), \circledzero (⓪), \circlehbar (⦵), \circlelefthalfblack (◐), \circlellquad (◵), \circlelrquad (◶), \circleonleftarrow (⬰), \circleonrightarrow (⇴), \circlerighthalfblack (◑), \circletophalfblack (◓), \circleulquad (◴), \circleurquad (◷), \circleurquadblack (◔), \circlevertfill (◍), \cirmid (⫯), \cirscir (⧂), \clangle (〈), \closedvarcap (⩍), \closedvarcup (⩌), \closedvarcupsmashprod (⩐), \closure (⁐), \cloverleaf (⌘), \clubsuit (♣), \colon (:), \colon (∶), \coloneq (≔), \commaminus (⨩), \complement (∁), \concavediamond (⟡), \concavediamondtickleft (⟢), \concavediamondtickright (⟣), \cong (≅), \congdot (â©­), \conictaper (⌲), \conjunction (☌), \coprod (∐), \cprime (ʹ), \crangle (〉), \csub (⫏), \csube (⫑), \csup (⫐), \csupe (⫒), \cuberoot (∛), \cup (∪), \cupdot (⊍), \cupleftarrow (⊌), \cupvee (⩅), \curlyeqprec (⋞), \curlyeqsucc (⋟), \curlyvee (⋎), \curlywedge (⋏), \curvearrowleft (↶), \curvearrowleftplus (⤽), \curvearrowright (↷), \curvearrowrightminus (⤼), \cwcirclearrow (⥁), \cwgapcirclearrow (⟳), \cwopencirclearrow (↻), \cwrightarcarrow (⤸), \cwundercurvearrow (⤾), \cylcty (⌭). + +\dag (†), \dagger (†), \daleth (ℸ), \danger (☡), \dashV (â«£), \dashVdash (⟛), \dashcolon (∹), \dashleftharpoondown (⥫), \dashrightharpoondown (⥭), \dashv (⊣), \dbkarow (⤏), \ddag (‡), \ddagger (‡), \ddots (⋱), \ddotseq (â©·), \delta (δ), \dh (ð), \diameter (⌀), \diamond (◇), \diamondbotblack (⬙), \diamondcdot (⟐), \diamondleftarrow (⤝), \diamondleftarrowbar (⤟), \diamondleftblack (⬖), \diamondrightblack (⬗), \diamondsuit (♢), \diamondtopblack (⬘), \dicei (⚀), \diceii (⚁), \diceiii (⚂), \diceiv (⚃), \dicev (⚄), \dicevi (⚅), \digamma (ϝ), \dingasterisk (✽), \dircurrent (⎓), \disin (⋲), \div (÷), \divideontimes (⋇), \dj (đ), \dlcrop (⌍), \doteq (≐), \dotequiv (â©§), \dotminus (∸), \dotplus (∔), \dots (…), \dotsim (⩪), \dotsminusdots (∺), \dottedcircle (◌), \dottedsquare (⬚), \dottimes (⨰), \doublebarvee (â©¢), \doublebarwedge (⩞), \doubleplus (⧺), \downarrow (↓), \downarrowbar (⤓), \downarrowbarred (⤈), \downdasharrow (⇣), \downdownarrows (⇊), \downfishtail (⥿), \downharpoonleft (⇃), \downharpoonleftbar (⥙), \downharpoonright (⇂), \downharpoonrightbar (⥕), \downharpoonsleftright (⥥), \downrightcurvedarrow (⤵), \downtriangleleftblack (⧨), \downtrianglerightblack (â§©), \downuparrows (⇵), \downupharpoonsleftright (⥯), \downwhitearrow (⇩), \downzigzagarrow (↯), \dprime (″), \draftingarrow (➛), \drbkarow (⤐), \drcrop (⌌), \dsol (â§¶), \dsub (⩤), \dualmap (⧟). + +\earth (♁), \egsdot (⪘), \eighthnote (♪), \elinters (⏧), \ell (ℓ), \elsdot (⪗), \emdash (—), \emptyset (∅), \emptysetoarr (⦳), \emptysetoarrl (⦴), \emptysetobar (⦱), \emptysetocirc (⦲), \endash (–), \enleadertwodots (‥), \envelope (✉), \eparsl (â§£), \epsilon (ϵ), \eqcirc (≖), \eqcolon (≕), \eqdef (≝), \eqdot (⩦), \eqeq (⩵), \eqeqeq (â©¶), \eqgtr (⋝), \eqless (⋜), \eqqgtr (⪚), \eqqless (⪙), \eqqplus (⩱), \eqqsim (⩳), \eqqslantgtr (⪜), \eqqslantless (⪛), \eqsim (≂), \eqslantgtr (⪖), \eqslantless (⪕), \equalleftarrow (⭀), \equalparallel (⋕), \equalrightarrow (⥱), \equiv (≡), \equivDD (⩸), \equivVert (⩨), \equivVvert (â©©), \eqvparsl (â§¥), \errbarblackcircle (â§³), \errbarblackdiamond (â§±), \errbarblacksquare (⧯), \errbarcircle (â§²), \errbardiamond (â§°), \errbarsquare (â§®), \eta (η), \euro (€), \exists (∃). + +\fallingdotseq (≒), \fbowtie (⧓), \fcmp (⨾), \fdiagovnearrow (⤯), \fdiagovrdiag (⤬), \female (♀), \figdash (‒), \fint (⨏), \fisheye (◉), \flat (♭), \fltns (⏥), \forall (∀), \forks (⫝̸), \forksnot (⫝), \forkv (⫙), \fourthroot (∜), \fourvdots (⦙), \fracfiveeighths (⅝), \fracfivesixths (⅚), \fracfourfifths (⅘), \fraconeeighth (⅛), \fraconefifth (⅕), \fraconesixth (⅙), \fraconethird (⅓), \fracseveneights (⅞), \fracslash (⁄), \fracthreeeighths (⅜), \fracthreefifths (⅗), \fractwofifths (⅖), \fractwothirds (⅔), \frakC (ℭ), \frakH (ℌ), \frakZ (ℨ), \frown (⌢), \frownie (☹), \fullouterjoin (⟗). + +\gamma (γ), \ge (≥), \geq (≥), \geqq (≧), \geqslant (⩾), \gescc (⪩), \gesdot (⪀), \gesdoto (⪂), \gesdotol (⪄), \gesles (⪔), \gets (←), \gg (≫), \ggg (⋙), \gggnest (⫸), \gimel (ℷ), \glE (⪒), \gla (⪥), \gleichstark (⧦), \glj (⪤), \gnapprox (⪊), \gneq (⪈), \gneqq (≩), \gnsim (⋧), \greater (>), \gsime (⪎), \gsiml (⪐), \gtcc (⪧), \gtcir (⩺), \gtlpar (⦠), \gtquest (⩼), \gtrapprox (⪆), \gtrarr (⥸), \gtrdot (⋗), \gtreqless (⋛), \gtreqqless (⪌), \gtrless (≷), \gtrsim (≳), \guillemotleft («), \guillemotright (»), \guilsinglleft (‹), \guilsinglright (›). + +\harrowextender (⎯), \hatapprox (⩯), \hbar (ℏ), \heartsuit (♡), \hermitmatrix (⊹), \hexagon (⎔), \hexagonblack (⬣), \hiraganano (の), \hknearrow (⤤), \hknwarrow (⤣), \hksearow (⤥), \hkswarow (⤦), \hookleftarrow (↩), \hookrightarrow (↪), \horizbar (―), \hourglass (⧖), \house (⌂), \hrectangle (▭), \hrectangleblack (▬), \hslash (ℏ), \hyphenbullet (⁃), \hzigzag (〰). + +\iiiint (⨌), \iiint (∭), \iinfin (⧜), \iint (∬), \imageof (⊷), \in (∈), \incare (℅), \increment (∆), \infty (∞), \int (∫), \intBar (⨎), \intbar (⨍), \intbottom (⌡), \intcap (⨙), \intclockwise (∱), \intcup (⨚), \intercal (⊺), \interleave (â«´), \intextender (⎮), \intlharhk (⨗), \intprod (⨼), \intprodr (⨽), \inttop (⌠), \intx (⨘), \inversebullet (◘), \inversewhitecircle (◙), \invnot (⌐), \invwhitelowerhalfcircle (◛), \invwhiteupperhalfcircle (◚), \iota (ι), \ipasupgamma (Ë ), \ipasupl (Ë¡), \ipasuprerglotstpp (ˤ), \ipasups (Ë¢), \ipasupx (Ë£), \ipaunaspirated (Ë­), \ipavoicing (ˬ), \isinE (⋹), \isindot (⋵), \isinobar (⋷), \isins (⋴), \isinvb (⋸), \itBbbD (ⅅ), \itBbbd (ⅆ), \itBbbe (ⅇ), \itBbbi (ⅈ), \itBbbj (ⅉ). + +\jupiter (♃), \kappa (κ), \kernelcontraction (∻), \koppa (ϟ). + +\l (ł), \lAngle (⟪), \lBrace (⦃), \lBrack (⟦), \lParen (⦅), \lambda (λ), \lambdabar (ƛ), \langle (⟨), \langledot (⦑), \laplac (â§ ), \lasp (ʽ), \lat (⪫), \late (⪭), \lbag (⟅), \lblkbrbrak (⦗), \lbrace (@{), \lbracelend (⎩), \lbracemid (⎨), \lbraceuend (⎧), \lbrack ([), \lbrackextender (⎢), \lbracklend (⎣), \lbracklltick (⦏), \lbrackubar (⦋), \lbrackuend (⎡), \lbrackultick (⦍), \lbrbrak (❲), \lceil (⌈), \lcurvyangle (â§¼), \ldasharrhead (⇠), \le (≤), \leadsto (↝), \leftarrow (←), \leftarrowapprox (⭊), \leftarrowbackapprox (⭂), \leftarrowbsimilar (⭋), \leftarrowless (⥷), \leftarrowonoplus (⬲), \leftarrowplus (⥆), \leftarrowshortrightarrow (⥃), \leftarrowsimilar (⥳), \leftarrowsubset (⥺), \leftarrowtail (↢), \leftarrowtriangle (⇽), \leftarrowx (⬾), \leftbkarrow (⤌), \leftcurvedarrow (⬿), \leftdasharrow (⇠), \leftdasharrowhead (⇡), \leftdbkarrow (⤎), \leftdbltail (⤛), \leftdotarrow (⬸), \leftdowncurvedarrow (⤶), \leftfishtail (⥼), \leftharpoondown (↽), \leftharpoondownbar (⥞), \leftharpoonsupdown (⥢), \leftharpoonup (↼), \leftharpoonupbar (⥚), \leftharpoonupdash (⥪), \leftleftarrows (⇇), \leftmoon (☾), \leftouterjoin (⟕), \leftrightarrow (↔), \leftrightarrowcircle (⥈), \leftrightarrows (⇆), \leftrightarrowtriangle (⇿), \leftrightharpoondowndown (⥐), \leftrightharpoondownup (⥋), \leftrightharpoons (⇋), \leftrightharpoonsdown (⥧), \leftrightharpoonsup (⥦), \leftrightharpoonupdown (⥊), \leftrightharpoonupup (⥎), \leftrightsquigarrow (↭), \leftsquigarrow (↜), \leftsquigarrow (⇜), \lefttail (⤙), \leftthreearrows (⬱), \leftthreetimes (⋋), \leftwhitearrow (⇦), \leq (≤), \leqq (≦), \leqqslant (⫹), \leqqslant (⫺), \leqslant (⩽), \lescc (⪨), \lesdot (â©¿), \lesdoto (⪁), \lesdotor (⪃), \lesges (⪓), \less (<), \lessapprox (⪅), \lessdot (⋖), \lesseqgtr (⋚), \lesseqqgtr (⪋), \lessgtr (≶), \lesssim (≲), \lfbowtie (⧑), \lfloor (⌊), \lftimes (⧔), \lgE (⪑), \lgblkcircle (⬤), \lgblksquare (⬛), \lgwhtcircle (◯), \lgwhtsquare (⬜), \lhd (⊲), \linefeed (↴), \ll (≪), \llangle (⦉), \llarc (◟), \llblacktriangle (◣), \llcorner (⌞), \lll (⋘), \lllnest (â«·), \llparenthesis (⦇), \lltriangle (◺), \lmoustache (⎰), \lnapprox (⪉), \lneq (⪇), \lneqq (≨), \lnsim (⋦), \longdashv (⟞), \longdivision (⟌), \longleftarrow (⟵), \longleftrightarrow (⟷), \longleftsquigarrow (⬳), \longmapsfrom (⟻), \longmapsto (⟼), \longrightarrow (⟶), \longrightsquigarrow (⟿), \looparrowleft (↫), \looparrowright (↬), \lowint (⨜), \lozenge (◊), \lozengeminus (⟠), \lparenextender (⎜), \lparenlend (⎝), \lparenless (⦓), \lparenuend (⎛), \lq (‘), \lrarc (◞), \lrblacktriangle (◢), \lrcorner (⌟), \lrtriangle (◿), \lrtriangleeq (â§¡), \lsime (⪍), \lsimg (⪏), \lsqhook (⫍), \ltcc (⪦), \ltcir (⩹), \ltimes (⋉), \ltlarr (⥶), \ltquest (â©»), \ltrivb (⧏), \lvboxline (⎸), \lvzigzag (⧘). + +\male (♂), \maltese (✠), \mapsdown (↧), \mapsfrom (↤), \mapsto (↦), \mapsup (↥), \mdblkdiamond (⬥), \mdblklozenge (⬧), \mdblkrcl (⚫), \mdblksquare (◼), \mdlgblkcircle (●), \mdlgblkdiamond (◆), \mdlgblklozenge (â§«), \mdlgblksquare (■), \mdlgwhtcircle (○), \mdlgwhtdiamond (◇), \mdlgwhtsquare (□), \mdsmblkcircle (⦁), \mdsmblksquare (◾), \mdsmwhtcircl (⚬), \mdsmwhtsquare (◽), \mdwhtcircl (⚪), \mdwhtdiamond (⬦), \mdwhtlozenge (⬨), \mdwhtsquare (◻), \measangledltosw (⦯), \measangledrtose (⦮), \measangleldtosw (⦫), \measanglelutonw (⦩), \measanglerdtose (⦪), \measanglerutone (⦨), \measangleultonw (⦭), \measangleurtone (⦬), \measeq (≞), \measuredangle (∡), \measuredangleleft (⦛), \measuredrightangle (⊾), \medblackstar (⭑), \medmathspace ( ), \medwhitestar (⭐), \mercury (☿), \mho (℧), \mid (∣), \midbarvee (⩝), \midbarwedge (⩜), \midcir (â«°), \minus (−), \minusdot (⨪), \minusfdots (⨫), \minusrdots (⨬), \mlcp (⫛), \models (⊧), \mp (∓), \mu (μ), \multimap (⊸), \multimapinv (⟜). + +\nHdownarrow (⇟), \nHuparrow (⇞), \nLeftarrow (⇍), \nLeftrightarrow (⇎), \nRightarrow (⇏), \nVDash (⊯), \nVdash (⊮), \nVleftarrow (⇺), \nVleftarrowtail (⬺), \nVleftrightarrow (⇼), \nVrightarrow (⇻), \nVrightarrowtail (⤕), \nVtwoheadleftarrow (⬵), \nVtwoheadleftarrowtail (⬽), \nVtwoheadrightarrow (⤁), \nVtwoheadrightarrowtail (⤘), \nabla (∇), \napprox (≉), \nasymp (≭), \natural (♮), \ncong (≇), \ne (≠), \nearrow (↗), \neg (¬), \neovnwarrow (⤱), \neovsearrow (⤮), \neptune (♆), \neq (≠), \nequiv (≢), \neswarrow (⤢), \neuter (⚲), \nexists (∄), \ng (ŋ), \ngeq (≱), \ngtr (≯), \ngtrless (≹), \ngtrsim (≵), \nhVvert (⫵), \nhpar (⫲), \ni (∋), \niobar (⋾), \nis (⋼), \nisd (⋺), \nleftarrow (↚), \nleftrightarrow (↮), \nleq (≰), \nless (≮), \nlessgtr (≸), \nlesssim (≴), \nmid (∤), \nni (∌), \nobreakhyphen (‑), \notin (∉), \nparallel (∦), \npolint (⨔), \nprec (⊀), \npreccurlyeq (⋠), \nrightarrow (↛), \nsim (≁), \nsime (≄), \nsqsubseteq (⋢), \nsqsupseteq (⋣), \nsubset (⊄), \nsubseteq (⊈), \nsucc (⊁), \nsucccurlyeq (⋡), \nsupset (⊅), \nsupseteq (⊉), \ntriangleleft (⋪), \ntrianglelefteq (⋬), \ntriangleright (⋫), \ntrianglerighteq (⋭), \nu (ν), \nvDash (⊭), \nvLeftarrow (⤂), \nvLeftrightarrow (⤄), \nvRightarrow (⤃), \nvdash (⊬), \nvinfty (⧞), \nvleftarrow (⇷), \nvleftarrowtail (⬹), \nvleftrightarrow (⇹), \nvrightarrow (⇸), \nvrightarrowtail (⤔), \nvtwoheadleftarrow (⬴), \nvtwoheadleftarrowtail (⬼), \nvtwoheadrightarrow (⤀), \nvtwoheadrightarrowtail (⤗), \nwarrow (↖), \nwovnearrow (⤲), \nwsearrow (⤡). + +\o (ø), \obar (⌽), \obot (⦺), \obrbrak (⏠), \obslash (⦸), \odiv (⨸), \odot (⊙), \odotslashdot (⦼), \oe (œ), \ogreaterthan (⧁), \ohorn (Æ¡), \oiiint (∰), \oiint (∯), \oint (∮), \ointctrclockwise (∳), \olcross (⦻), \oldKoppa (Ϙ), \oldkoppa (ϙ), \olessthan (⧀), \omega (ω), \omicron (ο), \ominus (⊖), \operp (⦹), \oplus (⊕), \opluslhrim (⨭), \oplusrhrim (⨮), \origof (⊶), \oslash (⊘), \otimes (⊗), \otimeshat (⨶), \otimeslhrim (⨴), \otimesrhrim (⨵), \overbrace (⏞), \overbracket (⎴), \overline (‾), \overparen (⏜), \owns (∋). + +\parallel (∥), \parallelogram (▱), \parallelogramblack (▰), \parsim (⫳), \partial (∂), \partialmeetcontraction (⪣), \pentagon (⬠), \pentagonblack (⬟), \perp (⟂), \perps (â«¡), \phi (ϕ), \phone (☎), \pi (π), \pitchfork (⋔), \plusdot (⨥), \pluseqq (⩲), \plushat (⨣), \plussim (⨦), \plussubtwo (⨧), \plustrif (⨨), \pluto (♇), \pm (±), \pointnt (⨕), \postalmark (〒), \prec (≺), \precapprox (⪷), \preccurlyeq (≼), \preceq (⪯), \preceqq (⪳), \precnapprox (⪹), \precneq (⪱), \precneqq (⪵), \precnsim (⋨), \precsim (≾), \prime (′), \prod (∏), \profalar (⌮), \profline (⌒), \profsurf (⌓), \propto (∝), \prurel (⊰), \psi (ψ), \pullback (⟓), \pushout (⟔). + +\qprime (⁗), \quarternote (♩), \questeq (≟), \quotdblbase („), \quotdblright (‟), \quotsinglbase (‚), \quotsinglright (‛). + +\rAngle (⟫), \rBrace (⦄), \rBrack (⟧), \rParen (⦆), \rangle (⟩), \rangledot (⦒), \rangledownzigzagarrow (⍼), \rasp (ʼ), \rbag (⟆), \rblkbrbrak (⦘), \rbrace (@}), \rbracelend (⎭), \rbracemid (⎬), \rbraceuend (⎫), \rbrack (]), \rbrackextender (⎥), \rbracklend (⎦), \rbracklrtick (⦎), \rbrackubar (⦌), \rbrackuend (⎤), \rbrackurtick (⦐), \rbrbrak (❳), \rceil (⌉), \rcurvyangle (â§½), \rdiagovfdiag (⤫), \rdiagovsearrow (⤰), \recorder (⌕), \revangle (⦣), \revangleubar (⦥), \revemptyset (⦰), \revnmid (â«®), \rfbowtie (⧒), \rfloor (⌋), \rftimes (⧕), \rhd (⊳), \rho (ρ), \righarrowbsimilar (⭌), \rightangle (∟), \rightanglemdot (⦝), \rightanglesqr (⦜), \rightarrow (→), \rightarrowapprox (⥵), \rightarrowbackapprox (⭈), \rightarrowbar (⇥), \rightarrowdiamond (⤞), \rightarrowgtr (⭃), \rightarrowonoplus (⟴), \rightarrowplus (⥅), \rightarrowshortleftarrow (⥂), \rightarrowsimilar (⥴), \rightarrowsupset (⭄), \rightarrowtail (↣), \rightarrowtriangle (⇾), \rightarrowx (⥇), \rightbkarrow (⤍), \rightcurvedarrow (⤳), \rightdasharrow (⇢), \rightdbltail (⤜), \rightdotarrow (⤑), \rightdowncurvedarrow (⤷), \rightfishtail (⥽), \rightharpoondown (⇁), \rightharpoondownbar (⥗), \rightharpoonsupdown (⥤), \rightharpoonup (⇀), \rightharpoonupbar (⥓), \rightharpoonupdash (⥬), \rightimply (⥰), \rightleftarrows (⇄), \rightleftharpoons (⇌), \rightleftharpoonsdown (⥩), \rightleftharpoonsup (⥨), \rightmoon (☽), \rightouterjoin (⟖), \rightpentagon (⭔), \rightpentagonblack (⭓), \rightrightarrows (⇉), \rightsquigarrow (↝), \rightsquigarrow (⇝), \righttail (⤚), \rightthreearrows (⇶), \rightthreetimes (⋌), \rightwhitearrow (⇨), \ringplus (⨢), \risingdotseq (≓), \rmoustache (⎱), \rparenextender (⎟), \rparengtr (⦔), \rparenlend (⎠), \rparenuend (⎞), \rppolint (⨒), \rq (’), \rrangle (⦊), \rrparenthesis (⦈), \rsolbar (â§·), \rsqhook (⫎), \rsub (â©¥), \rtimes (⋊), \rtriltri (⧎), \ruledelayed (â§´), \rvboxline (⎹), \rvzigzag (⧙). + +\sampi (Ï¡), \sansLmirrored (⅃), \sansLturned (⅂), \saturn (♄), \scissors (✂), \scpolint (⨓), \scrB (ℬ), \scrE (ℰ), \scrF (ℱ), \scrH (ℋ), \scrI (ℐ), \scrL (ℒ), \scrM (ℳ), \scrR (ℛ), \scre (ℯ), \scrg (ℊ), \scro (ℴ), \scurel (⊱), \searrow (↘), \seovnearrow (⤭), \setminus (∖), \setminus (â§µ), \sharp (♯), \shortdowntack (⫟), \shortleftarrow (←), \shortlefttack (⫞), \shortrightarrow (→), \shortrightarrowleftarrow (⥄), \shortuptack (â« ), \shuffle (â§¢), \sigma (σ), \silon (υ), \silon (ϒ), \sim (∼), \simeq (≃), \simgE (⪠), \simgtr (⪞), \similarleftarrow (⭉), \similarrightarrow (⥲), \simlE (⪟), \simless (⪝), \simminussim (⩬), \simneqq (≆), \simplus (⨤), \simrdots (â©«), \sinewave (∿), \slash (∕), \smallblacktriangleleft (◂), \smallblacktriangleright (▸), \smalldiamond (⋄), \smallin (∊), \smallint (∫), \smallni (∍), \smallsetminus (∖), \smalltriangleleft (◃), \smalltriangleright (▹), \smashtimes (⨳), \smblkdiamond (⬩), \smblklozenge (⬪), \smblksquare (▪), \smeparsl (⧤), \smile (⌣), \smiley (☺), \smt (⪪), \smte (⪬), \smwhitestar (⭒), \smwhtcircle (◦), \smwhtlozenge (⬫), \smwhtsquare (▫), \spadesuit (♠), \sphericalangle (∢), \sphericalangleup (⦡), \sqcap (⊓), \sqcup (⊔), \sqint (⨖), \sqlozenge (⌑), \sqrt (√), \sqrt3 (∛), \sqrt4 (∜), \sqrtbottom (⎷), \sqsubset (⊏), \sqsubseteq (⊑), \sqsubsetneq (⋤), \sqsupset (⊐), \sqsupseteq (⊒), \sqsupsetneq (⋥), \squarecrossfill (▩), \squaregrayfill (▩), \squarehfill (▤), \squarehvfill (▦), \squareleftblack (◧), \squareleftblack (◨), \squarellblack (⬕), \squarellquad (◱), \squarelrblack (◪), \squarelrquad (◲), \squareneswfill (▨), \squarenwsefill (▧), \squareulblack (◩), \squareulquad (◰), \squareurblack (⬔), \squareurquad (◳), \squarevfill (▥), \squoval (▢), \ss (ß), \star (⋆), \stareq (≛), \sterling (£), \stigma (ϛ), \strns (⏤), \subedot (⫃), \submult (⫁), \subrarr (⥹), \subset (⊂), \subsetapprox (⫉), \subsetcirc (⟃), \subsetdot (⪽), \subseteq (⊆), \subseteqq (⫅), \subsetneq (⊊), \subsetneqq (⫋), \subsetplus (⪿), \subsim (⫇), \subsub (⫕), \subsup (⫓), \succ (≻), \succapprox (⪸), \succcurlyeq (≽), \succeq (⪰), \succeqq (⪴), \succnapprox (⪺), \succneq (⪲), \succneqq (⪶), \succnsim (⋩), \succsim (≿), \sum (∑), \sumbottom (⎳), \sumint (⨋), \sumtop (⎲), \sun (☼), \supdsub (⫘), \supedot (⫄), \suphsol (⟉), \suphsub (⫗), \suplarr (⥻), \supmult (⫂), \supn (ⁿ), \supset (⊃), \supsetapprox (⫊), \supsetcirc (⟄), \supsetdot (⪾), \supseteq (⊇), \supseteqq (⫆), \supsetneq (⊋), \supsetneqq (⫌), \supsetplus (⫀), \supsim (⫈), \supsub (⫔), \supsup (⫖), \surd (√), \swarrow (↙). + +\talloblong (⫾), \target (⌖), \tau (τ), \taurus (♉), \testhookx (ᶍ), \textAsterisks (⁑), \textacute (ˊ), \textadvanced (˖), \textain (Ê¿), \textasciiacute (´), \textasciicircum (^), \textasciidieresis (¨), \textasciigrave (`), \textasciimacron (¯), \textasciitilde (~), \textasterisklow (⁎), \textbackdprime (‶), \textbackprime (‵), \textbacktrprime (‷), \textbardotlessj (ɟ), \textbardotlessjvar (ʄ), \textbarglotstop (Ê¡), \textbari (ɨ), \textbarl (ƚ), \textbaro (ɵ), \textbarrevglotstop (Ê¢), \textbaru (ʉ), \textbeltl (ɬ), \textbenttailyogh (ƺ), \textbreve (˘), \textbrokenbar (¦), \textbullet (•), \textbullseye (ʘ), \textcent (¢), \textcircledP (℗), \textcloseepsilon (ʚ), \textcloseomega (É·), \textcloserevepsilon (ɞ), \textcopyright (©), \textcrb (ƀ), \textcrh (ħ), \textcrinvglotstop (ƾ), \textcrlambda (ƛ), \textcrtwo (Æ»), \textctc (ɕ), \textctd (È¡), \textctesh (ʆ), \textctj (ʝ), \textctl (È´), \textctn (ȵ), \textctt (ȶ), \textctyogh (ʓ), \textctz (ʑ), \textcurrency (¤), \textdctzlig (Ê¥), \textdegree (°), \textdiscount (⁒), \textdollar ($), \textdotaccent (˙), \textdotlessj (È·), \textdoubleacute (˝), \textdoublebarpipe (ǂ), \textdoublepipe (ǁ), \textdprime (″), \textdptr (˅), \textdyoghlig (ʤ), \textdzlig (Ê£), \textepsilon (ɛ), \textesh (ʃ), \textestimated (℮), \textexclam (ǃ), \textexclamdown (¡), \textfishhookr (ɾ), \textflorin (ƒ), \textfranc (₣), \textgamma (É£), \textglotstop (ʔ), \textgrave (ˋ), \texthalflength (ˑ), \texthamza (ʾ), \texthen (ꜧ), \textheng (ꜧ), \texthooks (ᶊ), \texthookz (ᶎ), \texthtb (ɓ), \texthtc (ƈ), \texthtd (ɗ), \texthtg (É ), \texthth (ɦ), \texththeng (ɧ), \texthtk (ƙ), \texthtp (Æ¥), \texthtq (Ê ), \texthtscg (ʛ), \texthtt (Æ­), \texthvlig (ƕ), \texthyphen (‐), \textinvglotstop (ʖ), \textinvscr (ʁ), \textiota (É©), \textlengthmark (ː), \textlhalfring (˓), \textlhookd (ᶁ), \textlhookk (ᶄ), \textlhookl (ᶅ), \textlhookt (Æ«), \textlhti (É¿), \textlira (₤), \textlonglegr (ɼ), \textlongy (Ê®), \textlongy (ʯ), \textlooptoprevesh (ƪ), \textlowacute (ˏ), \textlowered (˕), \textlowgrave (ˎ), \textlowmacron (ˍ), \textlptr (˂), \textltailm (ɱ), \textltailn (ɲ), \textltilde (É«), \textlyoghlig (É®), \textmacron (ˉ), \textmu (µ), \textnumero (№), \textogonek (˛), \textohm (Ω), \textonehalf (½), \textonequarter (¼), \textonesuperior (¹), \textopeno (ɔ), \textordfeminine (ª), \textordmasculine (º), \textovercross (˟), \textoz (℥), \textpertenthousand (‱), \textperthousand (‰), \textpesetas (₧), \textphi (ɸ), \textpipe (ǀ), \textprime (′), \textprimstress (ˈ), \textqprime (⁗), \textquestiondown (¿), \textquotedbl ("), \textquotedblleft (“), \textquotedblright (”), \textraised (˔), \textraiseglotstop (ˀ), \textraiserevglotstop (ˁ), \textramshorns (ɤ), \textrecipe (℞), \textreferencemark (※), \textregistered (®), \textretracted (˗), \textreve (ɘ), \textrevepsilon (ɜ), \textrevglotstop (ʕ), \textrhalfring (˒), \textrhookrevepsilon (ɝ), \textrhookschwa (ɚ), \textrhoticity (˞), \textringaccent (˚), \textrptr (˃), \textrtaild (ɖ), \textrtaill (É­), \textrtailn (ɳ), \textrtailr (ɽ), \textrtails (ʂ), \textrtailt (ʈ), \textrtailz (ʐ), \textsca (ᴀ), \textscb (ʙ), \textsce (ᴇ), \textscg (É¢), \textsch (ʜ), \textschwa (ə), \textsci (ɪ), \textscl (ʟ), \textscn (É´), \textscoelig (ɶ), \textscr (ʀ), \textscripta (ɑ), \textscriptg (É¡), \textscriptv (ʋ), \textscu (ᴜ), \textscy (ʏ), \textsecstress (ˌ), \textsemicolonreversed (⁏), \textsilon (Î¥), \textsmalltilde (˜), \textstretchcvar (ʗ), \textsubw (w), \textsuph (ʰ), \textsuphth (ʱ), \textsupinvscr (ʶ), \textsupj (ʲ), \textsupr (ʳ), \textsupturnr (Ê´), \textsupturnrrtail (ʵ), \textsupw (Ê·), \textsupy (ʸ), \texttctctlig (ʧ), \texttctctlig (ʨ), \textthreequarters (¾), \textthreesuperior (³), \texttrademark (™), \texttrprime (‴), \texttslig (ʦ), \textturna (ɐ), \textturncomma (Ê»), \textturnh (É¥), \textturnk (ʞ), \textturnlonglegr (ɺ), \textturnm (ɯ), \textturnmrleg (ɰ), \textturnr (ɹ), \textturnrrtail (É»), \textturnscripta (ɒ), \textturnt (ʇ), \textturnv (ʌ), \textturnw (ʍ), \textturny (ʎ), \texttwosuperior (²), \textupsilon (ʊ), \textuptr (˄), \textvibyi (ʅ), \textvisiblespace (␣), \textyogh (ʒ), \th (þ), \therefore (∴), \thermod (â§§), \theta (θ), \thickapprox (≈), \thicksim (∼), \threedangle (⟀), \threedotcolon (â«¶), \tieconcat (⁀), \tieinfty (⧝), \times (×), \timesbar (⨱), \tminus (â§¿), \to (→), \toea (⤨), \tona (⤧), \tonebarextrahigh (Ë¥), \tonebarextralow (Ë©), \tonebarhigh (˦), \tonebarlow (˨), \tonebarmid (˧), \top (⊤), \topbot (⌶), \topcir (⫱), \topfork (⫚), \topsemicircle (◠), \tosa (⤩), \towa (⤪), \tplus (â§¾), \trapezium (⏢), \trianglecdot (◬), \triangledown (▿), \triangleexclam (⚠), \triangleleft (◁), \triangleleftblack (◭), \trianglelefteq (⊴), \triangleminus (⨺), \triangleodot (⧊), \triangleplus (⨹), \triangleq (≜), \triangleright (▷), \trianglerightblack (◮), \trianglerighteq (⊵), \triangles (⧌), \triangleserifs (⧍), \triangletimes (⨻), \triangleubar (⧋), \tripleplus (â§»), \trprime (‴), \turnangle (⦢), \turnediota (℩), \turnednot (⌙), \twocaps (⩋), \twocups (⩊), \twoheaddownarrow (↡), \twoheadleftarrow (↞), \twoheadleftarrowtail (⬻), \twoheadleftdbkarrow (⬷), \twoheadmapsfrom (⬶), \twoheadmapsto (⤅), \twoheadrightarrow (↠), \twoheadrightarrowtail (⤖), \twoheaduparrow (↟), \twoheaduparrowcircle (⥉), \twolowline (‗), \twonotes (♫), \typecolon (⦂). + +\ubrbrak (⏡), \uhorn (ư), \ularc (◜), \ulblacktriangle (◤), \ulcorner (⌜), \ulcrop (⌏), \ultriangle (◸), \uminus (⩁), \underbrace (⏟), \underbracket (⎵), \underparen (⏝), \unlhd (⊴), \unrhd (⊵), \upand (⅋), \uparrow (↑), \uparrowbarred (⤉), \uparrowoncircle (⦽), \updasharrow (⇢), \updownarrow (↕), \updownarrowbar (↨), \updownarrows (⇅), \updownharpoonleftleft (⥑), \updownharpoonleftright (⥍), \updownharpoonrightleft (⥌), \updownharpoonrightright (⥏), \updownharpoonsleftright (⥮), \upfishtail (⥾), \upharpoonleft (↿), \upharpoonleftbar (⥠), \upharpoonright (↾), \upharpoonrightbar (⥜), \upharpoonsleftright (⥣), \upin (⟒), \upint (⨛), \uplus (⊎), \uprightcurvearrow (⤴), \upuparrows (⇈), \upwhitearrow (⇧), \urarc (◝), \urblacktriangle (◥), \urcorner (⌝), \urcrop (⌎), \urtriangle (◹). + +\v (ˇ), \vBar (⫨), \vBarv (â«©), \vDash (⊨), \vDdash (â«¢), \varTheta (Ï´), \varVdash (⫦), \varbarwedge (⌅), \varbeta (ϐ), \varclubsuit (♧), \vardiamondsuit (♦), \vardoublebarwedge (⌆), \varepsilon (ε), \varheartsuit (♥), \varhexagon (⬡), \varhexagonblack (⬢), \varhexagonlrbonds (⌬), \varin (∈), \varisinobar (⋶), \varisins (⋳), \varkappa (ϰ), \varlrtriangle (⊿), \varni (∋), \varniobar (⋽), \varnis (⋻), \varnothing (∅), \varointclockwise (∲), \varphi (φ), \varpi (ϖ), \varpropto (∝), \varrho (ϱ), \varrowextender (⏐), \varsigma (ς), \varspadesuit (♤), \varstar (✶), \vartheta (ϑ), \vartriangle (▵), \vartriangleleft (⊲), \vartriangleright (⊳), \varveebar (â©¡), \vbraceextender (⎪), \vbrtri (⧐), \vdash (⊢), \vdots (⋮), \vectimes (⨯), \vee (∨), \veebar (⊻), \veedot (⟇), \veedoublebar (â©£), \veeeq (≚), \veemidvert (⩛), \veeodot (⩒), \veeonvee (⩖), \veeonwedge (⩙), \vert (|), \viewdata (⌗), \vlongdash (⟝), \vrectangle (▯), \vrectangleblack (▮), \vysmlblksquare (⬝), \vysmlwhtsquare (⬞), \vzigzag (⦚). + +\watchicon (⌚), \wedge (∧), \wedgebar (⩟), \wedgedot (⟑), \wedgedoublebar (â© ), \wedgemidvert (⩚), \wedgeodot (⩑), \wedgeonwedge (⩕), \wedgeq (≙), \whitearrowupfrombar (⇪), \whiteinwhitetriangle (⟁), \whitepointerleft (◅), \whitepointerright (▻), \whitesquaretickleft (⟤), \whitesquaretickright (⟥), \whthorzoval (⬭), \whtvertoval (⬯), \wideangledown (⦦), \wideangleup (⦧), \wp (℘), \wr (≀). + +\xbsol (â§¹), \xi (ξ), \xsol (⧸), \yen (Â¥), \zeta (ζ), \zpipe (⨠), Я БУДУ КРАЙНЕ ПРИЗНАТЕЛЕН ЕСЛИ КТО-НИБУДЬ ПРОВЕРИТ СООТВЕТСТВИЕ ВСЕХ ИМЕН ПРАВИЛЬНЫМ ТЕХ-ИМ СИМВОЛАМ. diff --git a/texinfo/class_en.texi b/texinfo/class_en.texi index fdf7d4a..4e822e3 100644 --- a/texinfo/class_en.texi +++ b/texinfo/class_en.texi @@ -1,6 +1,5 @@ @c ------------------------------------------------------------------ -@node Plotter classes, Widget classes, MathGL core, Top @chapter Plotter classes @cindex mglGraphAB @cindex mglGraphZB @@ -43,7 +42,7 @@ Class mglGraphIDTF implements plotting function for 1D, 2D and 3D plots and exp Generally this class is a bit less abstract class than mglGraph class (@pxref{MathGL core}). It provide many protected methods for handling intermediate data from mglGraph methods and require a few methods to be defined by derived class. The developers of derived classes should look on file @samp{mgl_ab.h} and comments inside it or contact me. -Here I just show new public methods for class mglGraphAB. There are functions returning the created picture (bitmap), its width and height. You may display it by yourself in any graphical library (see also, @ref{Widget classes}) or save in file (see also, @ref{Export to file}). +Here I just show main public methods for class mglGraphAB. There are functions returning the created picture (bitmap), its width and height. You may display it by yourself in any graphical library (see also, @ref{Widget classes}) or save in file (see also, @ref{Export to file}). @deftypefn {Method on @code{mglGraphAB} (C++)} @code{const unsigned char *} GetBits () @deftypefnx {Method on @code{mglGraph} (Python)} @code{void} GetRGB (@code{char *}buf, @code{int} size) @@ -83,7 +82,7 @@ There are some keys handles for manipulating by the plot: 'a', 'd', 'w', 's' for @end deftypemethod @deftypemethod mglGraphAB @code{void} Window (@code{int} argc, @code{char **}argv, @code{mglDraw *}draw, @code{const char *}title, @code{bool} maximize=@code{false}) -This function is mostly the same as previous one. The only difference is that the drawing function and function for data reloading are specified as methods on a class inherited from class @code{mglDraw}. This class is defined in @code{#include } and have only 2 methods: +This function is mostly the same as previous one. The only difference is that the drawing function and function for data reloading are specified as methods on a class inherited from class @code{mglDraw}. This class is defined in @code{#include } and have only 2 methods: @verbatim class mglDraw { @@ -96,43 +95,59 @@ You should inherit yours class from @code{mglDraw} and reimplement one or both f @end deftypemethod -@deftypemethod mglGraphAB @code{void} ToggleAlpha () +@deftypefn {Method on @code{mglGraphAB} (C++)} @code{void} ToggleAlpha () +@deftypefnx {C function} @code{int} mgl_wnd_toggle_alpha (@code{HMGL} gr) Switch on/off transparency but do not overwrite switches in user drawing function. -@end deftypemethod -@deftypemethod mglGraphAB @code{void} ToggleLight () +@end deftypefn +@deftypefn {Method on @code{mglGraphAB} (C++)} @code{void} ToggleLight () +@deftypefnx {C function} @code{int} mgl_wnd_toggle_light (@code{HMGL} gr) Switch on/off lighting but do not overwrite switches in user drawing function. -@end deftypemethod -@deftypemethod mglGraphAB @code{void} ToggleZoom () +@end deftypefn +@deftypefn {Method on @code{mglGraphAB} (C++)} @code{void} ToggleZoom () +@deftypefnx {C function} @code{int} mgl_wnd_toggle_zoom (@code{HMGL} gr) Switch on/off zooming by mouse as region selection. -@end deftypemethod -@deftypemethod mglGraphAB @code{void} ToggleRotate () +@end deftypefn +@deftypefn {Method on @code{mglGraphAB} (C++)} @code{void} ToggleRotate () +@deftypefnx {C function} @code{int} mgl_wnd_toggle_rotate (@code{HMGL} gr) Switch on/off rotation by mouse. Usually, left button is used for rotation, middle button for shift, right button for zoom/perspective. -@end deftypemethod -@deftypemethod mglGraphAB @code{void} ToggleNo () +@end deftypefn +@deftypefn {Method on @code{mglGraphAB} (C++)} @code{void} ToggleNo () +@deftypefnx {C function} @code{int} mgl_wnd_toggle_no (@code{HMGL} gr) Switch off all zooming and rotation and restore initial state. -@end deftypemethod -@deftypemethod mglGraphAB @code{void} Update () +@end deftypefn +@deftypefn {Method on @code{mglGraphAB} (C++)} @code{void} Update () +@deftypefnx {C function} @code{int} mgl_wnd_update (@code{HMGL} gr) Update window contents. -@end deftypemethod -@deftypemethod mglGraphAB @code{void} ReLoad (@code{bool} o) +@end deftypefn +@deftypefn {Method on @code{mglGraphAB} (C++)} @code{void} ReLoad (@code{bool} o) +@deftypefnx {C function} @code{int} mgl_wnd_reload (@code{HMGL} gr, @code{int} val) Reload user data and update picture. -@end deftypemethod -@deftypemethod mglGraphAB @code{void} Adjust () +@end deftypefn +@deftypefn {Method on @code{mglGraphAB} (C++)} @code{void} Adjust () +@deftypefnx {C function} @code{int} mgl_wnd_adjust (@code{HMGL} gr) Adjust size of bitmap to window size. -@end deftypemethod -@deftypemethod mglGraphAB @code{void} NextFrame () +@end deftypefn +@deftypefn {Method on @code{mglGraphAB} (C++)} @code{void} NextFrame () +@deftypefnx {C function} @code{int} mgl_wnd_next_frame (@code{HMGL} gr) Show next frame if one. -@end deftypemethod -@deftypemethod mglGraphAB @code{void} PrevFrame () +@end deftypefn +@deftypefn {Method on @code{mglGraphAB} (C++)} @code{void} PrevFrame () +@deftypefnx {C function} @code{int} mgl_wnd_prev_frame (@code{HMGL} gr) Show previous frame if one. -@end deftypemethod -@deftypemethod mglGraphAB @code{void} Animation () -Run/stop slideshow (animation) of frames -@end deftypemethod +@end deftypefn +@deftypefn {Method on @code{mglGraphAB} (C++)} @code{void} Animation () +@deftypefnx {C function} @code{int} mgl_wnd_animation (@code{HMGL} gr) +Run/stop slideshow (animation) of frames. +@end deftypefn +@deftypefn {C function} @code{int} mgl_wnd_set_auto_clf (@code{HMGL} gr, @code{int} val) +@end deftypefn @deftypecv {Widget option} mglGraphAB @code{bool} AutoClf Clear canvas between drawing. You may switch it off for accumulate previous drawing (for example some points or parts of a picture). @end deftypecv + +@deftypefn {C function} @code{int} mgl_wnd_set_delay (@code{HMGL} gr, @code{int} val) +@end deftypefn @deftypecv {Widget option} mglGraphAB @code{float} Delay Delay for animation in seconds. Default value is 1 sec. @end deftypecv @@ -148,780 +163,13 @@ Calculate 3D coordinate @{x,y,z@} for screen point @{xs,ys@}. At this moment it Calculate screen point @{xs,ys@} for 3D coordinate @{x,y,z@}. The calculation are done for the last used InPlot (@pxref{Transformation matrix}). @end deftypefn +@deftypefn {C function} @code{int} mgl_wnd_set_show_mouse_pos (@code{HMGL} gr, @code{int} val) +@end deftypefn @deftypecv {Widget option} mglGraphAB @code{float} ShowMousePos Switch to show or not in the widget the last mouse click position. @end deftypecv + @deftypecv {Widget option} mglGraphAB @code{mglPoint} LastMousePos Last position of mouse click. @end deftypecv -@c ------------------------------------------------------------------ -@node Widget classes, mglData class, Plotter classes, Top -@chapter Widget classes -@cindex mglGraphFLTK -@cindex mglGraphQT -@cindex mglGraphGLUT -@cindex Fl_MathGL -@cindex QMathGL -@cindex window -@cindex widgets - -There are set of ``window'' classes for making a window with MathGL graphics: @code{mglGraphFLTK}, @code{mglGraphQT}, @code{mglGraphGLUT}. All these classes allow user to show, rotate, export, and change view of the plot using keyboard. Most of them (except @code{mglGraphGLUT}) also have toolbar and menu for simplifying plot manipulation. Usually these classes (except @code{mglGraphGLUT}) are derived from @code{mglGraphZB} class and have a ``connected'' class for widget in corresponding window library. All window classes have the same set of functions (@pxref{mglGraphAB class}). Below the full list of classes with short comments. - -@deftp {Class} mglGraphFLTK -Class @code{mglGraphFLTK} adds the possibility to create plotting window with the help of FLTK library. It allows one to show, rotate, export, and change view of the plot by keyboard, menu and toolbar. ``Corresponding'' widget class is @code{Fl_MathGL}. Class is defined in @code{#include }. -@end deftp - -@deftp {Class} Fl_MathGL -Class is FLTK widget for displaying the MathGL output. Class is defined in @code{#include }. -@end deftp - -@deftp {Class} mglGraphQT -Class @code{mglGraphQT} adds the possibility to create plotting window with the help of QT library. It allows one to show, rotate, export, and change view of the plot by keyboard, menu and toolbar. ``Corresponding'' widget class is @code{QMathGL}. Class is defined in @code{#include }. -@end deftp - -@deftp {Class} QMathGL -Class is Qt widget for dysplaying the MathGL output. Class is defined in @code{#include }. -@end deftp - -@deftp {Class} mglGraphGLUT -Class @code{mglGraphGLUT} adds the possibility to create plotting window with the help of GLUT library. It allows one to show, rotate, export, and change view of the plot only by keyboard. Class is defined in @code{#include }. -@end deftp - -@menu -* Fl_MathGL class:: -* QMathGL class:: -@end menu - -@c ------------------------------------------------------------------ -@node Fl_MathGL class, QMathGL class, , Widget classes -@section Fl_MathGL class -@cindex Fl_MathGL -@cindex widgets - -Class is FLTK widget which display MathGL graphics (defined in @code{#include } - -@deftypemethod Fl_MathGL @code{void} set_draw (@code{mglDraw *}dr) -Sets drawing function from a class inherited from @code{mglDraw}. -@end deftypemethod -@deftypemethod Fl_MathGL @code{void} update (@code{mglGraph *}gr=@code{NULL}) -Update (redraw) plot using grapher @var{gr} (built-in by default). -@end deftypemethod -@deftypemethod Fl_MathGL @code{void} set_angle (@code{float} t, @code{float} p) -Set angles for additional plot rotation -@end deftypemethod -@deftypemethod Fl_MathGL @code{void} set_state (@code{int} f) -Set bitwise flags for general state (1-Alpha, 2-Light) -@end deftypemethod -@deftypemethod Fl_MathGL @code{void} set_state (@code{bool} z, @code{bool} r) -Set flags for handling mouse: @var{z}=@code{true} allow zooming, @var{r}=@code{true} allow rotation/shifting/perspective and so on. -@end deftypemethod -@deftypemethod Fl_MathGL @code{void} set_zoom (@code{float} X1, @code{float} Y1, @code{float} X2, @code{float} Y2) -Set zoom in/out region -@end deftypemethod -@deftypemethod Fl_MathGL @code{void} get_zoom (@code{float *}X1, @code{float *}Y1, @code{float *}X2, @code{float *}Y2) -Get zoom in/out region -@end deftypemethod -@deftypemethod Fl_MathGL @code{void} set_popup (@code{const Fl_Menu_Item *}pmenu, @code{Fl_Widget *}w, @code{void *}v) -Set popup menu pointer -@end deftypemethod -@deftypemethod Fl_MathGL @code{mglGraph *} get_graph () -Get pointer to grapher -@end deftypemethod - -@deftypecv {Widget option} Fl_MathGL @code{Fl_Valuator *} tet_val -Pointer to external tet-angle validator. -@end deftypecv -@deftypecv {Widget option} Fl_MathGL @code{Fl_Valuator *} phi_val -Pointer to external phi-angle validator. -@end deftypecv -@deftypecv {Widget option} Fl_MathGL @code{mglGraphAB *} graph -Pointer to grapher -@end deftypecv -@deftypecv {Widget option} Fl_MathGL @code{void *} draw_par -Parameters for drawing function mglGraph::DrawFunc. -@end deftypecv -@deftypecv {Widget option} Fl_MathGL @code{int (*} draw_func @code{)(mglGraph *gr, void *par)} -Drawing function for window procedure. It should return the number of frames. -@end deftypecv - -@c ------------------------------------------------------------------ -@node QMathGL class, , Fl_MathGL class, Widget classes -@section QMathGL class -@cindex QMathGL -@cindex widgets - -Class is Qt widget which display MathGL graphics (defined in @code{#include } - -@deftypemethod QMathGL @code{double} getRatio () -Return aspect ratio of the picture. -@end deftypemethod - -@deftypemethod QMathGL @code{void} setDraw (@code{mglDraw *}dr) -Sets drawing functions from a class inherited from @code{mglDraw}. -@end deftypemethod -@deftypemethod QMathGL @code{void} setDraw (@code{int (*}draw)(@code{mglGraph *}gr, @code{void *}p), @code{void *}par=@code{NULL}) -Sets the drawing function @var{draw}. There is support of a list of plots (frames). So as one can prepare a set of frames at first and redraw it fast later (but it requires more memory). Function should return positive number of frames for the list or zero if it will plot directly. Parameter @var{par} contains pointer to data for the plotting function @var{draw}. -@end deftypemethod - -@deftypemethod QMathGL @code{void} setGraph (@code{mglGraphAB *}gr) -Set pointer to external grapher (instead of built-in @code{mglGraphZB}). Note that QMathGL will automatically delete this object at destruction or at new @code{setGraph()} call. -@end deftypemethod - -@deftypemethod QMathGL @code{void} setPopup (@code{QMenu *}p) -Set popup menu pointer. -@end deftypemethod -@deftypemethod QMathGL @code{void} setSize (@code{int} w, @code{int} h) -Set widget/picture sizes -@end deftypemethod -@deftypemethod QMathGL @code{double} getRatio () -Return aspect ratio of the picture. -@end deftypemethod - -@deftypemethod QMathGL @code{int} getPer () -Get perspective value in percents. -@end deftypemethod -@deftypemethod QMathGL @code{int} getPhi () -Get Phi-angle value in degrees. -@end deftypemethod -@deftypemethod QMathGL @code{int} getTet () -Get Theta-angle value in degrees. -@end deftypemethod -@deftypemethod QMathGL @code{bool} getAlpha () -Get transparency state. -@end deftypemethod -@deftypemethod QMathGL @code{bool} getLight () -Get lightning state. -@end deftypemethod -@deftypemethod QMathGL @code{bool} getZoom () -Get mouse zooming state. -@end deftypemethod -@deftypemethod QMathGL @code{bool} getRotate () -Get mouse rotation state. -@end deftypemethod - -@defop Slot QMathGL @code{void} refresh () -Redraw saved bitmap without executing drawing function. -@end defop -@defop Slot QMathGL @code{void} update (@code{mglGraph *}gr=@code{NULL}) -Update picture by executing drawing function. -@end defop -@defop Slot QMathGL @code{void} copy () -Copy graphics to clipboard. -@end defop -@defop Slot QMathGL @code{void} setPer (@code{int} val) -Set perspective value. -@end defop -@defop Slot QMathGL @code{void} setPhi (@code{int} val) -Set Phi-angle value. -@end defop -@defop Slot QMathGL @code{void} setTet (@code{int} val) -Set Theta-angle value. -@end defop -@defop Slot QMathGL @code{void} setAlpha (@code{bool} val) -Switch on/off transparency. -@end defop -@defop Slot QMathGL @code{void} setLight (@code{bool} val) -Switch on/off lightning. -@end defop -@defop Slot QMathGL @code{void} setZoom (@code{bool} val) -Switch on/off mouse zooming. -@end defop -@defop Slot QMathGL @code{void} setRotate (@code{bool} val) -Switch on/off mouse rotation. -@end defop -@defop Slot QMathGL @code{void} zoomIn () -Zoom in graphics. -@end defop -@defop Slot QMathGL @code{void} zoomOut () -Zoom out graphics. -@end defop -@defop Slot QMathGL @code{void} restore () -Restore zoom and rotation to default values. -@end defop -@defop Slot QMathGL @code{void} reload () -Reload data and execute script. -@end defop -@defop Slot QMathGL @code{void} shiftLeft () -Shift graphics to left direction. -@end defop -@defop Slot QMathGL @code{void} shiftRight () -Shift graphics to right direction. -@end defop -@defop Slot QMathGL @code{void}shiftUp () -Shift graphics to up direction. -@end defop -@defop Slot QMathGL @code{void} shiftDown () -Shift graphics to down direction. -@end defop -@defop Slot QMathGL @code{void} exportPNG (@code{QString} fname=@code{""}) -Export current picture to PNG file. -@end defop -@defop Slot QMathGL @code{void} exportPNGs (@code{QString} fname=@code{""}) -Export current picture to PNG file (no transparency). -@end defop -@defop Slot QMathGL @code{void} exportJPG (@code{QString} fname=@code{""}) -Export current picture to JPEG file. -@end defop -@defop Slot QMathGL @code{void} exportBPS (@code{QString} fname=@code{""}) -Export current picture to bitmap EPS file. -@end defop -@defop Slot QMathGL @code{void} exportEPS (@code{QString} fname=@code{""}) -Export current picture to vector EPS file. -@end defop -@defop Slot QMathGL @code{void} exportSVG (@code{QString} fname=@code{""}) -Export current picture to SVG file. -@end defop -@defop Slot QMathGL @code{void} exportIDTF (@code{QString} fname=@code{""}) -Export current picture to IDTF file. -@end defop -@defop Slot QMathGL @code{void} setMGLFont (@code{QString} path) -Restore (@var{path}=@code{""} or load font for graphics. -@end defop -@defop Slot QMathGL @code{void} print () -Print current picture -@end defop -@defop Slot QMathGL @code{void} adjust () -Adjust plot size to fill entire window. This function is executed only if graph is mglGraphQT instance. -@end defop -@defop Slot QMathGL @code{void} nextSlide () -Show next slide. This function is executed only if graph is mglGraphQT instance. -@end defop -@defop Slot QMathGL @code{void} prevSlide () -Show previous slide. This function is executed only if graph is mglGraphQT instance. -@end defop -@defop Slot QMathGL @code{void} animation (@code{bool} st=@code{true}) -Start animation. This function is executed only if graph is mglGraphQT instance. -@end defop -@defop Slot QMathGL @code{void} about () -Show about information. -@end defop -@defop Slot QMathGL @code{void} aboutQt () -Show information about Qt version. -@end defop - -@defop Signal QMathGL @code{void} phiChanged (@code{int} val) -Phi angle changed (by mouse or by toolbar). -@end defop -@defop Signal QMathGL @code{void} tetChanged (@code{int} val) -Tet angle changed (by mouse or by toolbar). -@end defop -@defop Signal QMathGL @code{void} perChanged (@code{int} val) -Perspective changed (by mouse or by toolbar). -@end defop -@defop Signal QMathGL @code{void} alphaChanged (@code{bool} val) -Transparency changed (by toolbar). -@end defop -@defop Signal QMathGL @code{void} lightChanged (@code{bool} val) -Lighting changed (by toolbar). -@end defop -@defop Signal QMathGL @code{void} zoomChanged (@code{bool} val) -Zooming changed (by toolbar). -@end defop -@defop Signal QMathGL @code{void} rotateChanged (@code{bool} val) -Rotation changed (by toolbar). -@end defop - -@deftypecv {Widget option} QMathGL @code{QString} appName -Application name for message boxes. -@end deftypecv -@deftypecv {Widget option} QMathGL @code{bool} autoResize -Allow auto resizing (default is false). -@end deftypecv -@deftypecv {Widget option} QMathGL @code{int} animDelay -Animation delay in ms. -@end deftypecv - - - -@c ------------------------------------------------------------------ -@c @node mglData class, Other classes, Widget classes, Top -@c @chapter mglData class - -@include data_en.texi - - - -@c ------------------------------------------------------------------ -@node Other classes, MGL interface, mglData class, Top -@chapter Other classes - -@menu -* mglParse class:: -* mglFormula class:: -* mglFont class:: -* mglColor class:: -* mglPoint class:: -* mglVar class:: -* mglCommand class:: -* mglArg class:: -@end menu - -@c ------------------------------------------------------------------ -@node mglParse class, mglFormula class, , Other classes -@section mglParse class -@cindex mglParse - -Class for parsing and executing MGL script. This class is defined in @code{#include }. - -Class mglParse is the interpreter for MGL scripts (@pxref{MGL interface}). The main function of mglParse class is @code{Parse()}. Exactly this function parses and executes the script string-by-string. Also there are two subservient functions for the finding and creation of a variable. These functions can be useful for displaying values of variables (arrays) in some external program (in window, for example). The variable @var{DataList} contains full list of variables in script. Flag @var{AllowSetSize} allows one to prevent changing the size of the picture inside the script (forbids the MGL command @code{setsize}). - -Note an important feature -- if user defines function @var{func} in variable then it will be called before the destroying of this variable (@pxref{mglVar class}). - -@deftypefn {Method on @code{mglParse} (C++, Python)} @code{} mglParse (@code{bool} setsize=@code{false}) -@deftypefnx {C function} @code{HMPR} mgl_create_parser () -Constructor initializes all values with zero and set @var{AllowSetSize} value. -@end deftypefn - -@deftypefn {Method on @code{mglParse} (C++, Python)} @code{} ~mglParse () -@deftypefnx {C function} @code{void} mgl_delete_parser (@code{HMPR} p) -Destructor delete parser -@end deftypefn - -@deftypefn {Method on @code{mglParse} (C++, Python)} @code{int} Parse (@code{mglGraph *}gr, @code{const char *}str, @code{long} pos=@code{0}) -@deftypefnx {Method on @code{mglParse} (C++)} @code{int} Parse (@code{mglGraph *}gr, @code{const wchar_t *}str, @code{long} pos=@code{0}) -@deftypefnx {C function} @code{int} mgl_parse (@code{HMGL} gr, @code{HMPR} p, @code{const char *}str, @code{int} pos) -@deftypefnx {C function} @code{int} mgl_parsew (@code{HMGL} gr, @code{HMPR} p, @code{const wchar_t *}str, @code{int} pos) -Main function in the class. It parses the string @var{str} and executes it by using @var{gr} as a graphics plotter. Returns the value depending on an error presence in the string @var{str}: 0 -- no error, 1 -- wrong command argument(s), 2 -- unknown command, 3 -- string is too long. Optional argument @var{pos} allows to save the string position in the document (or file) for using @code{for|next} command. -@end deftypefn - -@deftypefn {Method on @code{mglParse} (C++)} @code{int} Export (@code{wchar_t} cpp_out@code{[1024]}, @code{mglGraph *}gr, @code{const wchar_t *}str) -Function parses the string @var{str}, executes it by using @var{gr} as a graphics plotter and exports it to C++ code. Returns the value depending on an error presence in the string @var{str}: 0 -- no error, 1 -- wrong command argument(s), 2 -- unknown command, 3 -- string is too long. Output C++ text will be placed in @var{out} variable. If string @var{str} have options (defined after ';' symbol) then the corresponding C++ texts are placed in variables @var{op1}, @var{op2}. -@end deftypefn - -@deftypefn {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{FILE *}fp, @code{bool} print=@code{false}) -Function parse and execute line-by-line MGL script in file @var{fp}. If @var{print}=@code{true} then all warnings and information will be printed in stdout. Also this function support the @code{for|next} MGL commands. -@end deftypefn -@deftypefn {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{int} num, @code{const wchar_t **}text, @code{void (*} error @code{)(int line, int kind)=NULL}) -Function parse and execute line-by-line MGL script in array @var{text}. If @var{error} is not @code{NULL} then this function will be called for all warnings, information and other messages. Also this function support the @code{for|next} MGL commands. -@end deftypefn - -@deftypefn {Method on @code{mglParse} (C++, Python)} @code{void} Execute (@code{mglGraph *}gr, @code{const char *}text, @code{void (*} error @code{)(int line, int kind)=NULL}) -@deftypefnx {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{const wchar_t *}text, @code{void (*} error @code{)(int line, int kind)=NULL}) -@deftypefnx {C function} @code{void} mgl_parse_text (@code{HMGL} gr, @code{HMPR} p, @code{const char *}text) -@deftypefnx {C function} @code{void} mgl_parsew_text (@code{HMGL} gr, @code{HMPR} p, @code{const wchar_t *}text) -Function parse and execute line-by-line MGL script in string @var{text}. Lines are separated by @samp{\n} symbol as usual. If @var{error} is not @code{NULL} then this function will be called for all warnings, information and other messages. Also this function support the @code{for|next} MGL commands. -@end deftypefn - -@deftypefn {Method on @code{mglParse} (C++, Python)} @code{bool} AddParam (@code{int} n, @code{const char *}str, @code{bool} isstr=@code{true}) -@deftypefnx {Method on @code{mglParse} (C++)} @code{bool} AddParam (@code{int} n, @code{const wchar_t *}str, @code{bool} isstr=@code{true}) -@deftypefnx {C function} @code{void} mgl_add_param (@code{HMPR} p, @code{int} id, @code{const char *}val) -@deftypefnx {C function} @code{void} mgl_add_paramw (@code{HMPR} p, @code{int} id, @code{const wchar_t *}val) -Function set the value of @var{n}-th parameter as string @var{str} (@var{n}=0, 1 ... 9). It return @code{true} for success. -@end deftypefn - -@deftypefn {Method on @code{mglParse} (C++, Python)} @code{mglVar *} FindVar (@code{const char *}name) -@deftypefnx {Method on @code{mglParse} (C++)} @code{mglVar *} FindVar (@code{const wchar_t *}name) -@deftypefnx {C function} @code{const HMDT} mgl_find_var (@code{HMPR} p, @code{const char *}name) -Function returns the pointer to variable with name @var{name} or zero if variable is absent. Use this function to put external data array to the script or get the data from the script. -@end deftypefn -@deftypefn {Method on @code{mglParse} (C++, Python)} @code{mglVar *} AddVar (@code{const char *}name) -@deftypefnx {Method on @code{mglParse} (C++)} @code{mglVar *} AddVar (@code{const wchar_t *}name) -@deftypefnx {C function} @code{const HMDT} mgl_add_var (@code{HMPR} p, @code{const char *}name) -Function returns the pointer to variable with name @var{name}. If variable is absent then new variable is created with name @var{name}. Use this function to put external data array to the script or get the data from the script. -@end deftypefn - -@deftypefn {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{mglVar *}v) -@deftypefnx {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{const char *}name) -@deftypefnx {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{const wchar_t *}name) -Function delete the variable specified by its name or by its pointer. -@end deftypefn - -@deftypefn {Method on @code{mglParse} (C++, Python)} @code{inline void} RestoreOnce () -@deftypefnx {C function} @code{void} mgl_restore_once (@code{HMPR} p) -Restore Once flag. -@end deftypefn - -@deftypefn {Method on @code{mglParse} (Python)} @code{void} AllowSetSize (@code{bool} a) -@deftypefnx {C function} @code{void} mgl_parser_allow_setsize (@code{HMPR} p, @code{int} a) -Allow to parse 'setsize' command or not. -@end deftypefn - -@deftypefn {Method on @code{mglParse} (C++)} @code{void} AddCommand (@code{mglCommand *}cmd, @code{int} num=@code{0}) -Add @var{num} commands @var{cmd} to the defined MGL commands list. Parameter @var{cmd} is array of @code{mglCommand} structures. If parameter @var{num}=0 then it will be determined automatically. At this, array @var{cmd} @strong{must have} last element with @code{name=L""} -@end deftypefn - -@deftypecv {Option} mglParse @code{mglVar *} DataList -List of variables defined in script. -@end deftypecv -@deftypecv {Option} mglParse @code{bool} AllowSetSize -Flag which allows/forbids the command @code{setsize} in scripts. -@end deftypecv -@deftypecv {Option} mglParse @code{bool} Stop -Flag which interrupt script execution. -@end deftypecv -@deftypecv {Option} mglParse @code{mglCommand *} Cmd -Table (array) of recognizable MGL commands (can be changed by user). Items in the table @strong{MUST be sorted} by @var{name} field !!! Last items must have empty name (i.e. @code{L""}). -@end deftypecv -@deftypecv {Option} mglParse @code{wchar_t *} op1 -These strings contain command options and should be placed before the command. These variables are used for MGL->C++ (or other language) conversion. -@end deftypecv -@deftypecv {Option} mglParse @code{wchar_t *} op2 -These strings contain command options and should be placed after the command. These variables are used for MGL->C++ (or other language) conversion. -@end deftypecv - -@c ------------------------------------------------------------------ -@node mglFormula class, mglFont class, mglParse class, Other classes -@section mglFormula class -@cindex mglFormula - -Class for evaluating of formula specified by the string. This class is defined in @code{#include }. - -It is the fast variant of formula evaluation. At creation it will be recognized and compiled to tree-like internal code. At evaluation stage only fast calculations are performed. There is no difference between lower or upper case in formulas. If argument value lie outside the range of function definition then function returns NaN. - -There are a lot of functions and operators available. The operators are: @samp{+} -- addition, @samp{-} -- subtraction, @samp{*} -- multiplication, @samp{/} -- division, @samp{^} -- integer power. Also there are logical ``operators'': @samp{<} -- true if x} -- true if x>y, @samp{=} -- true if x=y, @samp{&} -- true if x and y both nonzero, @samp{|} -- true if x or y nonzero. These logical operators have lowest priority and return 1 if true or 0 if false. - -The basic functions are: @samp{sqrt(x)} -- square root of @var{x}, @samp{pow(x,y)} power @var{x} in @var{y}, @samp{ln(x)} -- natural logarithm of @var{x}, @samp{lg(x)} -- decimal logarithm of @var{x}, @samp{log(a,x)} -- logarithm base @var{a} of @var{x}, @samp{abs(x)} -- absolute value of @var{x}, @samp{sign(x)} -- sign of @var{x}, @samp{mod(x,y)} -- x modulo y, @samp{step(x)} -- step function, @samp{rnd} -- random number, @samp{pi} -- number @math{\pi=3.1415926...}. - -Trigonometric functions are: @samp{sin(x)}, @samp{cos(x)}, @samp{tan(x)} (or @samp{tg(x)}). Inverse trigonometric functions are: @samp{asin(x)}, @samp{acos(x)}, @samp{atan(x)}. Hyperbolic functions are: @samp{sinh(x)} (or @samp{sh(x)}), @samp{cosh(x)} (or @samp{ch(x)}), @samp{tanh(x)} (or @samp{th(x)}). Inverse hyperbolic functions are: @samp{asinh(x)}, @samp{acosh(x)}, @samp{atanh(x)}. - -There are a set of special functions: @samp{gamma(x)} -- Gamma function @math{\Gamma(x) = \int_0^\infty dt t^@{x-1@} \exp(-t)} , @samp{psi(x)} -- digamma function @math{\psi(x) = \Gamma'(x)/\Gamma(x)} for x!=0, @samp{ai(x)} -- Airy function Ai(x), @samp{bi(x)} -- Airy function Bi(x), @samp{cl(x)} -- Clausen function, @samp{li2(x)} (or @samp{dilog(x)}) -- dilogarithm @math{Li_2(x) = - \Re \int_0^x ds \log(1-s)/s}, @samp{sinc(x)} -- compute @math{sinc(x) = \sin(\pi x) / (\pi x)} for any value of x, @samp{zeta(x)} -- Riemann zeta function @math{\zeta(s) = \sum_@{k=1@}^\infty k^@{-s@}} for arbitrary s!=1, @samp{eta(x)} -- eta function @math{\eta(s) = (1-2^@{1-s@}) \zeta(s)} for arbitrary s, @samp{lp(l,x)} -- Legendre polynomial @math{P_l(x)}, (|x|<=1, l>=0), @samp{w0(x)} -- principal branch of the Lambert @var{W} function, @samp{w1(x)} -- principal branch of the Lambert @var{W} function. Function W(x) is defined to be solution of the equation @math{W \exp(W) = x}. - -The exponent integrals are: @samp{ci(x)} -- Cosine integral @math{Ci(x) = \int_0^x dt \cos(t)/t}, @samp{si(x)} -- Sine integral @math{Si(x) = \int_0^x dt \sin(t)/t}, @samp{erf(x)} -- error function @math{erf(x) = (2/\sqrt(\pi)) \int_0^x dt \exp(-t^2)}, @samp{ei(x)} -- exponential integral @math{Ei(x) := - PV(\int_@{-x@}^\infty dt \exp(-t)/t)} (where PV denotes the principal value of the integral), @samp{e1(x)} -- exponential integral @math{E_1(x) := Re \int_1^\infty dt \exp(-xt)/t} , @samp{e2(x)} -- exponential integral @math{E_2(x) := Re \int_1^\infty dt \exp(-xt)/t^2}, @samp{ei3(x)} -- exponential integral @math{Ei_3(x) = \int_0^x dt \exp(-t^3)} for x>=0. - -Bessel functions are: @samp{j(nu,x)} -- regular cylindrical Bessel function of fractional order @var{nu}, @samp{y(nu,x)} -- irregular cylindrical Bessel function of fractional order @var{nu}, @samp{i(nu,x)} -- regular modified Bessel function of fractional order @var{nu}, @samp{k(nu,x)} -- irregular modified Bessel function of fractional order @var{nu}. - -Elliptic integrals are: @samp{ee(k)} -- complete elliptic integral is denoted by @math{E(k) = E(\pi/2, k)}, @samp{ek(k)} -- complete elliptic integral is denoted by @math{K(k) = F(\pi/2, k)}, @samp{e(phi,k)} -- elliptic integral @math{E(\phi,k) = \int_0^\phi dt \sqrt((1 - k^2 \sin^2(t)))}, @samp{f(phi,k)} -- elliptic integral @math{F(\phi,k) = \int_0^\phi dt 1/\sqrt((1 - k^2 \sin^2(t)))}. - -Jacobi elliptic functions are: @samp{sn(u,m)}, @samp{cn(u,m)}, @samp{dn(u,m)}, @samp{sc(u,m)}, @samp{sd(u,m)}, @samp{ns(u,m)}, @samp{cs(u,m)}, @samp{cd(u,m)}, @samp{nc(u,m)}, @samp{ds(u,m)}, @samp{dc(u,m)}, @samp{nd(u,m)}. - -Note, some of these functions are unavailable if NO\_GSL is defined during compilation of MathGL library. - -@deftypemethod mglFormula @code{} mglFormula (@code{const char *}str) -Parses the formula @var{str} and creates formula-tree. Constructor recursively parses the formula and creates a tree-like structure containing functions and operators for fast further evaluating by @code{Calc()} or @code{CalcD()} functions. -@end deftypemethod -@deftypemethod mglFormula @code{float} Calc (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}, @code{float} u=@code{0}) -Evaluates the formula for @code{'x','r'}=@var{x}, @code{'y','n'}=@var{y}, @code{'z','t'}=@var{z}, @code{'a','u'}=@var{u}. Error code (if one) can be obtained from function @code{GetError()}. -@end deftypemethod -@deftypemethod mglFormula @code{float} Calc (@code{float} x, @code{float} y, @code{float} z, @code{float} u, @code{float} v, @code{float} w) -Evaluates the formula for @code{'x'}=@var{x}, @code{'y'}=@var{y}, @code{'z'}=@var{z}, @code{'u'}=@var{u}, @code{'v'}=@var{v}, @code{'w'}=@var{w}. Error code (if one) can be obtained from function @code{GetError()}. -@end deftypemethod -@deftypemethod mglFormula @code{float} Calc (@code{float} var@code{['z'-'a'+1]}) -Evaluates the formula for variables in array @var{var}['z'-'a']. Error code (if one) can be obtained from function @code{GetError()}. -@end deftypemethod -@deftypemethod mglFormula @code{float} CalcD (@code{float} var@code{['z'-'a'+1]}, @code{char} diff) -Evaluates the formula derivation respect to @var{diff} for variables in array @var{var}['z'-'a']. Error code (if one) can be obtained from function @code{GetError()}. -@end deftypemethod -@deftypemethod mglFormula @code{int} GetError () -Returns error code: @code{0} means no error; @code{ERR_LOG} means error in logarithm or power functions; @code{ERR_ARC} means error in inverse functions (like asin); @code{ERR_SQRT} means error in sqrt function. -@end deftypemethod - -@c ------------------------------------------------------------------ -@node mglFont class, mglColor class, mglFormula class, Other classes -@section mglFont class -@cindex mglFont - -Class for working with font: load, get metrics, parse and draw strings. This class is defined in @code{#include }. - -The class is based on loading and drawing of vector Hershey font. There are two styles of specifying of the font type and aligning: by integer parameters or by string. - -The string can be any combination of characters: @samp{rbiLCRwou}. The font types are: @samp{r} -- roman font, @samp{i} -- italic style, @samp{b} -- bold style. By default roman font (that is @samp{} or @samp{r}) is used. The align types are: @samp{L} -- align left (default), @samp{C} -- align center, @samp{R} -- align right. Additional font effects are: @samp{w} -- wire, @samp{o} -- over-lined, @samp{u} -- underlined. - -The over way of font and alignment setting is the using of the integer constant. Integer font Id can be one of predefined constants: @code{MGL_FONT_ITAL, MGL_FONT_BOLD, MGL_FONT_BOLD_ITAL = MGL_FONT_ITAL+MGL_FONT_BOLD}. Default font is @code{MGL_FONT_ROMAN}. Also there are flags @code{MGL_FONT_ULINE, MGL_FONT_OLINE, MGL_FONT_WIRE} for additional font effects. Align parameter controls the text alignment: 0 -- align left, 1 -- align center, 2 -- align right. - -Parsing of the string to special (TeX-like) commands will be done if variable @var{parse} is true (it's default). There are commands for the font style changing inside the string (for example, use \b for bold font): \a or \overline -- over-lined, \b or \textbf -- bold, \i or \textit -- italic, \r or \textrm -- roman (disable bold and italic attributes), \u or \underline -- underlined, \w or \wire -- wired, \big -- bigger size, @@ -- smaller size. The lower and upper indexes are specified by @samp{_} and @samp{^} symbols. At this the changed font style is applied only on next symbol or symbols in braces @{@}. The text in braces @{@} are treated as single symbol that allow one to print the index of index. For example, compare the strings @samp{sin (x^@{2^3@})} and @samp{sin (x^2^3)}. You may also change text color inside string by command #? or by \color? where @samp{?} is symbolic id of the color (@pxref{mglColor class}). For example, words @samp{Blue} and @samp{red} will be colored in the string @samp{#b@{Blue@} and \colorr@{red@} text}. - -The most of commands for special TeX or AMSTeX symbols, the commands for font style changing (\textrm, \textbf, \textit, \overline, \underline), accents (\hat, \tilde, \dot, \ddot, \acute, \check, \grave, \bar, \breve) and roots (\sqrt, \sqrt3, \sqrt4) are recognized. The full list contain approximately 2000 commands. Note that first space symbol after the command is ignored, but second one is printed as normal symbol (space). For example, the following strings produce the same result @math{\tilde a}: @samp{\tilde@{a@}}; @samp{\tilde a}; @samp{\tilde@{@}a}. - -@ifhtml -@html -The Greek letters are recognizable special symbols: α – \alpha, β – \beta, γ – \gamma, δ – \delta, ε – \epsilon, η – \eta, ι – \iota, χ – \chi, κ – \kappa, λ – \lambda, μ – \mu, ν – \nu, o – \o, ω – \omega, ϕ – \phi, π – \pi, ψ – \psi, ρ – \rho, σ – \sigma, θ – \theta, τ – \tau, υ – \upsilon, ξ – \xi, ζ – \zeta, ς – \varsigma, ɛ – \varepsilon, ϑ – \vartheta, φ – \varphi, ϰ – \varkappa; A – \Alpha, B – \Beta, Γ – \Gamma, Δ – \Delta, E – \Epsilon, H – \Eta, I – \Iota, C – \Chi, K – \Kappa, Λ – \Lambda, M – \Mu, N – \Nu, O – \O, Ω – \Omega, Φ – \Phi, Π – \Pi, Ψ – \Psi, R – \Rho, Σ – \Sigma, Θ – \Theta, T – \Tau, Υ – \Upsilon, Ξ – \Xi, Z – \Zeta. - -

    The small part of most common special TeX symbols are: ∠ – \angle, ⋅ – \cdot, ♣ – \clubsuit, ✓ – \checkmark, ∪ – \cup, ∩ – \cap, ♢ – \diamondsuit, ◇ – \diamond, ÷ - – \div, -↓ – \downarrow, † – \dag, ‡ – \ddag, ≡ – \equiv, ∃ – \exists, ⌢ – \frown, ♭ – \flat, ≥ – \ge, ≥ – \geq, ≧ – \geqq, ← – \gets, ♡ – \heartsuit, ∞ – \infty, ∫ – \int, \Int, ℑ – \Im, ♢ – \lozenge, ⟨ – \langle, ≤ – \le, ≤ – \leq, ≦ – \leqq, ← – \leftarrow, ∓ – \mp, ∇ – \nabla, ≠ – \ne, ≠ – \neq, ♮ – \natural, ∮ – \oint, ⊙ – \odot, ⊕ – \oplus, ∂ – \partial, ∥ – \parallel, ⊥ –\perp, ± – \pm, ∝ – \propto, ∏ – \prod, ℜ – \Re, → – \rightarrow, ⟩ – \rangle, ♠ – \spadesuit, ~ – \sim, ⌣ – \smile, ⊂ – \subset, ⊃ – \supset, √ – \sqrt or \surd, § – \S, ♯ – \sharp, ∑ – \sum, × – \times, → – \to, ∴ – \therefore, ↑ – \uparrow, ℘ – \wp.

    -@end html -@end ifhtml -@ifnothtml -The Greek letters are recognizable special symbols: @math{\alpha} -- \alpha, @math{\beta} -- \beta, @math{\gamma} -- \gamma, @math{\delta} -- \delta, @math{\epsilon} -- \epsilon, @math{\eta} -- \eta, @math{\iota} -- \iota, @math{\chi} -- \chi, @math{\kappa} -- \kappa, @math{\lambda} -- \lambda, @math{\mu} -- \mu, @math{\nu} -- \nu, @math{o} -- \o, @math{\omega} -- \omega, @math{\phi} -- \phi, @math{\pi} -- \pi, @math{\psi} -- \psi, @math{\rho} -- \rho, @math{\sigma} -- \sigma, @math{\theta} -- \theta, @math{\tau} -- \tau, @math{\upsilon} -- \upsilon, @math{\xi} -- \xi, @math{\zeta} -- \zeta, @math{\varsigma} -- \varsigma, @math{\varepsilon} -- \varepsilon, @math{\vartheta} -- \vartheta, @math{\varphi} -- \varphi, A -- \Alpha, B -- \Beta, @math{\Gamma} -- \Gamma, @math{\Delta} -- \Delta, E -- \Epsilon, H -- \Eta, I -- \Iota, C -- \Chi, K -- \Kappa, @math{\Lambda} -- \Lambda, M -- \Mu, N -- \Nu, O -- \O, @math{\Omega} -- \Omega, @math{\Phi} -- \Phi, @math{\Pi} -- \Pi, @math{\Psi} -- \Psi, R -- \Rho, @math{\Sigma} -- \Sigma, @math{\Theta} -- \Theta, T -- \Tau, @math{\Upsilon} -- \Upsilon, @math{\Xi} -- \Xi, Z -- \Zeta. - -The small part of most common special TeX symbols are: @math{\angle} -- \angle, @math{\aleph} -- \aleph, @math{\cdot} -- \cdot, @math{\clubsuit} -- \clubsuit, @math{\cup} -- \cup, @math{\cap} -- \cap, @math{\diamondsuit} -- \diamondsuit, @math{\diamond} -- \diamond, @math{\div} -- \div, @math{\downarrow} -- \downarrow, @math{\dag} -- \dag, @math{\ddag} -- \ddag, @math{\equiv} -- \equiv, @math{\exists} -- \exists, @math{\frown} -- \frown, @math{\flat} -- \flat, @math{\ge} -- \ge, @math{\geq} -- \geq, @math{\gets} -- \gets, @math{\heartsuit} -- \heartsuit, @math{\infty} -- \infty, @math{\in} -- \in, @math{\int} -- \int, @math{\Im} -- \Im, @math{\langle} -- \langle, @math{\le} -- \le, @math{\leq} -- \leq, @math{\leftarrow} -- \leftarrow, @math{\mp} -- \mp, @math{\nabla} -- \nabla, @math{\ne} -- \ne, @math{\neq} -- \neq, @math{\natural} -- \natural, @math{\oint} -- \oint, @math{\odot} -- \odot, @math{\oplus} -- \oplus, @math{\partial} -- \partial, @math{\parallel} -- \parallel, @math{\perp} -- \perp, @math{\pm} -- \pm, @math{\propto} -- \propto, @math{\prod} -- \prod, @math{\Re} -- \Re, @math{\rightarrow} -- \rightarrow, @math{\rangle} -- \rangle, @math{\spadesuit} -- \spadesuit, @math{\sim} -- \sim, @math{\smile} -- \smile, @math{\subset} -- \subset, @math{\supset} -- \supset, @math{\surd} -- \sqrt or \surd, @math{\S} -- \S, @math{\sharp} -- \sharp, @math{\sum} -- \sum, @math{\times} -- \times, @math{\to} -- \to, @math{\uparrow} -- \uparrow, @math{\wp} -- \wp and so on. -@end ifnothtml - -@menu -* Format of font files:: -@end menu - - -@deftypemethod mglFont @code{} mglFont (@code{const char *}name=@code{MGL_DEF_FONT_NAME}, @code{const char *}path=@code{NULL}) -Initialize the font and load data from file @var{name} (default name is "STIX" for Linux and MacOS) or if @var{name}=@code{NULL} limited data from memory (default for Windows). -@end deftypemethod -@deftypemethod mglFont @code{bool} Load (@code{const char *} base, @code{const char *}path=@code{NULL}) -Load font from file @var{path}/@var{base} into the memory. The font may contain 4 files: @var{base}.vfm, @var{base}_b.vfm, @var{base}_i.vfm, @var{base}_bi.vfm. Appendix contain detailed description of font format. -@end deftypemethod -@deftypemethod mglFont @code{void} Restore () -Restore default font. -@end deftypemethod -@deftypemethod mglFont @code{void} (@code{mglFont *} fnt) -Copy data from other font instance. -@end deftypemethod -@deftypemethod mglFont @code{void} Clear () -Clear memory by deleting the loaded font. -@end deftypemethod -@deftypemethod mglFont @code{inline unsigned} GetNumGlyph () -Return the number of glyphs in the font. -@end deftypemethod -@deftypemethod mglFont @code{inline bool} Ready () -Return true if font is loaded and ready for use. -@end deftypemethod - - -@deftypemethod mglFont @code{float} Height (@code{int} font) -Gets height of text for font specified by integer constant. -@end deftypemethod -@deftypemethod mglFont @code{float} Puts (@code{const char *}str, @code{int} font=@code{0}, @code{int} align=@code{0}) -Prints 8-bit text string for font specified by integer constant. -@end deftypemethod -@deftypemethod mglFont @code{float} Width (@code{const char *}str, @code{int} font=@code{0}) -Gets width of 8-bit text string for font specified by integer constant. -@end deftypemethod -@deftypemethod mglFont @code{float} Puts (@code{const wchar_t *}str, @code{int} font=@code{0}, @code{int} align=@code{0}) -Prints Unicode text string for font specified by integer constant. -@end deftypemethod -@deftypemethod mglFont @code{float} Width (@code{const wchar_t *}str, @code{int} font=@code{0}) -Gets width of Unicode text string for font specified by integer constant. -@end deftypemethod - - -@deftypemethod mglFont @code{float} Height (@code{const char *}how) -Gets height of text for font specified by string. -@end deftypemethod -@deftypemethod mglFont @code{float} Puts (@code{const char *}str, @code{const char *}how) -Prints 8-bit text string for font specified by string. -@end deftypemethod -@deftypemethod mglFont @code{float} Width (@code{const char *}str, @code{const char *}how) -Gets width of 8-bit text string for font specified by string. -@end deftypemethod -@deftypemethod mglFont @code{float} Puts (@code{const wchar_t *}str, @code{const char *}how) -Prints Unicode text string for font specified by string. -@end deftypemethod -@deftypemethod mglFont @code{float} Width (@code{const wchar_t *}str, @code{const char *}how) -Gets width of Unicode text string for font specified by string. -@end deftypemethod - -@deftypecv {Parameter} mglFont @code{mglGraph *} gr -Instance of mglGraph class which is used for character drawing. -@end deftypecv -@deftypecv {Parameter} mglFont @code{bool} parse -Flag for switching on/off the parsing of TeX commands. Default value is @code{true}. -@end deftypecv - -@c ------------------------------------------------------------------ -@node Format of font files, , , mglFont class -@subsection Format of font files - -Starting from v.1.6 the MathGL library uses new font files. The font is defined in 4 files with suffixes @samp{*.vfm}, @samp{*_b.vfm}, @samp{*_i.vfm}, @samp{*_bi.vfm}. These files are text files containing the data for roman font, bold font, italic font and bold italic font. The files (or some symbols in the files) for bold, italic or bold italic fonts can be absent. In this case the roman glyph will be used for them. By analogy, if the bold italic font is absent but the bold font is present then bold glyph will be used for bold italic. You may create these font files by yourself from *.ttf, *.otf files with the help of program @code{font_tools}. This program can be found at MathGL home site. - -The format of font files (*.vfm -- vector font for MathGL) is the following. -@enumerate -@item -First string contains human readable comment and is always ignored. -@item -Second string contains 3 numbers, delimited by space or tabulation. The order of numbers is the following: @var{numg} -- the number of glyphs in the file (integer), @var{fact} -- the factor for glyph sizing (float), @var{size} -- the size of buffer for glyph description (integer). -@item -After it @var{numg}-th strings with glyphs description are placed. Each string contains 6 positive numbers, delimited by space of tabulation. The order of numbers is the following: Unicode glyph ID, glyph width, number of lines in glyph, position of lines coordinates in the buffer (length is 2*number of lines), number of triangles in glyph, position of triangles coordinates in the buffer (length is 6*number of triangles). -@item -The end of file contains the buffer with point coordinates at lines or triangles vertexes. The size of buffer (the number of integer) is @var{size}. -@end enumerate - -Note: the closing contour line is done automatically (so the last segment may be absent). For starting new contour use a point with coordinates @code{@{0x3fff, 0x3fff@}}. - - -@c ------------------------------------------------------------------ -@node mglColor class, mglPoint class, mglFont class, Other classes -@section mglColor class -@cindex mglColor - -Structure for working with colors. This structure is defined in @code{#include }. - -There are two ways to set the color in MathGL. First one is using of float values of red, green and blue channels for precise color definition. The second way is the using of character id. There are a set of characters specifying frequently used colors. Normally capital letter gives more dark color than lowercase one. The full list of characters is: @samp{k} -- black, @samp{r} -- red, @samp{R} -- dark red, @samp{g} -- green, @samp{G} -- dark green, @samp{b} -- blue, @samp{B} -- dark blue, @samp{c} -- cyan, @samp{C} -- dark cyan, @samp{m} -- magenta, @samp{M} -- dark magenta, @samp{y} -- yellow, @samp{Y} -- dark yellow (gold), @samp{h} -- gray, @samp{H} -- dark gray, @samp{w} -- white, @samp{W} -- bright gray, @samp{l} -- green-blue, @samp{L} -- dark green-blue, @samp{e} -- green-yellow, @samp{E} -- dark green-yellow, @samp{n} -- sky-blue, @samp{N} -- dark sky-blue, @samp{u} -- blue-violet, @samp{U} -- dark blue-violet, @samp{p} -- purple, @samp{P} -- dark purple, @samp{q} -- orange, @samp{Q} -- dark orange (brown). - -Also you may use ``lighted'' colors in color scheme specification (@emph{not in line style!}). The ``lighted'' color contain 2 symbols: first one is usual symbol for color specification, second one is digit for its brightness. The digit can be in range @samp{1}...@samp{9}. At this @samp{5} correspond to normal color, @samp{1} is very dark version of the color (practically black), @samp{9} is very bright version of the color (practically white). - -@float -@image{png/colors, 7cm} -@caption{Colors and its ids.} -@end float - -@deftypecv {Parameter} mglVar @code{float} {r, g, b} -Reg, green and blue component of color. -@end deftypecv - -@deftypemethod mglColor @code{} mglColor (@code{float} R, @code{float} G, @code{float} B) -Constructor sets the color by float values of Red, Green and Blue channels. -@end deftypemethod -@deftypemethod mglColor @code{} mglColor (@code{char} c=@code{'k'}) -Constructor sets the color from character id. The black color is used by default. -@end deftypemethod -@deftypemethod mglColor @code{void} Set (@code{float} R, @code{float} G, @code{float} B) -Sets color from values of Red, Green and Blue channels. This values should be in interval [0,1]. -@end deftypemethod -@deftypemethod mglColor @code{void} Set (@code{mglColor} c, @code{float} bright=@code{1}) -Sets color as ``lighted'' version of color @var{c}. -@end deftypemethod -@deftypemethod mglColor @code{void} Set (@code{char} p) -Sets color from symbolic id. -@end deftypemethod -@deftypemethod mglColor @code{bool} Valid () -Checks correctness of the color. -@end deftypemethod -@deftypemethod mglColor @code{float} Norm () -Gets maximal of spectral component. -@end deftypemethod -@deftypemethod mglColor @code{bool} operator== (@code{const mglColor &}c) -Compare with another color -@end deftypemethod - -@deftypefn {Library Function} {inline mglColor} operator+ (@code{const mglColor &}a, @code{const mglColor &}b) -Adds colors by its RGB values. -@end deftypefn -@deftypefn {Library Function} {inline mglColor} operator- (@code{const mglColor &}a, @code{const mglColor &}b) -Subtracts colors by its RGB values. -@end deftypefn -@deftypefn {Library Function} {inline mglColor} operator* (@code{const mglColor &}a, @code{float} b) -Multiplies color by number. -@end deftypefn -@deftypefn {Library Function} {inline mglColor} operator* (@code{float} a, @code{const mglColor &}b) -Multiplies color by number. -@end deftypefn -@deftypefn {Library Function} {inline mglColor} operator/ (@code{const mglColor &}a, @code{float} b) -Divide color by number. -@end deftypefn -@deftypefn {Library Function} {inline mglColor} operator! (@code{const mglColor &}a) -Return inverted color. -@end deftypefn - -@c ------------------------------------------------------------------ -@node mglPoint class, mglArg class, mglColor class, Other classes -@section mglPoint class -@cindex mglPoint - -Structure describes point in space. This structure is defined in @code{#include } - -@deftypecv {Parameter} mglVar @code{float} {x, y, z} -Point coordinates. By default all values are zero. -@end deftypecv - -@deftypefn {Library Function} {inline mglPoint} operator+ (@code{const mglPoint &}a, @code{const mglPoint &}b) -Point of summation (summation of vectors). -@end deftypefn -@deftypefn {Library Function} {inline mglPoint} operator- (@code{const mglPoint &}a, @code{const mglPoint &}b) -Point of difference (difference of vectors). -@end deftypefn -@deftypefn {Library Function} {inline mglPoint} operator* (@code{float} a, @code{const mglPoint &}b) -Multiplies (scale) points by number. -@end deftypefn -@deftypefn {Library Function} {inline mglPoint} operator* (@code{const mglPoint &}a, @code{float} b) -Multiplies (scale) points by number. -@end deftypefn -@deftypefn {Library Function} {inline mglPoint} operator/ (@code{const mglPoint &}a, @code{float} b) -Multiplies (scale) points by number 1/b. -@end deftypefn -@deftypefn {Library Function} {inline float} operator- (@code{const mglPoint &}a, @code{const mglPoint &}b) -Scalar product of vectors. -@end deftypefn -@deftypefn {Library Function} {inline mglPoint} operator^ (@code{const mglPoint &}a, @code{const mglPoint &}b) -Cross-product of vectors. -@end deftypefn -@deftypefn {Library Function} {inline mglPoint} operator& (@code{const mglPoint &}a, @code{const mglPoint &}b) -The part of @var{a} which is perpendicular to vector @var{b}. -@end deftypefn -@deftypefn {Library Function} {inline mglPoint} operator| (@code{const mglPoint &}a, @code{const mglPoint &}b) -The part of @var{a} which is parallel to vector @var{b}. -@end deftypefn - -@deftypefn {Library Function} {inline mglPoint} operator! (@code{const mglPoint &}a) -Return vector perpendicular to vector @var{a}. -@end deftypefn -@deftypefn {Library Function} {inline bool} Norm (@code{const mglPoint &}a) -Return the norm |@var{a}|^2 of vector @var{a}. -@end deftypefn - -@deftypefn {Library Function} {inline bool} operator== (@code{const mglPoint &}a, @code{const mglPoint &}b) -Return true if points are the same. -@end deftypefn -@deftypefn {Library Function} {inline bool} operator!= (@code{const mglPoint &}a, @code{const mglPoint &}b) -Return true if points are different. -@end deftypefn - -@c ------------------------------------------------------------------ -@node mglVar class, mglCommand class, mglArg class, Other classes -@section mglVar class -@cindex mglVar - -Structure describes variable of type @code{mglData} and its name in MGL script. This structure is used by @code{mglParse} and is defined in @code{#include }. - -@deftypecv {Parameter} mglVar @code{mglData} d -Data itself -@end deftypecv -@deftypecv {Parameter} mglVar @code{wchar_t} s[256] -Data name -@end deftypecv -@deftypecv {Parameter} mglVar @code{void *} o -Pointer to external object for function @var{func}. -@end deftypecv -@deftypecv {Parameter} mglVar @code{mglVar *} next -Pointer to next instance in list -@end deftypecv -@deftypecv {Parameter} mglVar @code{mglVar *} prev -Pointer to prev instance in list -@end deftypecv -@deftypecv {Parameter} mglVar @code{bool} temp -Flag for temporar variable. Temporal variables will be destroyed after script execution. -@end deftypecv -@deftypecv {Parameter} mglVar @code{void (*} func @code{)(void *)} -Callback function for destroying non-temporal variable. -@end deftypecv - -@deftypemethod mglGraphAB @code{void} MoveAfter (@code{mglVar *}var) -Move variable after @var{var} and copy @code{func} from @code{var} (if @code{func} is not 0) -@end deftypemethod - - -@c ------------------------------------------------------------------ -@node mglCommand class, , mglVar class, Other classes -@section mglCommand class -@cindex mglCommand - -Structure describes MGL command, its name, short description, executable and export functions. The structure is used by @code{mglParse} and is defined in @code{#include }. - -@deftypecv {Parameter} mglCommand @code{const wchar_t *} name -Name of command. -@end deftypecv -@deftypecv {Parameter} mglCommand @code{const wchar_t *} desc -Short command description (can be NULL). -@end deftypecv -@deftypecv {Parameter} mglCommand @code{const wchar_t *} form -Format of command arguments (can be NULL). -@end deftypecv -@deftypecv {Parameter} mglCommand @code{int (*} exec @code{)(mglGraph *gr, long n, mglArg *a, int k[10])const wchar_t *} -Function for executing (plotting) the command using grapher @var{gr} and having @var{n}-th arguments @var{a}. Function must return 0 if all is OK; or 1 if arguments are wrong. -@end deftypecv -@deftypecv {Parameter} mglCommand @code{void (*} save @code{)(wchar_t out[1024], long n, mglArg *a, int k[10])const wchar_t *} -Function for exporting in C++ (can be NULL). -@end deftypecv - - -@c ------------------------------------------------------------------ -@node mglArg class, mglVar class, mglPoint class, Other classes -@section mglArg class -@cindex mglArg - -Structure describes arguments of functions in the stucture @code{mglCommand}. It is defined in @code{#include }. - -@deftypecv {Parameter} mglArg @code{int} type -Type of argument: 0-data, 1-string, 2-number. -@end deftypecv -@deftypecv {Parameter} mglArg @code{mglData *} d -Pointer to data (used if type=0). -@end deftypecv -@deftypecv {Parameter} mglArg @code{wchar_t} w[2048] -String with parameters (used if type=1 or if type=0 as variable name). -@end deftypecv -@deftypecv {Parameter} mglArg @code{char} s[2048] -String with parameters (used if type=1). -@end deftypecv -@deftypecv {Parameter} mglArg @code{float} v -Numerical value (used if type==2) -@end deftypecv - diff --git a/texinfo/class_ru.texi b/texinfo/class_ru.texi index fdf7d4a..e80f0f4 100644 --- a/texinfo/class_ru.texi +++ b/texinfo/class_ru.texi @@ -1,33 +1,32 @@ @c ------------------------------------------------------------------ -@node Plotter classes, Widget classes, MathGL core, Top -@chapter Plotter classes +@chapter Классы для отрисовки @cindex mglGraphAB @cindex mglGraphZB @cindex mglGraphPS @cindex mglGraphGL @cindex mglGraphIDTF -The class mglGraph (@pxref{MathGL core}) provide the basic tools for creating scientific graphics but it is abstract class. The matter is that there are several possible way to draw a graphics: in bitmap, in vector file, using OpenGL and so on. As result, user should use some of derived classes to do actual drawing. In principle, it is possible to derive a class exactly from mglGraph (and it was in v.1.6). But I recommend to derive from mglGraphAB class for higher compatibility of produced graphics from different classes. Class mglGraphAB is another abstract class which provide basic coordinates transformation, plotting functions and export to bitmap picture. It still require a functions for drawing lines, triangles and quadrangles. So below a set of ``plotter'' classes with short comments. +Класс mglGraph (@pxref{MathGL core}) обеспечивает базовые функции для создания научной графики, но это абстрактный класс. Причина в том, что существует несколько возможностей вывода/отображения получившегося рисунка: в растровый или в векторный файлы, используя OpenGL и т.д. В результате, для конечной отрисовки необходимо использовать производные классы. В принципе, можно наследовать непосредственно mglGraph (и так было до версии 1.6). Однако, я рекомендую использовать в качестве базового класс mglGraphAB для большего единообразия получающейся графики в различных классах. Класс mglGraphAB -- другой абстрактный класс, обеспечивающий преобразование координат, базовые функции рисования и сохранения в растровое изображение. Он требует доопределения функций рисования линий, треугольников и четырехугольников. Ниже приведены классы ``отрисовки'' с короткими комментариями. -@deftp {Class} mglGraphAB -Abstract class mglGraphAB implements plotting function for 1D, 2D and 3D plots using Z-ordering and provides base functionality for to screen coordinate transformation, bitmap creation and so on. Class is defined in @code{#include }. +@deftp {Класс} mglGraphAB +Абстрактный класс, обеспечивающий отрисовку по глубине, преобразование к экранным координатам, сохранение в растровое изображение и т.д. Класс определен в @code{#include }. @end deftp -@deftp {Class} mglGraphZB -Class mglGraphZB implements plotting function for 1D, 2D and 3D plots using Z-Buffer. It is useful for off-screen (for console or SSH terminal) programs. Also this class can be used in any other programs which may draw bitmap on the screen (for example, by using FLTK, Qt, wxWidgets libraries and so on). Note that bitmap picture is saved while exporting to EPS format. The produced graphics have better quality but slower in comparison with graphics in the class mglGraphPS. Class is defined in @code{#include }. +@deftp {Класс} mglGraphZB +Реализует растровую отрисовку изображения используя Z-Buffer. Можно использовать для рисования в памяти (или в консоли/SSH терминале). Также этот класс используется как базовый для рисования в окне (например, используя FLTK, Qt, wxWidgets библиотеки и пр.). При экспорте в EPS формат сохраняется растровая картинка. Получающийся рисунок лучшего качества, но рисуется медленнее чем в классе mglGraphPS. Класс определен в @code{#include }. @end deftp -@deftp {Class} mglGraphPS -Class mglGraphPS implements plotting functions for 1D, 2D and 3D plots and exports them to PostScript or SVG file. It is useful for off-screen (for console or SSH terminal) programs. Note that there is no transparency support now and color interpolation and lightning support is limited (not so nice as in class mglGraphZB). As result the plots with transparency (SurfA, Surf3A, CloudP, CloudQ) may look not so good. However the speed of drawing is higher in comparison with one in the class mglGraphZB. Class is defined in @code{#include }. +@deftp {Класс} mglGraphPS +Реализует векторную отрисовку изображения с возможностью сохранения в векторный PostScript или SVG файл. Можно использовать для рисования в памяти (или в консоли/SSH терминале). Замечу, что сглаживание цвета не поддерживается, а при экспорте в EPS не поддерживается и прозрачность (в силу ограничения формата). В результате рисунок получается быстрее, но более низкого качества чем в классе mglGraphZB. Класс определен в @code{#include }. @end deftp -@deftp {Class} mglGraphGL -Class mglGraphGL implements plotting function for 1D, 2D and 3D plots under OpenGL. This class can not be used in off-screen applications. Note, that several transparent overlapped surfaces are drawn not so correctly due to OpenGL limitations. Class is defined in @code{#include }. +@deftp {Класс} mglGraphGL +Реализует векторную графику с использованием OpenGL. Класс не может быть использован для рисования в консоли. В силу ограничения OpenGL возможна проблема корректного отображения нескольких перекрывающихся поверхностей. Класс определен в @code{#include }. @end deftp -@deftp {Class} mglGraphIDTF -Class mglGraphIDTF implements plotting function for 1D, 2D and 3D plots and export it in IDTF format. Later this file can be converted in U3D format. Class is defined in @code{#include }. +@deftp {Класс} mglGraphIDTF +Реализует экспорт графики в IDTF формате, который затем можно преобразовать в формат U3D. Класс определен в @code{#include }. @end deftp @menu @@ -36,20 +35,20 @@ Class mglGraphIDTF implements plotting function for 1D, 2D and 3D plots and exp @c ------------------------------------------------------------------ @node mglGraphAB class, , , Plotter classes -@section mglGraphAB class +@section Класс mglGraphAB @cindex mglGraphAB @cindex window -#cindex mglDraw +@cindex mglDraw -Generally this class is a bit less abstract class than mglGraph class (@pxref{MathGL core}). It provide many protected methods for handling intermediate data from mglGraph methods and require a few methods to be defined by derived class. The developers of derived classes should look on file @samp{mgl_ab.h} and comments inside it or contact me. +Вообще говоря это чуть ``менее абстрактный'' класс чем mglGraph (@pxref{MathGL core}). Он предоставляет много методов для обработки промежуточных данных и требует в производных классах определения только нескольких методов для отрисовки примитивов. Разработчикам, наследующим этот класс, следует посмотреть файл @samp{mgl_ab.h} и комментарии в нем или обратиться к автору. -Here I just show new public methods for class mglGraphAB. There are functions returning the created picture (bitmap), its width and height. You may display it by yourself in any graphical library (see also, @ref{Widget classes}) or save in file (see also, @ref{Export to file}). +Ниже я только перечислю основные общедоступные методы класса mglGraphAB. В первую очередь это функции, возвращающие созданный растровый рисунок, его ширину и высоту. В дальнейшем его можно использовать в любой графической библиотеке (см. также, @ref{Widget classes}) или сохранить в файл (см. также, @ref{Export to file}). -@deftypefn {Method on @code{mglGraphAB} (C++)} @code{const unsigned char *} GetBits () -@deftypefnx {Method on @code{mglGraph} (Python)} @code{void} GetRGB (@code{char *}buf, @code{int} size) -@deftypefnx {Method on @code{mglGraph} (Python)} @code{void} GetBGRN (@code{char *}buf, @code{int} size) +@deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{const unsigned char *} GetBits () +@deftypefnx {Метод класса @code{mglGraph} (Python)} @code{void} GetRGB (@code{char *}buf, @code{int} size) +@deftypefnx {Метод класса @code{mglGraph} (Python)} @code{void} GetBGRN (@code{char *}buf, @code{int} size) @deftypefnx {C function} @code{const unsigned char *} mgl_get_rgb (@code{HMGL} gr) -Gets RGB bitmap of the current state of the image. Format of each element of bits is: @{red, green, blue@}. Number of elements is Width*Height. Position of element @{i,j@} is [3*i + 3*Width*j] (or is [4*i + 4*Width*j] for @code{GetBGRN()}). For Python you have to provide the proper @var{size} of the buffer, @var{buf} i.e. the code should look like +Возвращает растровое изображение в формате RGB для текущего кадра. Формат каждого элемента (пикселя): @{red, green, blue@}. Число элементов Width*Height. Положение элемента @{i,j@} есть [3*i + 3*Width*j] (или [4*i + 4*Width*j] для @code{GetBGRN()}). В Python вы должны предоставить буфер @var{buf} достаточного размера @var{size}, т.е. код должен выглядеть следующим образом @verbatim from mathgl import * gr = mglGraph(); @@ -59,31 +58,31 @@ gr.GetBGRN(bits, len(bits)); @end verbatim @end deftypefn -@deftypefn {Method on @code{mglGraphAB} (C++)} @code{const unsigned char *} GetRGBA () -@deftypefnx {Method on @code{mglGraph} (Python)} @code{void} GetRGBA (@code{char *}buf, @code{int} size) +@deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{const unsigned char *} GetRGBA () +@deftypefnx {Метод класса @code{mglGraph} (Python)} @code{void} GetRGBA (@code{char *}buf, @code{int} size) @deftypefnx {C function} @code{const unsigned char *} mgl_get_rgba (@code{HMGL} gr) -Gets RGBA bitmap of the current state of the image. Format of each element of bits is: @{red, green, blue, alpha@}. Number of elements is Width*Height. Position of element @{i,j@} is [4*i + 4*Width*j]. +Возвращает растровое изображение в формате RGBA для текущего кадра. Формат каждого элемента (пикселя): @{red, green, blue, alpha@}. Число элементов Width*Height. Положение элемента @{i,j@} есть [4*i + 4*Width*j]. @end deftypefn -@deftypefn {Method on @code{mglGraphAB} (C++, Python)} @code{int} GetWidth () -@deftypefnx {Method on @code{mglGraphAB} (C++, Python)} @code{int} GetHeight () +@deftypefn {Метод класса @code{mglGraphAB} (C++, Python)} @code{int} GetWidth () +@deftypefnx {Метод класса @code{mglGraphAB} (C++, Python)} @code{int} GetHeight () @deftypefnx {C function} @code{int} mgl_get_width (@code{HMGL} gr) @deftypefnx {C function} @code{int} mgl_get_height (@code{HMGL} gr) -Gets width and height of the image. +Возвращает ширину и высоту изображения. @end deftypefn -Class mglGraphAB is the base class for ``widget classes''. So there are set of functions for handling window behavior. Most of them are applicable only for ``window'' classes (like mglGraphFLTK and so on, @pxref{Widget classes}). In all other classes these functions just do nothing. You should provide the corresponding interface in derived ``widget'' classes for user convenience. +Класс mglGraphAB -- базовый класс для ``оконных классов''. Поэтому он содержит набор функций для создания и управления окном. Большинство из них применимо только в ``оконных классах'' (типа mglGraphFLTK и др, @pxref{Widget classes}). В остальных случаях функции ничего не делают. Если вы создаете оконный класс, то Вам следует предоставить такой же интерфейс для удобства пользователя. @deftypemethod mglGraphAB @code{void} Window (@code{int} argc, @code{char **}argv, @code{int (*}draw)(@code{mglGraph *}gr, @code{void *}p), @code{const char *}title, @code{void *}par=@code{NULL}, @code{void (*}reload)(@code{int} next, @code{void *}p)=@code{NULL}, @code{bool} maximize=@code{false}) -This function creates a window for plotting. Parameters @var{argc}, @var{argv} contain OS specific information and should be the same as in function @code{main(int argc,char **argv)}. Parameter @var{draw} sets a pointer (this is the name of function) to drawing function. There is support of a list of plots (frames). So as one can prepare a set of frames at first and redraw it fast later (but it requires more memory). Function should return positive number of frames for the list or zero if it will plot directly. Note, that @var{draw} can be @code{NULL} for displaying static bitmaps only (no animation or slides). Parameter @var{title} sets the title of the window. Parameter @var{par} contains pointer to data for the plotting function @var{draw}. Parameter @var{maximize}=@code{true} open maximized window. +Создает окно для вывода графика. Параметры @var{argc}, @var{argv} содержат информацию операционной системы и их слеудет передать в эту функцию из функции @code{main(int argc,char **argv)} (хотя они и могут быть равны @code{NULL}). Параметр @var{draw} -- указатель (имя) функции рисования. Есть возможность создания нескольких кадров вначале (требует больше памяти) и их быстрая анимации в дальнейшем. В этом случае функция @var{draw} должна возвращать число кадров или ноль для рисования по запросу. Замечу, что @var{draw} может быть равна @code{NULL} для отображения статической (текущей) картинки. Параметр @var{title} задает заголовок окна. Параметр @var{par} содержит указатель на данные, передаваемые функции рисования @var{draw}. Параметр @var{maximize}=@code{true} открывает окно раскрытым на весь экран. -There are some keys handles for manipulating by the plot: 'a', 'd', 'w', 's' for the rotating; ',', '.' for viewing of the previous or next frames in the list; 'r' for the switching of transparency; 'f' for the switching of lightning; 'x' for hiding (closing) the window. +В окне просмотра можно использовать клавиши: 'a', 'd', 'w', 's' для вращения; ',', '.' для просмотра предыдущего и следующего кадров; 'r' для переключения прозрачности; 'f' для переключения оспещенности; 'x' для закрытия окна. -@strong{IMPORTANT!!!} You need to add a call of Rotate() (@pxref{Transformation matrix}) function for having possibility of plot rotation. If plot should be unrotated by default just add @code{Rotate(0,0)} in drawing function. +@strong{ВАЖНО!!!} Вам не следует вызывать функцию Rotate() (@pxref{Transformation matrix}) если Вы хотите вращать график. @end deftypemethod @deftypemethod mglGraphAB @code{void} Window (@code{int} argc, @code{char **}argv, @code{mglDraw *}draw, @code{const char *}title, @code{bool} maximize=@code{false}) -This function is mostly the same as previous one. The only difference is that the drawing function and function for data reloading are specified as methods on a class inherited from class @code{mglDraw}. This class is defined in @code{#include } and have only 2 methods: +В основном аналогична предыдущей. Основное отличие в том, что функции рисования и обновления данных определены в классе наследнике класса @code{mglDraw}. Этот класс определен в @code{#include } и имеет только 2 метода: @verbatim class mglDraw { @@ -92,836 +91,88 @@ public: virtual void Reload(int) {}; }; @end verbatim -You should inherit yours class from @code{mglDraw} and reimplement one or both functions for using this function. +Вы можете создать класс-наследник @code{mglDraw} и переопределить один или оба метода для использования с данной функцией. @end deftypemethod -@deftypemethod mglGraphAB @code{void} ToggleAlpha () -Switch on/off transparency but do not overwrite switches in user drawing function. -@end deftypemethod -@deftypemethod mglGraphAB @code{void} ToggleLight () -Switch on/off lighting but do not overwrite switches in user drawing function. -@end deftypemethod -@deftypemethod mglGraphAB @code{void} ToggleZoom () -Switch on/off zooming by mouse as region selection. -@end deftypemethod -@deftypemethod mglGraphAB @code{void} ToggleRotate () -Switch on/off rotation by mouse. Usually, left button is used for rotation, middle button for shift, right button for zoom/perspective. -@end deftypemethod -@deftypemethod mglGraphAB @code{void} ToggleNo () -Switch off all zooming and rotation and restore initial state. -@end deftypemethod -@deftypemethod mglGraphAB @code{void} Update () -Update window contents. -@end deftypemethod -@deftypemethod mglGraphAB @code{void} ReLoad (@code{bool} o) -Reload user data and update picture. -@end deftypemethod -@deftypemethod mglGraphAB @code{void} Adjust () -Adjust size of bitmap to window size. -@end deftypemethod -@deftypemethod mglGraphAB @code{void} NextFrame () -Show next frame if one. -@end deftypemethod -@deftypemethod mglGraphAB @code{void} PrevFrame () -Show previous frame if one. -@end deftypemethod -@deftypemethod mglGraphAB @code{void} Animation () -Run/stop slideshow (animation) of frames -@end deftypemethod - -@deftypecv {Widget option} mglGraphAB @code{bool} AutoClf -Clear canvas between drawing. You may switch it off for accumulate previous drawing (for example some points or parts of a picture). -@end deftypecv -@deftypecv {Widget option} mglGraphAB @code{float} Delay -Delay for animation in seconds. Default value is 1 sec. -@end deftypecv - -@deftypefn {Method on @code{mglGraphAB} (C++, Python)} @code{mglPoint} CalcXYZ (@code{int} xs, @code{int} ys) -@deftypefnx {C function} @code{void} mgl_calc_xyz (@code{HMGL} gr, @code{int} xs, @code{int} ys, @code{float *}x, @code{float *}y, @code{float *}z) -Calculate 3D coordinate @{x,y,z@} for screen point @{xs,ys@}. At this moment it ignore perspective and transformation formulas (curvilinear coordinates). The calculation are done for the last used InPlot (@pxref{Transformation matrix}). -@end deftypefn - -@deftypefn {Method on @code{mglGraphAB} (C++, Python)} @code{mglPoint} CalcScr (@code{mglPoint} p) -@deftypefnx {Method on @code{mglGraphAB} (C++)} @code{void} CalcScr (@code{mglPoint} p, @code{int *}xs, @code{int *}ys) -@deftypefnx {C function} @code{void} mgl_calc_scr (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{int *}xs, @code{int *}ys) -Calculate screen point @{xs,ys@} for 3D coordinate @{x,y,z@}. The calculation are done for the last used InPlot (@pxref{Transformation matrix}). -@end deftypefn - -@deftypecv {Widget option} mglGraphAB @code{float} ShowMousePos -Switch to show or not in the widget the last mouse click position. -@end deftypecv -@deftypecv {Widget option} mglGraphAB @code{mglPoint} LastMousePos -Last position of mouse click. -@end deftypecv - -@c ------------------------------------------------------------------ -@node Widget classes, mglData class, Plotter classes, Top -@chapter Widget classes -@cindex mglGraphFLTK -@cindex mglGraphQT -@cindex mglGraphGLUT -@cindex Fl_MathGL -@cindex QMathGL -@cindex window -@cindex widgets - -There are set of ``window'' classes for making a window with MathGL graphics: @code{mglGraphFLTK}, @code{mglGraphQT}, @code{mglGraphGLUT}. All these classes allow user to show, rotate, export, and change view of the plot using keyboard. Most of them (except @code{mglGraphGLUT}) also have toolbar and menu for simplifying plot manipulation. Usually these classes (except @code{mglGraphGLUT}) are derived from @code{mglGraphZB} class and have a ``connected'' class for widget in corresponding window library. All window classes have the same set of functions (@pxref{mglGraphAB class}). Below the full list of classes with short comments. - -@deftp {Class} mglGraphFLTK -Class @code{mglGraphFLTK} adds the possibility to create plotting window with the help of FLTK library. It allows one to show, rotate, export, and change view of the plot by keyboard, menu and toolbar. ``Corresponding'' widget class is @code{Fl_MathGL}. Class is defined in @code{#include }. -@end deftp - -@deftp {Class} Fl_MathGL -Class is FLTK widget for displaying the MathGL output. Class is defined in @code{#include }. -@end deftp - -@deftp {Class} mglGraphQT -Class @code{mglGraphQT} adds the possibility to create plotting window with the help of QT library. It allows one to show, rotate, export, and change view of the plot by keyboard, menu and toolbar. ``Corresponding'' widget class is @code{QMathGL}. Class is defined in @code{#include }. -@end deftp - -@deftp {Class} QMathGL -Class is Qt widget for dysplaying the MathGL output. Class is defined in @code{#include }. -@end deftp - -@deftp {Class} mglGraphGLUT -Class @code{mglGraphGLUT} adds the possibility to create plotting window with the help of GLUT library. It allows one to show, rotate, export, and change view of the plot only by keyboard. Class is defined in @code{#include }. -@end deftp - -@menu -* Fl_MathGL class:: -* QMathGL class:: -@end menu - -@c ------------------------------------------------------------------ -@node Fl_MathGL class, QMathGL class, , Widget classes -@section Fl_MathGL class -@cindex Fl_MathGL -@cindex widgets - -Class is FLTK widget which display MathGL graphics (defined in @code{#include } - -@deftypemethod Fl_MathGL @code{void} set_draw (@code{mglDraw *}dr) -Sets drawing function from a class inherited from @code{mglDraw}. -@end deftypemethod -@deftypemethod Fl_MathGL @code{void} update (@code{mglGraph *}gr=@code{NULL}) -Update (redraw) plot using grapher @var{gr} (built-in by default). -@end deftypemethod -@deftypemethod Fl_MathGL @code{void} set_angle (@code{float} t, @code{float} p) -Set angles for additional plot rotation -@end deftypemethod -@deftypemethod Fl_MathGL @code{void} set_state (@code{int} f) -Set bitwise flags for general state (1-Alpha, 2-Light) -@end deftypemethod -@deftypemethod Fl_MathGL @code{void} set_state (@code{bool} z, @code{bool} r) -Set flags for handling mouse: @var{z}=@code{true} allow zooming, @var{r}=@code{true} allow rotation/shifting/perspective and so on. -@end deftypemethod -@deftypemethod Fl_MathGL @code{void} set_zoom (@code{float} X1, @code{float} Y1, @code{float} X2, @code{float} Y2) -Set zoom in/out region -@end deftypemethod -@deftypemethod Fl_MathGL @code{void} get_zoom (@code{float *}X1, @code{float *}Y1, @code{float *}X2, @code{float *}Y2) -Get zoom in/out region -@end deftypemethod -@deftypemethod Fl_MathGL @code{void} set_popup (@code{const Fl_Menu_Item *}pmenu, @code{Fl_Widget *}w, @code{void *}v) -Set popup menu pointer -@end deftypemethod -@deftypemethod Fl_MathGL @code{mglGraph *} get_graph () -Get pointer to grapher -@end deftypemethod - -@deftypecv {Widget option} Fl_MathGL @code{Fl_Valuator *} tet_val -Pointer to external tet-angle validator. -@end deftypecv -@deftypecv {Widget option} Fl_MathGL @code{Fl_Valuator *} phi_val -Pointer to external phi-angle validator. -@end deftypecv -@deftypecv {Widget option} Fl_MathGL @code{mglGraphAB *} graph -Pointer to grapher -@end deftypecv -@deftypecv {Widget option} Fl_MathGL @code{void *} draw_par -Parameters for drawing function mglGraph::DrawFunc. -@end deftypecv -@deftypecv {Widget option} Fl_MathGL @code{int (*} draw_func @code{)(mglGraph *gr, void *par)} -Drawing function for window procedure. It should return the number of frames. -@end deftypecv - -@c ------------------------------------------------------------------ -@node QMathGL class, , Fl_MathGL class, Widget classes -@section QMathGL class -@cindex QMathGL -@cindex widgets - -Class is Qt widget which display MathGL graphics (defined in @code{#include } - -@deftypemethod QMathGL @code{double} getRatio () -Return aspect ratio of the picture. -@end deftypemethod - -@deftypemethod QMathGL @code{void} setDraw (@code{mglDraw *}dr) -Sets drawing functions from a class inherited from @code{mglDraw}. -@end deftypemethod -@deftypemethod QMathGL @code{void} setDraw (@code{int (*}draw)(@code{mglGraph *}gr, @code{void *}p), @code{void *}par=@code{NULL}) -Sets the drawing function @var{draw}. There is support of a list of plots (frames). So as one can prepare a set of frames at first and redraw it fast later (but it requires more memory). Function should return positive number of frames for the list or zero if it will plot directly. Parameter @var{par} contains pointer to data for the plotting function @var{draw}. -@end deftypemethod - -@deftypemethod QMathGL @code{void} setGraph (@code{mglGraphAB *}gr) -Set pointer to external grapher (instead of built-in @code{mglGraphZB}). Note that QMathGL will automatically delete this object at destruction or at new @code{setGraph()} call. -@end deftypemethod - -@deftypemethod QMathGL @code{void} setPopup (@code{QMenu *}p) -Set popup menu pointer. -@end deftypemethod -@deftypemethod QMathGL @code{void} setSize (@code{int} w, @code{int} h) -Set widget/picture sizes -@end deftypemethod -@deftypemethod QMathGL @code{double} getRatio () -Return aspect ratio of the picture. -@end deftypemethod - -@deftypemethod QMathGL @code{int} getPer () -Get perspective value in percents. -@end deftypemethod -@deftypemethod QMathGL @code{int} getPhi () -Get Phi-angle value in degrees. -@end deftypemethod -@deftypemethod QMathGL @code{int} getTet () -Get Theta-angle value in degrees. -@end deftypemethod -@deftypemethod QMathGL @code{bool} getAlpha () -Get transparency state. -@end deftypemethod -@deftypemethod QMathGL @code{bool} getLight () -Get lightning state. -@end deftypemethod -@deftypemethod QMathGL @code{bool} getZoom () -Get mouse zooming state. -@end deftypemethod -@deftypemethod QMathGL @code{bool} getRotate () -Get mouse rotation state. -@end deftypemethod - -@defop Slot QMathGL @code{void} refresh () -Redraw saved bitmap without executing drawing function. -@end defop -@defop Slot QMathGL @code{void} update (@code{mglGraph *}gr=@code{NULL}) -Update picture by executing drawing function. -@end defop -@defop Slot QMathGL @code{void} copy () -Copy graphics to clipboard. -@end defop -@defop Slot QMathGL @code{void} setPer (@code{int} val) -Set perspective value. -@end defop -@defop Slot QMathGL @code{void} setPhi (@code{int} val) -Set Phi-angle value. -@end defop -@defop Slot QMathGL @code{void} setTet (@code{int} val) -Set Theta-angle value. -@end defop -@defop Slot QMathGL @code{void} setAlpha (@code{bool} val) -Switch on/off transparency. -@end defop -@defop Slot QMathGL @code{void} setLight (@code{bool} val) -Switch on/off lightning. -@end defop -@defop Slot QMathGL @code{void} setZoom (@code{bool} val) -Switch on/off mouse zooming. -@end defop -@defop Slot QMathGL @code{void} setRotate (@code{bool} val) -Switch on/off mouse rotation. -@end defop -@defop Slot QMathGL @code{void} zoomIn () -Zoom in graphics. -@end defop -@defop Slot QMathGL @code{void} zoomOut () -Zoom out graphics. -@end defop -@defop Slot QMathGL @code{void} restore () -Restore zoom and rotation to default values. -@end defop -@defop Slot QMathGL @code{void} reload () -Reload data and execute script. -@end defop -@defop Slot QMathGL @code{void} shiftLeft () -Shift graphics to left direction. -@end defop -@defop Slot QMathGL @code{void} shiftRight () -Shift graphics to right direction. -@end defop -@defop Slot QMathGL @code{void}shiftUp () -Shift graphics to up direction. -@end defop -@defop Slot QMathGL @code{void} shiftDown () -Shift graphics to down direction. -@end defop -@defop Slot QMathGL @code{void} exportPNG (@code{QString} fname=@code{""}) -Export current picture to PNG file. -@end defop -@defop Slot QMathGL @code{void} exportPNGs (@code{QString} fname=@code{""}) -Export current picture to PNG file (no transparency). -@end defop -@defop Slot QMathGL @code{void} exportJPG (@code{QString} fname=@code{""}) -Export current picture to JPEG file. -@end defop -@defop Slot QMathGL @code{void} exportBPS (@code{QString} fname=@code{""}) -Export current picture to bitmap EPS file. -@end defop -@defop Slot QMathGL @code{void} exportEPS (@code{QString} fname=@code{""}) -Export current picture to vector EPS file. -@end defop -@defop Slot QMathGL @code{void} exportSVG (@code{QString} fname=@code{""}) -Export current picture to SVG file. -@end defop -@defop Slot QMathGL @code{void} exportIDTF (@code{QString} fname=@code{""}) -Export current picture to IDTF file. -@end defop -@defop Slot QMathGL @code{void} setMGLFont (@code{QString} path) -Restore (@var{path}=@code{""} or load font for graphics. -@end defop -@defop Slot QMathGL @code{void} print () -Print current picture -@end defop -@defop Slot QMathGL @code{void} adjust () -Adjust plot size to fill entire window. This function is executed only if graph is mglGraphQT instance. -@end defop -@defop Slot QMathGL @code{void} nextSlide () -Show next slide. This function is executed only if graph is mglGraphQT instance. -@end defop -@defop Slot QMathGL @code{void} prevSlide () -Show previous slide. This function is executed only if graph is mglGraphQT instance. -@end defop -@defop Slot QMathGL @code{void} animation (@code{bool} st=@code{true}) -Start animation. This function is executed only if graph is mglGraphQT instance. -@end defop -@defop Slot QMathGL @code{void} about () -Show about information. -@end defop -@defop Slot QMathGL @code{void} aboutQt () -Show information about Qt version. -@end defop - -@defop Signal QMathGL @code{void} phiChanged (@code{int} val) -Phi angle changed (by mouse or by toolbar). -@end defop -@defop Signal QMathGL @code{void} tetChanged (@code{int} val) -Tet angle changed (by mouse or by toolbar). -@end defop -@defop Signal QMathGL @code{void} perChanged (@code{int} val) -Perspective changed (by mouse or by toolbar). -@end defop -@defop Signal QMathGL @code{void} alphaChanged (@code{bool} val) -Transparency changed (by toolbar). -@end defop -@defop Signal QMathGL @code{void} lightChanged (@code{bool} val) -Lighting changed (by toolbar). -@end defop -@defop Signal QMathGL @code{void} zoomChanged (@code{bool} val) -Zooming changed (by toolbar). -@end defop -@defop Signal QMathGL @code{void} rotateChanged (@code{bool} val) -Rotation changed (by toolbar). -@end defop - -@deftypecv {Widget option} QMathGL @code{QString} appName -Application name for message boxes. -@end deftypecv -@deftypecv {Widget option} QMathGL @code{bool} autoResize -Allow auto resizing (default is false). -@end deftypecv -@deftypecv {Widget option} QMathGL @code{int} animDelay -Animation delay in ms. -@end deftypecv - - - -@c ------------------------------------------------------------------ -@c @node mglData class, Other classes, Widget classes, Top -@c @chapter mglData class - -@include data_en.texi - - - -@c ------------------------------------------------------------------ -@node Other classes, MGL interface, mglData class, Top -@chapter Other classes - -@menu -* mglParse class:: -* mglFormula class:: -* mglFont class:: -* mglColor class:: -* mglPoint class:: -* mglVar class:: -* mglCommand class:: -* mglArg class:: -@end menu - -@c ------------------------------------------------------------------ -@node mglParse class, mglFormula class, , Other classes -@section mglParse class -@cindex mglParse - -Class for parsing and executing MGL script. This class is defined in @code{#include }. - -Class mglParse is the interpreter for MGL scripts (@pxref{MGL interface}). The main function of mglParse class is @code{Parse()}. Exactly this function parses and executes the script string-by-string. Also there are two subservient functions for the finding and creation of a variable. These functions can be useful for displaying values of variables (arrays) in some external program (in window, for example). The variable @var{DataList} contains full list of variables in script. Flag @var{AllowSetSize} allows one to prevent changing the size of the picture inside the script (forbids the MGL command @code{setsize}). - -Note an important feature -- if user defines function @var{func} in variable then it will be called before the destroying of this variable (@pxref{mglVar class}). - -@deftypefn {Method on @code{mglParse} (C++, Python)} @code{} mglParse (@code{bool} setsize=@code{false}) -@deftypefnx {C function} @code{HMPR} mgl_create_parser () -Constructor initializes all values with zero and set @var{AllowSetSize} value. -@end deftypefn - -@deftypefn {Method on @code{mglParse} (C++, Python)} @code{} ~mglParse () -@deftypefnx {C function} @code{void} mgl_delete_parser (@code{HMPR} p) -Destructor delete parser -@end deftypefn - -@deftypefn {Method on @code{mglParse} (C++, Python)} @code{int} Parse (@code{mglGraph *}gr, @code{const char *}str, @code{long} pos=@code{0}) -@deftypefnx {Method on @code{mglParse} (C++)} @code{int} Parse (@code{mglGraph *}gr, @code{const wchar_t *}str, @code{long} pos=@code{0}) -@deftypefnx {C function} @code{int} mgl_parse (@code{HMGL} gr, @code{HMPR} p, @code{const char *}str, @code{int} pos) -@deftypefnx {C function} @code{int} mgl_parsew (@code{HMGL} gr, @code{HMPR} p, @code{const wchar_t *}str, @code{int} pos) -Main function in the class. It parses the string @var{str} and executes it by using @var{gr} as a graphics plotter. Returns the value depending on an error presence in the string @var{str}: 0 -- no error, 1 -- wrong command argument(s), 2 -- unknown command, 3 -- string is too long. Optional argument @var{pos} allows to save the string position in the document (or file) for using @code{for|next} command. +@deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{void} ToggleAlpha () +@deftypefnx {C function} @code{int} mgl_wnd_toggle_alpha (@code{HMGL} gr) +Включает/выключает прозрачность, но не перезаписывает настройки пользовательской функции рисования. @end deftypefn - -@deftypefn {Method on @code{mglParse} (C++)} @code{int} Export (@code{wchar_t} cpp_out@code{[1024]}, @code{mglGraph *}gr, @code{const wchar_t *}str) -Function parses the string @var{str}, executes it by using @var{gr} as a graphics plotter and exports it to C++ code. Returns the value depending on an error presence in the string @var{str}: 0 -- no error, 1 -- wrong command argument(s), 2 -- unknown command, 3 -- string is too long. Output C++ text will be placed in @var{out} variable. If string @var{str} have options (defined after ';' symbol) then the corresponding C++ texts are placed in variables @var{op1}, @var{op2}. +@deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{void} ToggleLight () +@deftypefnx {C function} @code{int} mgl_wnd_toggle_light (@code{HMGL} gr) +Включает/выключает освещение, но не перезаписывает настройки пользовательской функции рисования. +Switch on/off lighting but do not overwrite switches in user drawing function. @end deftypefn - -@deftypefn {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{FILE *}fp, @code{bool} print=@code{false}) -Function parse and execute line-by-line MGL script in file @var{fp}. If @var{print}=@code{true} then all warnings and information will be printed in stdout. Also this function support the @code{for|next} MGL commands. +@deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{void} ToggleZoom () +@deftypefnx {C function} @code{int} mgl_wnd_toggle_zoom (@code{HMGL} gr) +Включает/выключает приближение выбранного мышью области рисунка. @end deftypefn -@deftypefn {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{int} num, @code{const wchar_t **}text, @code{void (*} error @code{)(int line, int kind)=NULL}) -Function parse and execute line-by-line MGL script in array @var{text}. If @var{error} is not @code{NULL} then this function will be called for all warnings, information and other messages. Also this function support the @code{for|next} MGL commands. +@deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{void} ToggleRotate () +@deftypefnx {C function} @code{int} mgl_wnd_toggle_rotate (@code{HMGL} gr) +Включает/выключает режим вращения мышью. Обычно левая кнопка вращает график, средняя сдвигает, правая приближает и меняет перспективу. @end deftypefn - -@deftypefn {Method on @code{mglParse} (C++, Python)} @code{void} Execute (@code{mglGraph *}gr, @code{const char *}text, @code{void (*} error @code{)(int line, int kind)=NULL}) -@deftypefnx {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{const wchar_t *}text, @code{void (*} error @code{)(int line, int kind)=NULL}) -@deftypefnx {C function} @code{void} mgl_parse_text (@code{HMGL} gr, @code{HMPR} p, @code{const char *}text) -@deftypefnx {C function} @code{void} mgl_parsew_text (@code{HMGL} gr, @code{HMPR} p, @code{const wchar_t *}text) -Function parse and execute line-by-line MGL script in string @var{text}. Lines are separated by @samp{\n} symbol as usual. If @var{error} is not @code{NULL} then this function will be called for all warnings, information and other messages. Also this function support the @code{for|next} MGL commands. +@deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{void} ToggleNo () +@deftypefnx {C function} @code{int} mgl_wnd_toggle_no (@code{HMGL} gr) +Выключает режим приближения/вращения и восстанавливает вид по умолчанию. +Switch off all zooming and rotation and restore initial state. @end deftypefn - -@deftypefn {Method on @code{mglParse} (C++, Python)} @code{bool} AddParam (@code{int} n, @code{const char *}str, @code{bool} isstr=@code{true}) -@deftypefnx {Method on @code{mglParse} (C++)} @code{bool} AddParam (@code{int} n, @code{const wchar_t *}str, @code{bool} isstr=@code{true}) -@deftypefnx {C function} @code{void} mgl_add_param (@code{HMPR} p, @code{int} id, @code{const char *}val) -@deftypefnx {C function} @code{void} mgl_add_paramw (@code{HMPR} p, @code{int} id, @code{const wchar_t *}val) -Function set the value of @var{n}-th parameter as string @var{str} (@var{n}=0, 1 ... 9). It return @code{true} for success. +@deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{void} Update () +@deftypefnx {C function} @code{int} mgl_wnd_update (@code{HMGL} gr) +Обновляет содержимое окна. @end deftypefn - -@deftypefn {Method on @code{mglParse} (C++, Python)} @code{mglVar *} FindVar (@code{const char *}name) -@deftypefnx {Method on @code{mglParse} (C++)} @code{mglVar *} FindVar (@code{const wchar_t *}name) -@deftypefnx {C function} @code{const HMDT} mgl_find_var (@code{HMPR} p, @code{const char *}name) -Function returns the pointer to variable with name @var{name} or zero if variable is absent. Use this function to put external data array to the script or get the data from the script. +@deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{void} ReLoad (@code{bool} o) +@deftypefnx {C function} @code{int} mgl_wnd_reload (@code{HMGL} gr, @code{int} val) +Перезагружает данные пользователя и обновляет картинку. @end deftypefn -@deftypefn {Method on @code{mglParse} (C++, Python)} @code{mglVar *} AddVar (@code{const char *}name) -@deftypefnx {Method on @code{mglParse} (C++)} @code{mglVar *} AddVar (@code{const wchar_t *}name) -@deftypefnx {C function} @code{const HMDT} mgl_add_var (@code{HMPR} p, @code{const char *}name) -Function returns the pointer to variable with name @var{name}. If variable is absent then new variable is created with name @var{name}. Use this function to put external data array to the script or get the data from the script. +@deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{void} Adjust () +@deftypefnx {C function} @code{int} mgl_wnd_adjust (@code{HMGL} gr) +Подгоняет размер картинки под размер окна (виджета). @end deftypefn - -@deftypefn {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{mglVar *}v) -@deftypefnx {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{const char *}name) -@deftypefnx {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{const wchar_t *}name) -Function delete the variable specified by its name or by its pointer. +@deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{void} NextFrame () +@deftypefnx {C function} @code{int} mgl_wnd_next_frame (@code{HMGL} gr) +Показывает следующий кадр. @end deftypefn - -@deftypefn {Method on @code{mglParse} (C++, Python)} @code{inline void} RestoreOnce () -@deftypefnx {C function} @code{void} mgl_restore_once (@code{HMPR} p) -Restore Once flag. +@deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{void} PrevFrame () +@deftypefnx {C function} @code{int} mgl_wnd_prev_frame (@code{HMGL} gr) +Показывает предыдущий кадр. +Show previous frame if one. @end deftypefn - -@deftypefn {Method on @code{mglParse} (Python)} @code{void} AllowSetSize (@code{bool} a) -@deftypefnx {C function} @code{void} mgl_parser_allow_setsize (@code{HMPR} p, @code{int} a) -Allow to parse 'setsize' command or not. +@deftypefn {Метод класса @code{mglGraphAB} (C++)} @code{void} Animation () +@deftypefnx {C function} @code{int} mgl_wnd_animation (@code{HMGL} gr) +Запускает/останавливает слайд-шоу (анимацию) кадров. @end deftypefn -@deftypefn {Method on @code{mglParse} (C++)} @code{void} AddCommand (@code{mglCommand *}cmd, @code{int} num=@code{0}) -Add @var{num} commands @var{cmd} to the defined MGL commands list. Parameter @var{cmd} is array of @code{mglCommand} structures. If parameter @var{num}=0 then it will be determined automatically. At this, array @var{cmd} @strong{must have} last element with @code{name=L""} +@deftypefn {C function} @code{int} mgl_wnd_set_auto_clf (@code{HMGL} gr, @code{int} val) @end deftypefn - -@deftypecv {Option} mglParse @code{mglVar *} DataList -List of variables defined in script. -@end deftypecv -@deftypecv {Option} mglParse @code{bool} AllowSetSize -Flag which allows/forbids the command @code{setsize} in scripts. -@end deftypecv -@deftypecv {Option} mglParse @code{bool} Stop -Flag which interrupt script execution. -@end deftypecv -@deftypecv {Option} mglParse @code{mglCommand *} Cmd -Table (array) of recognizable MGL commands (can be changed by user). Items in the table @strong{MUST be sorted} by @var{name} field !!! Last items must have empty name (i.e. @code{L""}). -@end deftypecv -@deftypecv {Option} mglParse @code{wchar_t *} op1 -These strings contain command options and should be placed before the command. These variables are used for MGL->C++ (or other language) conversion. -@end deftypecv -@deftypecv {Option} mglParse @code{wchar_t *} op2 -These strings contain command options and should be placed after the command. These variables are used for MGL->C++ (or other language) conversion. -@end deftypecv - -@c ------------------------------------------------------------------ -@node mglFormula class, mglFont class, mglParse class, Other classes -@section mglFormula class -@cindex mglFormula - -Class for evaluating of formula specified by the string. This class is defined in @code{#include }. - -It is the fast variant of formula evaluation. At creation it will be recognized and compiled to tree-like internal code. At evaluation stage only fast calculations are performed. There is no difference between lower or upper case in formulas. If argument value lie outside the range of function definition then function returns NaN. - -There are a lot of functions and operators available. The operators are: @samp{+} -- addition, @samp{-} -- subtraction, @samp{*} -- multiplication, @samp{/} -- division, @samp{^} -- integer power. Also there are logical ``operators'': @samp{<} -- true if x} -- true if x>y, @samp{=} -- true if x=y, @samp{&} -- true if x and y both nonzero, @samp{|} -- true if x or y nonzero. These logical operators have lowest priority and return 1 if true or 0 if false. - -The basic functions are: @samp{sqrt(x)} -- square root of @var{x}, @samp{pow(x,y)} power @var{x} in @var{y}, @samp{ln(x)} -- natural logarithm of @var{x}, @samp{lg(x)} -- decimal logarithm of @var{x}, @samp{log(a,x)} -- logarithm base @var{a} of @var{x}, @samp{abs(x)} -- absolute value of @var{x}, @samp{sign(x)} -- sign of @var{x}, @samp{mod(x,y)} -- x modulo y, @samp{step(x)} -- step function, @samp{rnd} -- random number, @samp{pi} -- number @math{\pi=3.1415926...}. - -Trigonometric functions are: @samp{sin(x)}, @samp{cos(x)}, @samp{tan(x)} (or @samp{tg(x)}). Inverse trigonometric functions are: @samp{asin(x)}, @samp{acos(x)}, @samp{atan(x)}. Hyperbolic functions are: @samp{sinh(x)} (or @samp{sh(x)}), @samp{cosh(x)} (or @samp{ch(x)}), @samp{tanh(x)} (or @samp{th(x)}). Inverse hyperbolic functions are: @samp{asinh(x)}, @samp{acosh(x)}, @samp{atanh(x)}. - -There are a set of special functions: @samp{gamma(x)} -- Gamma function @math{\Gamma(x) = \int_0^\infty dt t^@{x-1@} \exp(-t)} , @samp{psi(x)} -- digamma function @math{\psi(x) = \Gamma'(x)/\Gamma(x)} for x!=0, @samp{ai(x)} -- Airy function Ai(x), @samp{bi(x)} -- Airy function Bi(x), @samp{cl(x)} -- Clausen function, @samp{li2(x)} (or @samp{dilog(x)}) -- dilogarithm @math{Li_2(x) = - \Re \int_0^x ds \log(1-s)/s}, @samp{sinc(x)} -- compute @math{sinc(x) = \sin(\pi x) / (\pi x)} for any value of x, @samp{zeta(x)} -- Riemann zeta function @math{\zeta(s) = \sum_@{k=1@}^\infty k^@{-s@}} for arbitrary s!=1, @samp{eta(x)} -- eta function @math{\eta(s) = (1-2^@{1-s@}) \zeta(s)} for arbitrary s, @samp{lp(l,x)} -- Legendre polynomial @math{P_l(x)}, (|x|<=1, l>=0), @samp{w0(x)} -- principal branch of the Lambert @var{W} function, @samp{w1(x)} -- principal branch of the Lambert @var{W} function. Function W(x) is defined to be solution of the equation @math{W \exp(W) = x}. - -The exponent integrals are: @samp{ci(x)} -- Cosine integral @math{Ci(x) = \int_0^x dt \cos(t)/t}, @samp{si(x)} -- Sine integral @math{Si(x) = \int_0^x dt \sin(t)/t}, @samp{erf(x)} -- error function @math{erf(x) = (2/\sqrt(\pi)) \int_0^x dt \exp(-t^2)}, @samp{ei(x)} -- exponential integral @math{Ei(x) := - PV(\int_@{-x@}^\infty dt \exp(-t)/t)} (where PV denotes the principal value of the integral), @samp{e1(x)} -- exponential integral @math{E_1(x) := Re \int_1^\infty dt \exp(-xt)/t} , @samp{e2(x)} -- exponential integral @math{E_2(x) := Re \int_1^\infty dt \exp(-xt)/t^2}, @samp{ei3(x)} -- exponential integral @math{Ei_3(x) = \int_0^x dt \exp(-t^3)} for x>=0. - -Bessel functions are: @samp{j(nu,x)} -- regular cylindrical Bessel function of fractional order @var{nu}, @samp{y(nu,x)} -- irregular cylindrical Bessel function of fractional order @var{nu}, @samp{i(nu,x)} -- regular modified Bessel function of fractional order @var{nu}, @samp{k(nu,x)} -- irregular modified Bessel function of fractional order @var{nu}. - -Elliptic integrals are: @samp{ee(k)} -- complete elliptic integral is denoted by @math{E(k) = E(\pi/2, k)}, @samp{ek(k)} -- complete elliptic integral is denoted by @math{K(k) = F(\pi/2, k)}, @samp{e(phi,k)} -- elliptic integral @math{E(\phi,k) = \int_0^\phi dt \sqrt((1 - k^2 \sin^2(t)))}, @samp{f(phi,k)} -- elliptic integral @math{F(\phi,k) = \int_0^\phi dt 1/\sqrt((1 - k^2 \sin^2(t)))}. - -Jacobi elliptic functions are: @samp{sn(u,m)}, @samp{cn(u,m)}, @samp{dn(u,m)}, @samp{sc(u,m)}, @samp{sd(u,m)}, @samp{ns(u,m)}, @samp{cs(u,m)}, @samp{cd(u,m)}, @samp{nc(u,m)}, @samp{ds(u,m)}, @samp{dc(u,m)}, @samp{nd(u,m)}. - -Note, some of these functions are unavailable if NO\_GSL is defined during compilation of MathGL library. - -@deftypemethod mglFormula @code{} mglFormula (@code{const char *}str) -Parses the formula @var{str} and creates formula-tree. Constructor recursively parses the formula and creates a tree-like structure containing functions and operators for fast further evaluating by @code{Calc()} or @code{CalcD()} functions. -@end deftypemethod -@deftypemethod mglFormula @code{float} Calc (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}, @code{float} u=@code{0}) -Evaluates the formula for @code{'x','r'}=@var{x}, @code{'y','n'}=@var{y}, @code{'z','t'}=@var{z}, @code{'a','u'}=@var{u}. Error code (if one) can be obtained from function @code{GetError()}. -@end deftypemethod -@deftypemethod mglFormula @code{float} Calc (@code{float} x, @code{float} y, @code{float} z, @code{float} u, @code{float} v, @code{float} w) -Evaluates the formula for @code{'x'}=@var{x}, @code{'y'}=@var{y}, @code{'z'}=@var{z}, @code{'u'}=@var{u}, @code{'v'}=@var{v}, @code{'w'}=@var{w}. Error code (if one) can be obtained from function @code{GetError()}. -@end deftypemethod -@deftypemethod mglFormula @code{float} Calc (@code{float} var@code{['z'-'a'+1]}) -Evaluates the formula for variables in array @var{var}['z'-'a']. Error code (if one) can be obtained from function @code{GetError()}. -@end deftypemethod -@deftypemethod mglFormula @code{float} CalcD (@code{float} var@code{['z'-'a'+1]}, @code{char} diff) -Evaluates the formula derivation respect to @var{diff} for variables in array @var{var}['z'-'a']. Error code (if one) can be obtained from function @code{GetError()}. -@end deftypemethod -@deftypemethod mglFormula @code{int} GetError () -Returns error code: @code{0} means no error; @code{ERR_LOG} means error in logarithm or power functions; @code{ERR_ARC} means error in inverse functions (like asin); @code{ERR_SQRT} means error in sqrt function. -@end deftypemethod - -@c ------------------------------------------------------------------ -@node mglFont class, mglColor class, mglFormula class, Other classes -@section mglFont class -@cindex mglFont - -Class for working with font: load, get metrics, parse and draw strings. This class is defined in @code{#include }. - -The class is based on loading and drawing of vector Hershey font. There are two styles of specifying of the font type and aligning: by integer parameters or by string. - -The string can be any combination of characters: @samp{rbiLCRwou}. The font types are: @samp{r} -- roman font, @samp{i} -- italic style, @samp{b} -- bold style. By default roman font (that is @samp{} or @samp{r}) is used. The align types are: @samp{L} -- align left (default), @samp{C} -- align center, @samp{R} -- align right. Additional font effects are: @samp{w} -- wire, @samp{o} -- over-lined, @samp{u} -- underlined. - -The over way of font and alignment setting is the using of the integer constant. Integer font Id can be one of predefined constants: @code{MGL_FONT_ITAL, MGL_FONT_BOLD, MGL_FONT_BOLD_ITAL = MGL_FONT_ITAL+MGL_FONT_BOLD}. Default font is @code{MGL_FONT_ROMAN}. Also there are flags @code{MGL_FONT_ULINE, MGL_FONT_OLINE, MGL_FONT_WIRE} for additional font effects. Align parameter controls the text alignment: 0 -- align left, 1 -- align center, 2 -- align right. - -Parsing of the string to special (TeX-like) commands will be done if variable @var{parse} is true (it's default). There are commands for the font style changing inside the string (for example, use \b for bold font): \a or \overline -- over-lined, \b or \textbf -- bold, \i or \textit -- italic, \r or \textrm -- roman (disable bold and italic attributes), \u or \underline -- underlined, \w or \wire -- wired, \big -- bigger size, @@ -- smaller size. The lower and upper indexes are specified by @samp{_} and @samp{^} symbols. At this the changed font style is applied only on next symbol or symbols in braces @{@}. The text in braces @{@} are treated as single symbol that allow one to print the index of index. For example, compare the strings @samp{sin (x^@{2^3@})} and @samp{sin (x^2^3)}. You may also change text color inside string by command #? or by \color? where @samp{?} is symbolic id of the color (@pxref{mglColor class}). For example, words @samp{Blue} and @samp{red} will be colored in the string @samp{#b@{Blue@} and \colorr@{red@} text}. - -The most of commands for special TeX or AMSTeX symbols, the commands for font style changing (\textrm, \textbf, \textit, \overline, \underline), accents (\hat, \tilde, \dot, \ddot, \acute, \check, \grave, \bar, \breve) and roots (\sqrt, \sqrt3, \sqrt4) are recognized. The full list contain approximately 2000 commands. Note that first space symbol after the command is ignored, but second one is printed as normal symbol (space). For example, the following strings produce the same result @math{\tilde a}: @samp{\tilde@{a@}}; @samp{\tilde a}; @samp{\tilde@{@}a}. - -@ifhtml -@html -The Greek letters are recognizable special symbols: α – \alpha, β – \beta, γ – \gamma, δ – \delta, ε – \epsilon, η – \eta, ι – \iota, χ – \chi, κ – \kappa, λ – \lambda, μ – \mu, ν – \nu, o – \o, ω – \omega, ϕ – \phi, π – \pi, ψ – \psi, ρ – \rho, σ – \sigma, θ – \theta, τ – \tau, υ – \upsilon, ξ – \xi, ζ – \zeta, ς – \varsigma, ɛ – \varepsilon, ϑ – \vartheta, φ – \varphi, ϰ – \varkappa; A – \Alpha, B – \Beta, Γ – \Gamma, Δ – \Delta, E – \Epsilon, H – \Eta, I – \Iota, C – \Chi, K – \Kappa, Λ – \Lambda, M – \Mu, N – \Nu, O – \O, Ω – \Omega, Φ – \Phi, Π – \Pi, Ψ – \Psi, R – \Rho, Σ – \Sigma, Θ – \Theta, T – \Tau, Υ – \Upsilon, Ξ – \Xi, Z – \Zeta. - -

    The small part of most common special TeX symbols are: ∠ – \angle, ⋅ – \cdot, ♣ – \clubsuit, ✓ – \checkmark, ∪ – \cup, ∩ – \cap, ♢ – \diamondsuit, ◇ – \diamond, ÷ - – \div, -↓ – \downarrow, † – \dag, ‡ – \ddag, ≡ – \equiv, ∃ – \exists, ⌢ – \frown, ♭ – \flat, ≥ – \ge, ≥ – \geq, ≧ – \geqq, ← – \gets, ♡ – \heartsuit, ∞ – \infty, ∫ – \int, \Int, ℑ – \Im, ♢ – \lozenge, ⟨ – \langle, ≤ – \le, ≤ – \leq, ≦ – \leqq, ← – \leftarrow, ∓ – \mp, ∇ – \nabla, ≠ – \ne, ≠ – \neq, ♮ – \natural, ∮ – \oint, ⊙ – \odot, ⊕ – \oplus, ∂ – \partial, ∥ – \parallel, ⊥ –\perp, ± – \pm, ∝ – \propto, ∏ – \prod, ℜ – \Re, → – \rightarrow, ⟩ – \rangle, ♠ – \spadesuit, ~ – \sim, ⌣ – \smile, ⊂ – \subset, ⊃ – \supset, √ – \sqrt or \surd, § – \S, ♯ – \sharp, ∑ – \sum, × – \times, → – \to, ∴ – \therefore, ↑ – \uparrow, ℘ – \wp.

    -@end html -@end ifhtml -@ifnothtml -The Greek letters are recognizable special symbols: @math{\alpha} -- \alpha, @math{\beta} -- \beta, @math{\gamma} -- \gamma, @math{\delta} -- \delta, @math{\epsilon} -- \epsilon, @math{\eta} -- \eta, @math{\iota} -- \iota, @math{\chi} -- \chi, @math{\kappa} -- \kappa, @math{\lambda} -- \lambda, @math{\mu} -- \mu, @math{\nu} -- \nu, @math{o} -- \o, @math{\omega} -- \omega, @math{\phi} -- \phi, @math{\pi} -- \pi, @math{\psi} -- \psi, @math{\rho} -- \rho, @math{\sigma} -- \sigma, @math{\theta} -- \theta, @math{\tau} -- \tau, @math{\upsilon} -- \upsilon, @math{\xi} -- \xi, @math{\zeta} -- \zeta, @math{\varsigma} -- \varsigma, @math{\varepsilon} -- \varepsilon, @math{\vartheta} -- \vartheta, @math{\varphi} -- \varphi, A -- \Alpha, B -- \Beta, @math{\Gamma} -- \Gamma, @math{\Delta} -- \Delta, E -- \Epsilon, H -- \Eta, I -- \Iota, C -- \Chi, K -- \Kappa, @math{\Lambda} -- \Lambda, M -- \Mu, N -- \Nu, O -- \O, @math{\Omega} -- \Omega, @math{\Phi} -- \Phi, @math{\Pi} -- \Pi, @math{\Psi} -- \Psi, R -- \Rho, @math{\Sigma} -- \Sigma, @math{\Theta} -- \Theta, T -- \Tau, @math{\Upsilon} -- \Upsilon, @math{\Xi} -- \Xi, Z -- \Zeta. - -The small part of most common special TeX symbols are: @math{\angle} -- \angle, @math{\aleph} -- \aleph, @math{\cdot} -- \cdot, @math{\clubsuit} -- \clubsuit, @math{\cup} -- \cup, @math{\cap} -- \cap, @math{\diamondsuit} -- \diamondsuit, @math{\diamond} -- \diamond, @math{\div} -- \div, @math{\downarrow} -- \downarrow, @math{\dag} -- \dag, @math{\ddag} -- \ddag, @math{\equiv} -- \equiv, @math{\exists} -- \exists, @math{\frown} -- \frown, @math{\flat} -- \flat, @math{\ge} -- \ge, @math{\geq} -- \geq, @math{\gets} -- \gets, @math{\heartsuit} -- \heartsuit, @math{\infty} -- \infty, @math{\in} -- \in, @math{\int} -- \int, @math{\Im} -- \Im, @math{\langle} -- \langle, @math{\le} -- \le, @math{\leq} -- \leq, @math{\leftarrow} -- \leftarrow, @math{\mp} -- \mp, @math{\nabla} -- \nabla, @math{\ne} -- \ne, @math{\neq} -- \neq, @math{\natural} -- \natural, @math{\oint} -- \oint, @math{\odot} -- \odot, @math{\oplus} -- \oplus, @math{\partial} -- \partial, @math{\parallel} -- \parallel, @math{\perp} -- \perp, @math{\pm} -- \pm, @math{\propto} -- \propto, @math{\prod} -- \prod, @math{\Re} -- \Re, @math{\rightarrow} -- \rightarrow, @math{\rangle} -- \rangle, @math{\spadesuit} -- \spadesuit, @math{\sim} -- \sim, @math{\smile} -- \smile, @math{\subset} -- \subset, @math{\supset} -- \supset, @math{\surd} -- \sqrt or \surd, @math{\S} -- \S, @math{\sharp} -- \sharp, @math{\sum} -- \sum, @math{\times} -- \times, @math{\to} -- \to, @math{\uparrow} -- \uparrow, @math{\wp} -- \wp and so on. -@end ifnothtml - -@menu -* Format of font files:: -@end menu - - -@deftypemethod mglFont @code{} mglFont (@code{const char *}name=@code{MGL_DEF_FONT_NAME}, @code{const char *}path=@code{NULL}) -Initialize the font and load data from file @var{name} (default name is "STIX" for Linux and MacOS) or if @var{name}=@code{NULL} limited data from memory (default for Windows). -@end deftypemethod -@deftypemethod mglFont @code{bool} Load (@code{const char *} base, @code{const char *}path=@code{NULL}) -Load font from file @var{path}/@var{base} into the memory. The font may contain 4 files: @var{base}.vfm, @var{base}_b.vfm, @var{base}_i.vfm, @var{base}_bi.vfm. Appendix contain detailed description of font format. -@end deftypemethod -@deftypemethod mglFont @code{void} Restore () -Restore default font. -@end deftypemethod -@deftypemethod mglFont @code{void} (@code{mglFont *} fnt) -Copy data from other font instance. -@end deftypemethod -@deftypemethod mglFont @code{void} Clear () -Clear memory by deleting the loaded font. -@end deftypemethod -@deftypemethod mglFont @code{inline unsigned} GetNumGlyph () -Return the number of glyphs in the font. -@end deftypemethod -@deftypemethod mglFont @code{inline bool} Ready () -Return true if font is loaded and ready for use. -@end deftypemethod - - -@deftypemethod mglFont @code{float} Height (@code{int} font) -Gets height of text for font specified by integer constant. -@end deftypemethod -@deftypemethod mglFont @code{float} Puts (@code{const char *}str, @code{int} font=@code{0}, @code{int} align=@code{0}) -Prints 8-bit text string for font specified by integer constant. -@end deftypemethod -@deftypemethod mglFont @code{float} Width (@code{const char *}str, @code{int} font=@code{0}) -Gets width of 8-bit text string for font specified by integer constant. -@end deftypemethod -@deftypemethod mglFont @code{float} Puts (@code{const wchar_t *}str, @code{int} font=@code{0}, @code{int} align=@code{0}) -Prints Unicode text string for font specified by integer constant. -@end deftypemethod -@deftypemethod mglFont @code{float} Width (@code{const wchar_t *}str, @code{int} font=@code{0}) -Gets width of Unicode text string for font specified by integer constant. -@end deftypemethod - - -@deftypemethod mglFont @code{float} Height (@code{const char *}how) -Gets height of text for font specified by string. -@end deftypemethod -@deftypemethod mglFont @code{float} Puts (@code{const char *}str, @code{const char *}how) -Prints 8-bit text string for font specified by string. -@end deftypemethod -@deftypemethod mglFont @code{float} Width (@code{const char *}str, @code{const char *}how) -Gets width of 8-bit text string for font specified by string. -@end deftypemethod -@deftypemethod mglFont @code{float} Puts (@code{const wchar_t *}str, @code{const char *}how) -Prints Unicode text string for font specified by string. -@end deftypemethod -@deftypemethod mglFont @code{float} Width (@code{const wchar_t *}str, @code{const char *}how) -Gets width of Unicode text string for font specified by string. -@end deftypemethod - -@deftypecv {Parameter} mglFont @code{mglGraph *} gr -Instance of mglGraph class which is used for character drawing. -@end deftypecv -@deftypecv {Parameter} mglFont @code{bool} parse -Flag for switching on/off the parsing of TeX commands. Default value is @code{true}. -@end deftypecv - -@c ------------------------------------------------------------------ -@node Format of font files, , , mglFont class -@subsection Format of font files - -Starting from v.1.6 the MathGL library uses new font files. The font is defined in 4 files with suffixes @samp{*.vfm}, @samp{*_b.vfm}, @samp{*_i.vfm}, @samp{*_bi.vfm}. These files are text files containing the data for roman font, bold font, italic font and bold italic font. The files (or some symbols in the files) for bold, italic or bold italic fonts can be absent. In this case the roman glyph will be used for them. By analogy, if the bold italic font is absent but the bold font is present then bold glyph will be used for bold italic. You may create these font files by yourself from *.ttf, *.otf files with the help of program @code{font_tools}. This program can be found at MathGL home site. - -The format of font files (*.vfm -- vector font for MathGL) is the following. -@enumerate -@item -First string contains human readable comment and is always ignored. -@item -Second string contains 3 numbers, delimited by space or tabulation. The order of numbers is the following: @var{numg} -- the number of glyphs in the file (integer), @var{fact} -- the factor for glyph sizing (float), @var{size} -- the size of buffer for glyph description (integer). -@item -After it @var{numg}-th strings with glyphs description are placed. Each string contains 6 positive numbers, delimited by space of tabulation. The order of numbers is the following: Unicode glyph ID, glyph width, number of lines in glyph, position of lines coordinates in the buffer (length is 2*number of lines), number of triangles in glyph, position of triangles coordinates in the buffer (length is 6*number of triangles). -@item -The end of file contains the buffer with point coordinates at lines or triangles vertexes. The size of buffer (the number of integer) is @var{size}. -@end enumerate - -Note: the closing contour line is done automatically (so the last segment may be absent). For starting new contour use a point with coordinates @code{@{0x3fff, 0x3fff@}}. - - -@c ------------------------------------------------------------------ -@node mglColor class, mglPoint class, mglFont class, Other classes -@section mglColor class -@cindex mglColor - -Structure for working with colors. This structure is defined in @code{#include }. - -There are two ways to set the color in MathGL. First one is using of float values of red, green and blue channels for precise color definition. The second way is the using of character id. There are a set of characters specifying frequently used colors. Normally capital letter gives more dark color than lowercase one. The full list of characters is: @samp{k} -- black, @samp{r} -- red, @samp{R} -- dark red, @samp{g} -- green, @samp{G} -- dark green, @samp{b} -- blue, @samp{B} -- dark blue, @samp{c} -- cyan, @samp{C} -- dark cyan, @samp{m} -- magenta, @samp{M} -- dark magenta, @samp{y} -- yellow, @samp{Y} -- dark yellow (gold), @samp{h} -- gray, @samp{H} -- dark gray, @samp{w} -- white, @samp{W} -- bright gray, @samp{l} -- green-blue, @samp{L} -- dark green-blue, @samp{e} -- green-yellow, @samp{E} -- dark green-yellow, @samp{n} -- sky-blue, @samp{N} -- dark sky-blue, @samp{u} -- blue-violet, @samp{U} -- dark blue-violet, @samp{p} -- purple, @samp{P} -- dark purple, @samp{q} -- orange, @samp{Q} -- dark orange (brown). - -Also you may use ``lighted'' colors in color scheme specification (@emph{not in line style!}). The ``lighted'' color contain 2 symbols: first one is usual symbol for color specification, second one is digit for its brightness. The digit can be in range @samp{1}...@samp{9}. At this @samp{5} correspond to normal color, @samp{1} is very dark version of the color (practically black), @samp{9} is very bright version of the color (practically white). - -@float -@image{png/colors, 7cm} -@caption{Colors and its ids.} -@end float - -@deftypecv {Parameter} mglVar @code{float} {r, g, b} -Reg, green and blue component of color. +@deftypecv {Widget option} mglGraphAB @code{bool} AutoClf +Включает/выключает автоматическую очистку рисунка между перерисовкой. Выключение полезно для рисования с накоплением (например, результатов/точек расчета). @end deftypecv -@deftypemethod mglColor @code{} mglColor (@code{float} R, @code{float} G, @code{float} B) -Constructor sets the color by float values of Red, Green and Blue channels. -@end deftypemethod -@deftypemethod mglColor @code{} mglColor (@code{char} c=@code{'k'}) -Constructor sets the color from character id. The black color is used by default. -@end deftypemethod -@deftypemethod mglColor @code{void} Set (@code{float} R, @code{float} G, @code{float} B) -Sets color from values of Red, Green and Blue channels. This values should be in interval [0,1]. -@end deftypemethod -@deftypemethod mglColor @code{void} Set (@code{mglColor} c, @code{float} bright=@code{1}) -Sets color as ``lighted'' version of color @var{c}. -@end deftypemethod -@deftypemethod mglColor @code{void} Set (@code{char} p) -Sets color from symbolic id. -@end deftypemethod -@deftypemethod mglColor @code{bool} Valid () -Checks correctness of the color. -@end deftypemethod -@deftypemethod mglColor @code{float} Norm () -Gets maximal of spectral component. -@end deftypemethod -@deftypemethod mglColor @code{bool} operator== (@code{const mglColor &}c) -Compare with another color -@end deftypemethod - -@deftypefn {Library Function} {inline mglColor} operator+ (@code{const mglColor &}a, @code{const mglColor &}b) -Adds colors by its RGB values. -@end deftypefn -@deftypefn {Library Function} {inline mglColor} operator- (@code{const mglColor &}a, @code{const mglColor &}b) -Subtracts colors by its RGB values. -@end deftypefn -@deftypefn {Library Function} {inline mglColor} operator* (@code{const mglColor &}a, @code{float} b) -Multiplies color by number. -@end deftypefn -@deftypefn {Library Function} {inline mglColor} operator* (@code{float} a, @code{const mglColor &}b) -Multiplies color by number. -@end deftypefn -@deftypefn {Library Function} {inline mglColor} operator/ (@code{const mglColor &}a, @code{float} b) -Divide color by number. +@deftypefn {C function} @code{int} mgl_wnd_set_delay (@code{HMGL} gr, @code{int} val) @end deftypefn -@deftypefn {Library Function} {inline mglColor} operator! (@code{const mglColor &}a) -Return inverted color. -@end deftypefn - -@c ------------------------------------------------------------------ -@node mglPoint class, mglArg class, mglColor class, Other classes -@section mglPoint class -@cindex mglPoint - -Structure describes point in space. This structure is defined in @code{#include } - -@deftypecv {Parameter} mglVar @code{float} {x, y, z} -Point coordinates. By default all values are zero. +@deftypecv {Widget option} mglGraphAB @code{float} Delay +Задержка анимации в секундах. По умолчанию равно 1 секунде. @end deftypecv -@deftypefn {Library Function} {inline mglPoint} operator+ (@code{const mglPoint &}a, @code{const mglPoint &}b) -Point of summation (summation of vectors). -@end deftypefn -@deftypefn {Library Function} {inline mglPoint} operator- (@code{const mglPoint &}a, @code{const mglPoint &}b) -Point of difference (difference of vectors). -@end deftypefn -@deftypefn {Library Function} {inline mglPoint} operator* (@code{float} a, @code{const mglPoint &}b) -Multiplies (scale) points by number. -@end deftypefn -@deftypefn {Library Function} {inline mglPoint} operator* (@code{const mglPoint &}a, @code{float} b) -Multiplies (scale) points by number. -@end deftypefn -@deftypefn {Library Function} {inline mglPoint} operator/ (@code{const mglPoint &}a, @code{float} b) -Multiplies (scale) points by number 1/b. -@end deftypefn -@deftypefn {Library Function} {inline float} operator- (@code{const mglPoint &}a, @code{const mglPoint &}b) -Scalar product of vectors. -@end deftypefn -@deftypefn {Library Function} {inline mglPoint} operator^ (@code{const mglPoint &}a, @code{const mglPoint &}b) -Cross-product of vectors. -@end deftypefn -@deftypefn {Library Function} {inline mglPoint} operator& (@code{const mglPoint &}a, @code{const mglPoint &}b) -The part of @var{a} which is perpendicular to vector @var{b}. -@end deftypefn -@deftypefn {Library Function} {inline mglPoint} operator| (@code{const mglPoint &}a, @code{const mglPoint &}b) -The part of @var{a} which is parallel to vector @var{b}. +@deftypefn {Метод класса @code{mglGraphAB} (C++, Python)} @code{mglPoint} CalcXYZ (@code{int} xs, @code{int} ys) +@deftypefnx {C function} @code{void} mgl_calc_xyz (@code{HMGL} gr, @code{int} xs, @code{int} ys, @code{float *}x, @code{float *}y, @code{float *}z) +Вычисляет 3D координаты @{x,y,z@} для экранной точки @{xs,ys@}. В данный момент игнорируется перспектива графика и формулы перехода в криволинейные координаты. Вычисления производятся для последнего использованного InPlot (@pxref{Transformation matrix}). @end deftypefn -@deftypefn {Library Function} {inline mglPoint} operator! (@code{const mglPoint &}a) -Return vector perpendicular to vector @var{a}. -@end deftypefn -@deftypefn {Library Function} {inline bool} Norm (@code{const mglPoint &}a) -Return the norm |@var{a}|^2 of vector @var{a}. +@deftypefn {Метод класса @code{mglGraphAB} (C++, Python)} @code{mglPoint} CalcScr (@code{mglPoint} p) +@deftypefnx {Метод класса @code{mglGraphAB} (C++)} @code{void} CalcScr (@code{mglPoint} p, @code{int *}xs, @code{int *}ys) +@deftypefnx {C function} @code{void} mgl_calc_scr (@code{HMGL} gr, @code{float} x, @code{float} y, @code{float} z, @code{int *}xs, @code{int *}ys) +Вычисляет экранные координаты @{xs,ys@} для 3D координат @{x,y,z@}. Вычисления производятся для последнего использованного InPlot (@pxref{Transformation matrix}). @end deftypefn -@deftypefn {Library Function} {inline bool} operator== (@code{const mglPoint &}a, @code{const mglPoint &}b) -Return true if points are the same. +@deftypefn {C function} @code{int} mgl_wnd_set_show_mouse_pos (@code{HMGL} gr, @code{int} val) @end deftypefn -@deftypefn {Library Function} {inline bool} operator!= (@code{const mglPoint &}a, @code{const mglPoint &}b) -Return true if points are different. -@end deftypefn - -@c ------------------------------------------------------------------ -@node mglVar class, mglCommand class, mglArg class, Other classes -@section mglVar class -@cindex mglVar - -Structure describes variable of type @code{mglData} and its name in MGL script. This structure is used by @code{mglParse} and is defined in @code{#include }. - -@deftypecv {Parameter} mglVar @code{mglData} d -Data itself -@end deftypecv -@deftypecv {Parameter} mglVar @code{wchar_t} s[256] -Data name -@end deftypecv -@deftypecv {Parameter} mglVar @code{void *} o -Pointer to external object for function @var{func}. -@end deftypecv -@deftypecv {Parameter} mglVar @code{mglVar *} next -Pointer to next instance in list -@end deftypecv -@deftypecv {Parameter} mglVar @code{mglVar *} prev -Pointer to prev instance in list -@end deftypecv -@deftypecv {Parameter} mglVar @code{bool} temp -Flag for temporar variable. Temporal variables will be destroyed after script execution. -@end deftypecv -@deftypecv {Parameter} mglVar @code{void (*} func @code{)(void *)} -Callback function for destroying non-temporal variable. -@end deftypecv - -@deftypemethod mglGraphAB @code{void} MoveAfter (@code{mglVar *}var) -Move variable after @var{var} and copy @code{func} from @code{var} (if @code{func} is not 0) -@end deftypemethod - - -@c ------------------------------------------------------------------ -@node mglCommand class, , mglVar class, Other classes -@section mglCommand class -@cindex mglCommand - -Structure describes MGL command, its name, short description, executable and export functions. The structure is used by @code{mglParse} and is defined in @code{#include }. - -@deftypecv {Parameter} mglCommand @code{const wchar_t *} name -Name of command. -@end deftypecv -@deftypecv {Parameter} mglCommand @code{const wchar_t *} desc -Short command description (can be NULL). -@end deftypecv -@deftypecv {Parameter} mglCommand @code{const wchar_t *} form -Format of command arguments (can be NULL). -@end deftypecv -@deftypecv {Parameter} mglCommand @code{int (*} exec @code{)(mglGraph *gr, long n, mglArg *a, int k[10])const wchar_t *} -Function for executing (plotting) the command using grapher @var{gr} and having @var{n}-th arguments @var{a}. Function must return 0 if all is OK; or 1 if arguments are wrong. -@end deftypecv -@deftypecv {Parameter} mglCommand @code{void (*} save @code{)(wchar_t out[1024], long n, mglArg *a, int k[10])const wchar_t *} -Function for exporting in C++ (can be NULL). +@deftypecv {Widget option} mglGraphAB @code{float} ShowMousePos +Включает/выключает показ координат последнего нажатия кнопки мыши на рисунке. @end deftypecv - -@c ------------------------------------------------------------------ -@node mglArg class, mglVar class, mglPoint class, Other classes -@section mglArg class -@cindex mglArg - -Structure describes arguments of functions in the stucture @code{mglCommand}. It is defined in @code{#include }. - -@deftypecv {Parameter} mglArg @code{int} type -Type of argument: 0-data, 1-string, 2-number. -@end deftypecv -@deftypecv {Parameter} mglArg @code{mglData *} d -Pointer to data (used if type=0). -@end deftypecv -@deftypecv {Parameter} mglArg @code{wchar_t} w[2048] -String with parameters (used if type=1 or if type=0 as variable name). -@end deftypecv -@deftypecv {Parameter} mglArg @code{char} s[2048] -String with parameters (used if type=1). -@end deftypecv -@deftypecv {Parameter} mglArg @code{float} v -Numerical value (used if type==2) +@deftypecv {Widget option} mglGraphAB @code{mglPoint} LastMousePos +Последнее положение нажатия кнопки мыши. @end deftypecv diff --git a/texinfo/concept_en.texi b/texinfo/concept_en.texi new file mode 100644 index 0000000..f05b618 --- /dev/null +++ b/texinfo/concept_en.texi @@ -0,0 +1,171 @@ + +@node Coordinate axes, Line styles, , General concepts +@subsection Coordinate axes + +Two axis representations are used in MathGL. The first one consists of normalizing the data point coordinates in a box @var{Min}x@var{Max} (@pxref{Axis settings}). If @var{Cut} is @code{true} then the outlier points are omitted, otherwise they are projected to the bounding box (@pxref{Cutting}). Also, the point will be omitted if it lies inside the box defined by @var{CutMin} x @var{CutMax} or if the value of formula @code{CutOff}() is nonzero for its coordinates. After that, transformation formulas are applied to the data point. Finally, the data point is plotted by one of the functions. + +There is a possibility to set members @var{Max}, @var{Min} directly, but one should call @code{RecalcBorder()} function to setup plotting routines. A safer way is to set these values by calling the @code{Axis()} function, which calls @code{RecalcBorder()} automatically. Another way to specify the scaling of the axis is to set it as a minimal or maximal value of the data array. Functions @code{XRange(), YRange(), ZRange()} do it. The second (optional) argument is used to replace the axis range or to join with the existed range. + +The axis origin is defined by the variable @var{Org} and is applied to all consequent calls of axes or grid drawing. By default, if this point lies outside the bounding box then it is projected onto the one (variable @var{AutoOrg} controls it). If one of the values of @var{Org} is equal to NAN then the corresponding value will be selected automatically. + +There is 4-th axis @emph{c} (color axis or colorbar) in addition to the usual axes @emph{x, y, z}. It sets the range of values for the surface coloring. Its borders are automatically set to values of Min.z, Max.z during the call of @code{Axis()} function. Also, one can directly change the color range by setting variables @var{Cmax}, @var{Cmax}, or calling functions @code{CAxis()} or @code{CRange()}. Use @code{Colorbar()} function for showing the colorbar. + +The form (appearence) of tick labels is controlled by @code{SetTicks()} function (@pxref{Axis settings}). It has 3 arguments: first one @var{d} sets the tick step (if positive) or tick number (if negative) or switches logarithmic ticks on (if zero); the second one, @var{ns}, sets the number of subticks; the last one is the starting point for ticks (default is axis origin). Function @var{SetTuneTicks} switches on/off tick enhancing by factoring out acommon multiplier (for small coordinate values, like 0.001 to 0.002, or large, like from 1000 to 2000) or common component (for narrow range, like from 0.999 to 1.000). Finally, you may use functions @code{SetXTT(), SetYTT(), SetZTT(), SetCTT()} for setting templates for tick labels (it supports TeX symbols). Also, there is a possibility to print arbitrary text as tick labels the by help of @code{SetTicksVal()} function. + +@node Line styles, Color scheme, Coordinate axes, General concepts +@subsection Line styles + +@cindex Line style +@cindex Mark style +@cindex Arrows + +The line style is defined by the string which may contain specifications for color (@samp{wkrgbcymhRGBCYMHWlenupqLENUPQ}), dashing style (@samp{-|;:ji} or space), width (@samp{0123456789}) and marks (@samp{o+xsd.^v} and @samp{#} modifier). If one of the type of information is omitted then default values used with the previous color or one from palette (for @pxref{1D plotting}) are adopted. +@ifhtml +@html +By default palette contain following colors: dark grayH’, blueb’, greeng’, redr’, cyanc’, magentam’, yellowy’, grayh’, green-bluel’, sky-bluen’, orangeq’, green-yellowe’, blue-violetu’, purplep’. + +

    The color types are: ‘k’ -- black, ‘r’ -- red, ‘R’ -- dark red, ‘g’ -- green, ‘G’ -- dark green, ‘b’ -- blue, ‘B’ -- dark blue, ‘c’ -- cyan, ‘C’ -- dark cyan, ‘m’ -- magenta, ‘M’ -- dark magenta, ‘y’ -- yellow, ‘Y’ -- dark yellow (gold), ‘h’ -- gray, ‘H’ -- dark gray, ‘w’ -- white, ‘W’ -- bright gray, ‘l’ -- green-blue, ‘L’ -- dark green-blue, ‘e’ -- green-yellow, ‘E’ -- dark green-yellow, ‘n’ -- sky-blue, ‘N’ -- dark sky-blue, ‘u’ -- blue-violet, ‘U’ -- dark blue-violet, ‘p’ -- purple, ‘P’ -- dark purple, ‘q’ -- orange, ‘Q’ -- dark orange (brown).

    + +Dashing style has the following meaning: space -- no line (usable for plotting only marks), ‘-’ -- solid line (■■■■■■■■■■■■■■■■), ‘|’ -- long dashed line (■■■■■■■■□□□□□□□□), ‘;’ -- dashed line (■■■■□□□□■■■■□□□□), ‘=’ -- small dashed line (■■□□■■□□■■□□■■□□), ‘:’ -- dotted line (■□□□■□□□■□□□■□□□), ‘j’ -- dash-dotted line (■■■■■■■□□□□■□□□□), ‘i’ -- small dash-dotted line (■■■□□■□□■■■□□■□□). +@end html +@end ifhtml +@ifnothtml +The line style is defined by the string which may contain specifications for color (@samp{wkrgbcymhRGBCYMHWlenupqLENUPQ}), dashing style (@samp{-|;:ji} or space), width (@samp{0123456789}) and marks (@samp{o+xsd.^v} and @samp{#} modifier). If one of the type of information is omitted then default values used with the previous color or one from palette (for @pxref{1D plotting}) are adopted. By default palette contain following colors: dark gray @samp{H}, blue @samp{b}, green @samp{g}, red @samp{r}, cyan @samp{c}, magenta @samp{m}, yellow @samp{y}, gray @samp{h}, blue-green @samp{l}, sky-blue @samp{n}, orange @samp{q}, yellow-green @samp{e}, blue-violet @samp{u}, purple @samp{p}. + +The color types are: @samp{k} -- black, @samp{r} -- red, @samp{R} -- dark red, @samp{g} -- green, @samp{G} -- dark green, @samp{b} -- blue, @samp{B} -- dark blue, @samp{c} -- cyan, @samp{C} -- dark cyan, @samp{m} -- magenta, @samp{M} -- dark magenta, @samp{y} -- yellow, @samp{Y} -- dark yellow (gold), @samp{h} -- gray, @samp{H} -- dark gray, @samp{w} -- white, @samp{W} -- bright gray, @samp{l} -- green-blue, @samp{L} -- dark green-blue, @samp{e} -- green-yellow, @samp{E} -- dark green-yellow, @samp{n} -- sky-blue, @samp{N} -- dark sky-blue, @samp{u} -- blue-violet, @samp{U} -- dark blue-violet, @samp{p} -- purple, @samp{P} -- dark purple, @samp{q} -- orange, @samp{Q} -- dark orange (brown). + +Dashing style has the following meaning: space -- no line (usable for plotting only marks), @samp{-} -- solid line (################), @samp{|} -- long dashed line (########________), @samp{;} -- dashed line (####____####____), @samp{=} -- small dashed line (##__##__##__##__), @samp{:} -- dotted line (#___#___#___#___), @samp{j} -- dash-dotted line (#######____#____), @samp{i} -- small dash-dotted line (###__#__###__#__). +@end ifnothtml + +Marker types are: @samp{o} -- circle, @samp{+} -- cross, @samp{x} -- skew cross, @samp{s} - square, @samp{d} - rhomb (or diamond), @samp{.} -- dot (point), @samp{^} -- triangle up, @samp{v} -- triangle down, @samp{<} -- triangle left, @samp{>} -- triangle right, @samp{#*} -- Y sign, @samp{#+} -- squared cross, @samp{#x} -- squared skew cross, @samp{#.} -- circled dot. If string contain symbol @samp{#} then the solid versions of markers are used. + +@float +@image{../png/sample5, 7cm} +@caption{Styles of lines and marks.} +@end float + +One may specify to draw a special symbol (an arrow) at the beginning and at the end of line. This is done if the specification string contains one of the following symbols: @samp{A} -- outer arrow, @samp{V} -- inner arrow, @samp{I} -- transverse hatches, @samp{K} -- arrow with hatches, @samp{T} -- triangle, @samp{S} -- square, @samp{D} -- rhombus, @samp{O} -- circle, @samp{_} -- nothing (the default). The following rule applies: the first symbol specifies the arrow at the end of line, the second specifies the arrow at the beginning of the line. For example, @samp{r-A} defines a red solid line with usual arrow at the end, @samp{b|AI} defines a blue dash line with an arrow at the end and with hatches at the beginning, @samp{_O} defines a line with the current style and with a circle at the beginning. These styles are applicable during the graphics plotting as well (for example, @ref{1D plotting}). + +@float +@image{../png/sampled, 7cm} +@caption{Arrow styles.} +@end float + +@node Color scheme, Font styles, Line styles, General concepts +@subsection Color scheme + +@cindex Color scheme + +The color scheme is used for determining the color of surfaces, isolines, isosurfaces and so on. The color scheme is defined by the string, which may contain several characters that are color id (@pxref{Line styles}) or characters @samp{d#:|}. Symbol @samp{d} denotes the interpolation by 3d position instead of the coloring by amplitude. Symbol @samp{#} switches to mesh drawing or to a wire plot. Symbol @samp{|} disables color interpolation in color scheme, which can be useful, for example, for sharp colors during matrix plotting. Symbol @samp{:} finishes the color scheme parsing. Following it, the user may put styles for the text, rotation axis for curves/isocontours, and so on. Color scheme may contain up to 32 color values. + +You may also use ``lighted'' colors in the color scheme specification (@emph{not in line style!}). The ``lighted'' color contain 2 symbols: first one is the usual symbol for color specification, the second one is a digit for its brightness. The digit can be in range @samp{1}...@samp{9}. +Number @samp{5} corresponds to a normal color, @samp{1} is a very dark version of the color (practically black), and @samp{9} is a very bright version of the color (practically white). For example, the color scheme can be @samp{b2b7wr7r2}. + +@float +@image{../png/colors, 7cm} +@caption{Colors and its ids.} +@end float + +For coloring by @emph{amplitude} (most common) the final color is a linear interpolation of color array. The color array is constructed from the string ids. The argument is the amplitude normalized between @var{Cmin} -- @var{Cmax} (@pxref{Axis settings}). For example, string containing 4 characters @samp{bcyr} corresponds to a colorbar from blue (lowest value) through cyan (next value) through yellow (next value) to the red (highest value). String @samp{kw} corresponds to a colorbar from black (lowest value) to white (highest value). String @samp{m} corresponds to a simple magenta color. + +There are several useful combinations. String @samp{kw} corresponds to the simplest gray color scheme where higher values are brighter. String @samp{wk} presents the inverse gray color scheme where higher value is darker. Strings @samp{kRryw}, @samp{kGgw}, @samp{kBbcw} present the well-known @emph{hot}, @emph{summer} and @emph{winter} color schemes. Strings @samp{BbwrR} and @samp{bBkRr} allow to view bi-color figure on white or black background, where negative values are blue and positive values are red. String @samp{BbcyrR} gives a color scheme similar to the well-known @emph{jet} color scheme. + +@float +@image{../png/color_schemes, 7cm} +@caption{Most popular color schemes.} +@end float + +When coloring by @emph{coordinate}, the final color is determined by the position of the point in 3d space and is calculated from formula c=x*c[1] + y*c[2] + z*c[3]. Here, c[1], c[2], c[3] are the first three elements of color array; x, y, z are normalized to @var{Min} -- @var{Max} coordinates of the point. This type of coloring is useful for isosurface plot where color may show the exact position of a piece of surface. + +@node Font styles, Textual formulas, Color scheme, General concepts +@subsection Font styles + +@cindex Font styles + +Text style is specified by the string which may contain several characters of font (@samp{ribwou}) and/or alignment (@samp{LRC}) specifications. The string also may contain the color id characters @samp{wkrgbcymhRGBCYMHW} (@pxref{Line styles}) after the symbol @samp{:}. For example, @samp{biC:b} sets the bold italic font text aligned at the center and with blue color. + +The font types are: @samp{r} -- roman font, @samp{i} -- italic style, @samp{b} -- bold style. By default roman roman font is used. The align types are: @samp{L} -- align left (default), @samp{C} -- align center, @samp{R} -- align right. Additional font effects are: @samp{w} -- wired, @samp{o} -- over-lined, @samp{u} -- underlined. +@c Also a parsing of the LaTeX-like syntax is provided (for detail, @pxref{mglFont class} and @ref{Font settings}). + +Also a parsing of the LaTeX-like syntax is provided. There are commands for the font style changing inside the string (for example, use \b for bold font): \a or \overline -- over-lined, \b or \textbf -- bold, \i or \textit -- italic, \r or \textrm -- roman (disable bold and italic attributes), \u or \underline -- underlined, \w or \wire -- wired, \big -- bigger size, @@ -- smaller size. The lower and upper indexes are specified by @samp{_} and @samp{^} symbols. At this the changed font style is applied only on next symbol or symbols in braces @{@}. The text in braces @{@} are treated as single symbol that allow one to print the index of index. For example, compare the strings @samp{sin (x^@{2^3@})} and @samp{sin (x^2^3)}. You may also change text color inside string by command #? or by \color? where @samp{?} is symbolic id of the color (@pxref{Line styles}). For example, words @samp{Blue} and @samp{red} will be colored in the string @samp{#b@{Blue@} and \colorr@{red@} text}. The most of functions understand the newline symbol @samp{\n} and allows to print multi-line text. Finally, you can use arbitrary UTF codes by command @code{\utf0x????}. For example, @code{\utf0x3b1} will produce +@ifhtml +@html + α symbol. +@end html +@end ifhtml +@ifnothtml + @math{\alpha} symbol. +@end ifnothtml + +The most of commands for special TeX or AMSTeX symbols, the commands for font style changing (\textrm, \textbf, \textit, \textsc, \overline, \underline), accents (\hat, \tilde, \dot, \ddot, \acute, \check, \grave, \bar, \breve) and roots (\sqrt, \sqrt3, \sqrt4) are recognized. The full list contain approximately 2000 commands. Note that first space symbol after the command is ignored, but second one is printed as normal symbol (space). For example, the following strings produce the same result @math{\tilde a}: @samp{\tilde@{a@}}; @samp{\tilde a}; @samp{\tilde@{@}a}. + +@ifhtml +@html +In particular, the Greek letters are recognizable special symbols: α – \alpha, β – \beta, γ – \gamma, δ – \delta, ε – \epsilon, η – \eta, ι – \iota, χ – \chi, κ – \kappa, λ – \lambda, μ – \mu, ν – \nu, o – \o, ω – \omega, ϕ – \phi, π – \pi, ψ – \psi, ρ – \rho, σ – \sigma, θ – \theta, τ – \tau, υ – \upsilon, ξ – \xi, ζ – \zeta, ς – \varsigma, ɛ – \varepsilon, ϑ – \vartheta, φ – \varphi, ϰ – \varkappa; A – \Alpha, B – \Beta, Γ – \Gamma, Δ – \Delta, E – \Epsilon, H – \Eta, I – \Iota, C – \Chi, K – \Kappa, Λ – \Lambda, M – \Mu, N – \Nu, O – \O, Ω – \Omega, Φ – \Phi, Π – \Pi, Ψ – \Psi, R – \Rho, Σ – \Sigma, Θ – \Theta, T – \Tau, Υ – \Upsilon, Ξ – \Xi, Z – \Zeta. + +

    The small part of most common special TeX symbols are: ∠ – \angle, ⋅ – \cdot, ♣ – \clubsuit, ✓ – \checkmark, ∪ – \cup, ∩ – \cap, ♢ – \diamondsuit, ◇ – \diamond, ÷ + – \div, +↓ – \downarrow, † – \dag, ‡ – \ddag, ≡ – \equiv, ∃ – \exists, ⌢ – \frown, ♭ – \flat, ≥ – \ge, ≥ – \geq, ≧ – \geqq, ← – \gets, ♡ – \heartsuit, ∞ – \infty, ∫ – \int, \Int, ℑ – \Im, ♢ – \lozenge, ⟨ – \langle, ≤ – \le, ≤ – \leq, ≦ – \leqq, ← – \leftarrow, ∓ – \mp, ∇ – \nabla, ≠ – \ne, ≠ – \neq, ♮ – \natural, ∮ – \oint, ⊙ – \odot, ⊕ – \oplus, ∂ – \partial, ∥ – \parallel, ⊥ –\perp, ± – \pm, ∝ – \propto, ∏ – \prod, ℜ – \Re, → – \rightarrow, ⟩ – \rangle, ♠ – \spadesuit, ~ – \sim, ⌣ – \smile, ⊂ – \subset, ⊃ – \supset, √ – \sqrt or \surd, § – \S, ♯ – \sharp, ∑ – \sum, × – \times, → – \to, ∴ – \therefore, ↑ – \uparrow, ℘ – \wp.

    +@end html +@end ifhtml +@ifnothtml +In particular, the Greek letters are recognizable special symbols: @math{\alpha} -- \alpha, @math{\beta} -- \beta, @math{\gamma} -- \gamma, @math{\delta} -- \delta, @math{\epsilon} -- \epsilon, @math{\eta} -- \eta, @math{\iota} -- \iota, @math{\chi} -- \chi, @math{\kappa} -- \kappa, @math{\lambda} -- \lambda, @math{\mu} -- \mu, @math{\nu} -- \nu, @math{o} -- \o, @math{\omega} -- \omega, @math{\phi} -- \phi, @math{\pi} -- \pi, @math{\psi} -- \psi, @math{\rho} -- \rho, @math{\sigma} -- \sigma, @math{\theta} -- \theta, @math{\tau} -- \tau, @math{\upsilon} -- \upsilon, @math{\xi} -- \xi, @math{\zeta} -- \zeta, @math{\varsigma} -- \varsigma, @math{\varepsilon} -- \varepsilon, @math{\vartheta} -- \vartheta, @math{\varphi} -- \varphi, A -- \Alpha, B -- \Beta, @math{\Gamma} -- \Gamma, @math{\Delta} -- \Delta, E -- \Epsilon, H -- \Eta, I -- \Iota, C -- \Chi, K -- \Kappa, @math{\Lambda} -- \Lambda, M -- \Mu, N -- \Nu, O -- \O, @math{\Omega} -- \Omega, @math{\Phi} -- \Phi, @math{\Pi} -- \Pi, @math{\Psi} -- \Psi, R -- \Rho, @math{\Sigma} -- \Sigma, @math{\Theta} -- \Theta, T -- \Tau, @math{\Upsilon} -- \Upsilon, @math{\Xi} -- \Xi, Z -- \Zeta. + +The small part of most common special TeX symbols are: @math{\angle} -- \angle, @math{\aleph} -- \aleph, @math{\cdot} -- \cdot, @math{\clubsuit} -- \clubsuit, @math{\cup} -- \cup, @math{\cap} -- \cap, @math{\diamondsuit} -- \diamondsuit, @math{\diamond} -- \diamond, @math{\div} -- \div, @math{\downarrow} -- \downarrow, @math{\dag} -- \dag, @math{\ddag} -- \ddag, @math{\equiv} -- \equiv, @math{\exists} -- \exists, @math{\frown} -- \frown, @math{\flat} -- \flat, @math{\ge} -- \ge, @math{\geq} -- \geq, @math{\gets} -- \gets, @math{\heartsuit} -- \heartsuit, @math{\infty} -- \infty, @math{\in} -- \in, @math{\int} -- \int, @math{\Im} -- \Im, @math{\langle} -- \langle, @math{\le} -- \le, @math{\leq} -- \leq, @math{\leftarrow} -- \leftarrow, @math{\mp} -- \mp, @math{\nabla} -- \nabla, @math{\ne} -- \ne, @math{\neq} -- \neq, @math{\natural} -- \natural, @math{\oint} -- \oint, @math{\odot} -- \odot, @math{\oplus} -- \oplus, @math{\partial} -- \partial, @math{\parallel} -- \parallel, @math{\perp} -- \perp, @math{\pm} -- \pm, @math{\propto} -- \propto, @math{\prod} -- \prod, @math{\Re} -- \Re, @math{\rightarrow} -- \rightarrow, @math{\rangle} -- \rangle, @math{\spadesuit} -- \spadesuit, @math{\sim} -- \sim, @math{\smile} -- \smile, @math{\subset} -- \subset, @math{\supset} -- \supset, @math{\surd} -- \sqrt or \surd, @math{\S} -- \S, @math{\sharp} -- \sharp, @math{\sum} -- \sum, @math{\times} -- \times, @math{\to} -- \to, @math{\uparrow} -- \uparrow, @math{\wp} -- \wp and so on. +@end ifnothtml + +The font size can be defined explicitly (if @var{size}>0) or relative to a base font size as |@var{size}|*@var{FontSize} (if @var{size}<0). The value @var{size}=0 specifies that the string will not be printed. The base font size is measured in internal ``MathGL'' units. Special functions @code{SetFontSizePT(), SetFontSizeCM(), SetFontSizeIN()} allow one to set it in more ``common'' variables for a given dpi value of the picture. + + +@node Textual formulas, , Font styles, General concepts +@subsection Textual formulas + +@cindex Textual formulas + +MathGL have the fast variant of textual formula evaluation +@ifclear UDAV + (@pxref{mglFormula class}) +@end ifclear +. There are a lot of functions and operators available. The operators are: @samp{+} -- addition, @samp{-} -- subtraction, @samp{*} -- multiplication, @samp{/} -- division, @samp{^} -- integer power. Also there are logical ``operators'': @samp{<} -- true if x} -- true if x>y, @samp{=} -- true if x=y, @samp{&} -- true if x and y both nonzero, @samp{|} -- true if x or y nonzero. These logical operators have lowest priority and return 1 if true or 0 if false. + +The basic functions are: @samp{sqrt(x)} -- square root of @var{x}, @samp{pow(x,y)} -- power @var{x} in @var{y}, @samp{ln(x)} -- natural logarithm of @var{x}, @samp{lg(x)} -- decimal logarithm of @var{x}, @samp{log(a,x)} -- logarithm base @var{a} of @var{x}, @samp{abs(x)} -- absolute value of @var{x}, @samp{sign(x)} -- sign of @var{x}, @samp{mod(x,y)} -- x modulo y, @samp{step(x)} -- step function, @samp{int(x)} -- integer part of @var{x}, @samp{rnd} -- random number, @samp{pi} -- number +@ifhtml +@html +π = 3.1415926… +@end html +@end ifhtml +@ifnothtml +@math{\pi=3.1415926...} +@end ifnothtml + + +Trigonometric functions are: @samp{sin(x)}, @samp{cos(x)}, @samp{tan(x)} (or @samp{tg(x)}). Inverse trigonometric functions are: @samp{asin(x)}, @samp{acos(x)}, @samp{atan(x)}. Hyperbolic functions are: @samp{sinh(x)} (or @samp{sh(x)}), @samp{cosh(x)} (or @samp{ch(x)}), @samp{tanh(x)} (or @samp{th(x)}). Inverse hyperbolic functions are: @samp{asinh(x)}, @samp{acosh(x)}, @samp{atanh(x)}. + +@ifhtml +@html +

    There are a set of special functions: ‘gamma(x)’ – Gamma function Γ(x) = ∫0 tx-1 exp(-t) dt, ‘psi(x)’ – digamma function ψ(x) = Γ′(x)/Γ(x) for x≠0, ‘ai(x)’ – Airy function Ai(x), ‘bi(x)’ – Airy function Bi(x), ‘cl(x)’ – Clausen function, ‘li2(x)’ (or ‘dilog(x)’) – dilogarithm Li2(x) = -ℜ∫0xds log(1-s)/s, ‘sinc(x)’ – compute sinc(x) = sin(πx)/(πx) for any value of x, ‘zeta(x)’ – Riemann zeta function ζ(s) = ∑k=1k-s for arbitrary s≠1, ‘eta(x)’ – eta function η(s) = (1 - 21-s)ζ(s) for arbitrary s, ‘lp(l,x)’ – Legendre polynomial Pl(x), (|x|≤1, l≥0), ‘w0(x)’ – principal branch of the Lambert W function, ‘w1(x)’ – principal branch of the Lambert W function. Function W(x) is defined to be solution of the equation: W exp(W) = x.

    + +

    The exponent integrals are: ‘ci(x)’ – Cosine integral Ci(x) = ∫0xdt cos(t)/t, ‘si(x)’ – Sine integral Si(x) = ∫0xdt sin(t)/t, ‘erf(x)’ – error function erf(x) = (2/√π) ∫0xdt exp(-t2) , ‘ei(x)’ – exponential integral Ei(x) = -PV(∫-xdt exp(-t)/t) (where PV denotes the principal value of the integral), ‘e1(x)’ – exponential integral E1(x) = ℜ∫1dt exp(-xt)/t, ‘e2(x)’ – exponential integral E2(x) = ℜ∫1∞dt exp(-xt)/t2, ‘ei3(x)’ – exponential integral Ei3(x) = ∫0xdt exp(-t3) for x≥0.

    + +

    Bessel functions are: ‘j(nu,x)’ – regular cylindrical Bessel function of fractional order nu, ‘y(nu,x)’ – irregular cylindrical Bessel function of fractional order nu, ‘i(nu,x)’ – regular modified Bessel function of fractional order nu, ‘k(nu,x)’ – irregular modified Bessel function of fractional order nu.

    + +

    Elliptic integrals are: ‘ee(k)’ – complete elliptic integral is denoted by E(k) = E(π/2,k), ‘ek(k)’ – complete elliptic integral is denoted by K(k) = F(π/2,k), ‘e(phi,k)’ – elliptic integral E(φ,k) = ∫0φdt √(1 - k2sin2(t)), ‘f(phi,k)’ – elliptic integral F(φ,k) = ∫0φdt 1/√(1 - k2sin2(t))

    +@end html +@end ifhtml +@ifnothtml +There are a set of special functions: @samp{gamma(x)} -- Gamma function @math{\Gamma(x) = \int_0^\infty dt t^@{x-1@} \exp(-t)} , @samp{psi(x)} -- digamma function @math{\psi(x) = \Gamma’(x)/\Gamma(x)} for x!=0, @samp{ai(x)} -- Airy function Ai(x), @samp{bi(x)} -- Airy function Bi(x), @samp{cl(x)} -- Clausen function, @samp{li2(x)} (or @samp{dilog(x)}) -- dilogarithm @math{Li_2(x) = - \Re \int_0^x ds \log(1-s)/s}, @samp{sinc(x)} -- compute @math{sinc(x) = \sin(\pi x) / (\pi x)} for any value of x, @samp{zeta(x)} -- Riemann zeta function @math{\zeta(s) = \sum_@{k=1@}^\infty k^@{-s@}} for arbitrary s!=1, @samp{eta(x)} -- eta function @math{\eta(s) = (1-2^@{1-s@}) \zeta(s)} for arbitrary s, @samp{lp(l,x)} -- Legendre polynomial @math{P_l(x)}, (|x|<=1, l>=0), @samp{w0(x)}, @samp{w1(x)} -- principal branch of the Lambert @var{W} functions. Function W(x) is defined to be solution of the equation @math{W \exp(W) = x}. + +The exponent integrals are: @samp{ci(x)} -- Cosine integral @math{Ci(x) = \int_0^x dt \cos(t)/t}, @samp{si(x)} -- Sine integral @math{Si(x) = \int_0^x dt \sin(t)/t}, @samp{erf(x)} -- error function @math{erf(x) = (2/\sqrt(\pi)) \int_0^x dt \exp(-t^2)}, @samp{ei(x)} -- exponential integral @math{Ei(x) := - PV(\int_@{-x@}^\infty dt \exp(-t)/t)} (where PV denotes the principal value of the integral), @samp{e1(x)} -- exponential integral @math{E_1(x) := Re \int_1^\infty dt \exp(-xt)/t} , @samp{e2(x)} -- exponential integral @math{E_2(x) := Re \int_1^\infty dt \exp(-xt)/t^2}, @samp{ei3(x)} -- exponential integral @math{Ei_3(x) = \int_0^x dt \exp(-t^3)} for x>=0. + +Bessel functions are: @samp{j(nu,x)} -- regular cylindrical Bessel function of fractional order @var{nu}, @samp{y(nu,x)} -- irregular cylindrical Bessel function of fractional order @var{nu}, @samp{i(nu,x)} -- regular modified Bessel function of fractional order @var{nu}, @samp{k(nu,x)} -- irregular modified Bessel function of fractional order @var{nu}. + +Elliptic integrals are: @samp{ee(k)} -- complete elliptic integral is denoted by @math{E(k) = E(\pi/2, k)}, @samp{ek(k)} -- complete elliptic integral is denoted by @math{K(k) = F(\pi/2, k)}, @samp{e(phi,k)} -- elliptic integral @math{E(\phi,k) = \int_0^\phi dt \sqrt((1 - k^2 \sin^2(t)))}, @samp{f(phi,k)} -- elliptic integral @math{F(\phi,k) = \int_0^\phi dt 1/\sqrt((1 - k^2 \sin^2(t)))}. +@end ifnothtml + +Jacobi elliptic functions are: @samp{sn(u,m)}, @samp{cn(u,m)}, @samp{dn(u,m)}, @samp{sc(u,m)}, @samp{sd(u,m)}, @samp{ns(u,m)}, @samp{cs(u,m)}, @samp{cd(u,m)}, @samp{nc(u,m)}, @samp{ds(u,m)}, @samp{dc(u,m)}, @samp{nd(u,m)}. + +Note, some of these functions are unavailable if NO_GSL is defined during compilation of MathGL library. + +There is no difference between lower or upper case in formulas. If argument value lie outside the range of function definition then function returns NaN. + + diff --git a/texinfo/concept_ru.texi b/texinfo/concept_ru.texi new file mode 100644 index 0000000..0d988a4 --- /dev/null +++ b/texinfo/concept_ru.texi @@ -0,0 +1,169 @@ + + +@node Coordinate axes, Line styles, , General concepts +@subsection Оси координат + +Представление системы координат в MathGL состоит из двух частей. Вначале координаты нормируются в интервал @var{Min}x@var{Max} (@pxref{Axis settings}). Если флаг @var{Cut} установлен, то точки вне интервала отбрасываются, в противном случае, они проецируются на ограничивающий параллелепипед (@pxref{Cutting}). Кроме того, отбрасываются точки внутри границ, определенных переменными @var{CutMin}x@var{CutMax} и точки, для которых значение функции @code{CutOff}() не равно нулю. После этого формулы перехода в криволинейную систему координат @code{SetFunc()}применяются к каждой точке. Наконец, точка данных отображается с помощью одной из графических функций. + +Величины @var{Max}, @var{Min} можно изменять вручную. Однако, после этого необходимо вызвать функцию @code{RecalcBorder()} для настройки графика. Более удобный и безопасный путь состоит в вызове функций @code{Axis(), SetRanges()} и др. В последнем случае функция @code{RecalcBorder()} вызывается автоматически. Размеры осей можно задавать и автоматически по минимальному и максимальному значениям массива данных. Для этого предназначены функции @code{XRange(), YRange(), ZRange()}. Второй не обязательный аргумент указывает, заменять ли новые значения диапазона изменения оси координат (по умолчанию) или только расширить уже существующий диапазон. + +Точка пересечения осей координат задается переменной @var{Org} и действует на последующие вызовы функций рисования осей координат и сетки. По умолчанию, если точка пересечения осей координат попадает вне диапазона осей координат, то она проецируется на границу области. Изменить такое поведение можно, задав @var{AutoOrg}=@code{false}. В случае, если одно из значений @var{Org} равно NAN, то соответствующее значение будет выбрано автоматически. + +Кроме привычных осей @emph{x, y, z} есть еще одна ось -- цветовая шкала -- ось @emph{c}. Она используется при окрашивании поверхностей и задает границы изменения функции при окрашивании. При вызове @code{Axis()} ее границы автоматически устанавливаются равными Min.z и Max.z. Возможно и ручное изменение границ цветового интервала посредством вызова функции @code{CAxis()} или изменение границ по заданному массиву @code{CRange()}. Используйте @code{Colorbar()} для отображения цветовой шкалы. + +Вид меток по осям определяется функцией @code{SetTicks()} (@pxref{Axis settings}). Она имеет 3 аргумента: первый @var{d} задает шаг меток (если положительны) или их число (если отрицательны) или логарифмические метки (если равны нулю); второ @var{ns} задает число "подметок"; последний определяет начальную точку для меток (по умолчанию это точка пересечения осей). Функция @var{SetTuneTicks} включает/выключает выделение общего множителя (большого или малого факторов в диапазоне) для меток осей координат. Наконец, если стандартный вид меток не устраивает пользователя, то их шаблон можно задать явно (можно использовать и ТеХ символы), воспользовавшись функциями @code{SetXTT(), SetYTT(). SetZTT(). SetCTT()}. Кроме того, в качестве меток можно вывести произвольный текст использовав функцию @code{SetTicksVal()}. + +@node Line styles, Color scheme, Coordinate axes, General concepts +@subsection Стиль линий + +@cindex Стиль линий +@cindex Стиль маркеров +@cindex Стиль стрелок + +Стиль линии задается строкой, которая может содержать символ цвета (@samp{wkrgbcymhRGBCYMHWlenupqLENUPQ}), тип пунктира (@samp{-|;:ji} или пробел), ширину линии (@samp{0123456789}) и тип маркера (@samp{o+xsd.^v} и модификатор @samp{#}). Если пропущен цвет или тип пунктира, то используется значение по умолчанию с последним указанным цветом или значение из палитры (для @pxref{1D plotting}). +@ifhtml +@html +По умолчанию палитры содержит следующие цвета: темно серыйH’, синийb’, зеленыйg’, красныйr’, голубойc’, пурпурныйm’, yellowy’, серыйh’, сине-зеленыйl’, небесно-синийn’, оранжевыйq’, желто-зеленыйe’, сине-фиолетовыйu’, фиолетовыйp’. + +

    Символы цвета: ‘k’ -- черный, ‘r’ -- красный, ‘R’ -- темно красный, ‘g’ -- зеленый, ‘G’ -- темно зеленый, ‘b’ -- синий, ‘B’ -- темно синий, ‘c’ -- голубой, ‘C’ -- темно голубой, ‘m’ -- пурпурный, ‘M’ -- темно пурпурный, ‘y’ -- желтый, ‘Y’ -- темно желтый (золотой), ‘h’ -- серый, ‘H’ -- темно серый, ‘w’ -- белый, ‘W’ -- светло серый, ‘l’ -- сине-зеленый, ‘L’ -- темно сине-зеленый, ‘e’ -- желто-зеленый, ‘E’ -- темно желто-зеленый, ‘n’ -- небесно-синий, ‘N’ -- темно небесно-синий, ‘u’ -- сине-фиолетовый, ‘U’ -- темно сине-фиолетовый, ‘p’ -- фиолетовый, ‘P’ -- темно фиолетовый, ‘q’ -- оранжевый, ‘Q’ -- темно оранжевый (коричневый).

    + +Тип пунктира: пробел -- нет линии (для рисования только маркеров), ‘-’ -- сплошная линия (■■■■■■■■■■■■■■■■), ‘|’ -- длинный пунктир (■■■■■■■■□□□□□□□□), ‘;’ -- пунктир (■■■■□□□□■■■■□□□□), ‘=’ -- короткий пунктир (■■□□■■□□■■□□■■□□), ‘:’ -- точки (■□□□■□□□■□□□■□□□), ‘j’ -- пунктир с точками (■■■■■■■□□□□■□□□□), ‘i’ -- мелкий пунктир с точками (■■■□□■□□■■■□□■□□). +@end html +@end ifhtml +@ifnothtml +По умолчанию палитры содержит следующие цвета: темно серый @samp{H}, синий @samp{b}, зеленый @samp{g}, красный @samp{r}, голубой @samp{c}, пурпурный @samp{m}, yellow @samp{y}, серый @samp{h}, сине-зеленый @samp{l}, небесно-синий @samp{n}, оранжевый @samp{q}, желто-зеленый @samp{e}, сине-фиолетовый @samp{u}, фиолетовый @samp{p}. + +Символы цвета те же, что и в классе mglColor (@pxref{mglColor class}): @samp{k} -- черный, @samp{r} -- красный, @samp{R} -- темно красный, @samp{g} -- зеленый, @samp{G} -- темно зеленый, @samp{b} -- синий, @samp{B} -- темно синий, @samp{c} -- голубой, @samp{C} -- темно голубой, @samp{m} -- пурпурный, @samp{M} -- темно пурпурный, @samp{y} -- желтый, @samp{Y} -- темно желтый (золотой), @samp{h} -- серый, @samp{H} -- темно серый, @samp{w} -- белый, @samp{W} -- светло серый, @samp{l} -- сине-зеленый, @samp{L} -- темно сине-зеленый, @samp{e} -- желто-зеленый, @samp{E} -- темно желто-зеленый, @samp{n} -- небесно-синий, @samp{N} -- темно небесно-синий, @samp{u} -- сине-фиолетовый, @samp{U} -- темно сине-фиолетовый, @samp{p} -- фиолетовый, @samp{P} -- темно фиолетовый, @samp{q} -- оранжевый, @samp{Q} -- темно оранжевый (коричневый). + +Тип пунктира: пробел -- нет линии (для рисования только маркеров), @samp{-} -- сплошная линия (################), @samp{|} -- длинный пунктир (########________), @samp{;} -- пунктир (####____####____), @samp{=} -- короткий пунктир (##__##__##__##__), @samp{:} -- точки (#___#___#___#___), @samp{j} -- пунктир с точками (#######____#____), @samp{i} -- мелкий пунктир с точками (###__#__###__#__). +@end ifnothtml + +Типы маркеров: @samp{o} -- окружность, @samp{+} -- крест, @samp{x} -- косой крест, @samp{s} - квадрат, @samp{d} - ромб, @samp{.} -- точка, @samp{^} -- треугольник вверх, @samp{v} -- треугольник вниз, @samp{<} -- треугольник влево, @samp{>} -- треугольник вправо, @samp{#*} -- знак Y, @samp{#+} -- крест в квадрате, @samp{#x} -- косой крест в квадрате, @samp{#.} -- точка в окружности. Если в строке присутствует символ @samp{#}, то используются символы с заполнением. + +@float +@image{../png/sample5, 7cm} +@caption{Стили линий и маркеров.} +@end float + +На конце и в начале линии можно выводить специальный символ (стрелку), если в строке указать один из символов: @samp{A} -- стрелка наружу, @samp{V} -- стрелка внутрь, @samp{I} -- поперечная черта, @samp{K} -- стрелка с чертой, @samp{T} -- треугольник, @samp{S} -- квадрат, @samp{D} -- ромб, @samp{O} -- круг, @samp{_} -- нет стрелки (по умолчанию). При этом действует следующее правило: первый символ определяет стрелку на конце линии, второй символ -- стрелку в начале линии. Например, @samp{r-A} -- красная сплошная линия со стрелкой на конце, @samp{b|AI} -- синий пунктир со стрелкой на конце и чертой вначале, @samp{_O} -- линия с текущим стилем и кружком вначале. Эти стили действуют и при построении графиков (например, @ref{1D plotting}). + +@float +@image{../png/sampled, 7cm} +@caption{Стили стрелок.} +@end float + +@node Color scheme, Font styles, Line styles, General concepts +@subsection Цветовая схема + +@cindex Цветовая схема + +Цветовая схема используется для определения цвета поверхностей, линий уровня и пр. Цветовая схема задается строкой @emph{s}, которая содержит символы цвета (@pxref{Line styles}) или символы @samp{d#:|}. Символ @samp{d} указывает на определение цвета в зависимости от положения точки в пространстве, а не по амплитуде данных. Символ @samp{#} переключает рисование поверхности на сетчатое (для трехмерных поверхностей) или включает рисование сетки на поверхности. Символ @samp{|} отключает интерполяцию цвета в цветовой схеме. Это может быть полезно для ``резких'' цветов, например, при рисовании матриц. Если в строке встречается символ @samp{:}, то он принудительно заканчивает разбор строки для стиля поверхности. После этого символа могут идти описание стиля текста или оси вращения кривой/линий уровня. Цветовая схема может содержать до 32 значений цвета. + +В цветовой схеме можно использовать тональные (``подсвеченные'') цвета (@emph{не в стиле линий!}). Тональный цвет задается двумя символами: первый -- обычный цвет, второй -- его яркость цифрой. Цифра может быть в диапазоне @samp{1}...@samp{9}. При этом @samp{5} соответствует нормальному цвету, @samp{1} -- очень темная версия цвета (почти черный), @samp{9} -- очень светлая версия цвета (почти белый). Например цветовая схема может быть @samp{b2b7wr7r2}. + +@float +@image{../png/colors, 7cm} +@caption{Цвета и их идентификаторы.} +@end float + +При определении цвета по @emph{амплитуде} (наиболее часто используется) окончательный цвет определяется путем линейной интерполяции массива цветов. Массив цветов формируется из цветов, указанных в строке спецификации. Аргумент -- амплитуда, нормированная между @var{Cmin} -- @var{Cmax} (@pxref{Axis settings}). Например, строка из 4 символов @samp{bcyr} соответствует изменению цвета от синего (минимальное значение) через голубой и желтый (промежуточные значения) к красному (максимальное значение). Строка @samp{kw} соответствует изменению цвета от черного (минимальное значение) к белому (максимальное значение). Строка из одного символа (например, @samp{g}) соответствует однотонному цвету (в данному случае зеленому). + +Есть несколько полезных цветовых схем. Строка @samp{kw} дает обычную серую (черно-белую) схему, когда большие значения светлее. Строка @samp{wk} представляет обратную серую схему, когда большие значения темнее. Строки @samp{kRryw}, @samp{kGgw}, @samp{kBbcw} представляют собой хорошо известные схемы @emph{hot}, @emph{summer} и @emph{winter}. Строки @samp{BbwrR} и @samp{bBkRr} позволяют рисовать двухцветные фигуры на белом или черном фоне, когда отрицательные значения показаны синим цветом, а положительные -- красным. Строка @samp{BbcyrR} дает цветовую схему, близкую к хорошо известной схеме @emph{jet}. + + +@float +@image{../png/color_schemes, 7cm} +@caption{Наиболее популярные цветовые схемы.} +@end float + +При определении цвета по @emph{положению точки в пространстве} окончательный цвет определяется по формуле c=x*c[1] + y*c[2] + z*c[3]. Здесь c[1], c[2], c[3] -- первые три цвета в цветовом массиве; x, y, z -- координаты точки, нормированные на @var{Min}x@var{Max}. Такой тип определения цвета полезен, например, при построении поверхностей уровня, когда цвет дает представление о положении точки в пространстве. + +@node Font styles, Textual formulas, Color scheme, General concepts +@subsection Стиль текста + +@cindex Стиль текста + +Стиль текста задается строкой, которая может содержать несколько символов: тип шрифта (@samp{ribwou}) и/или выравнивания (@samp{LRC}), а также цвет текста @samp{wkrgbcymhRGBCYMHW} (@pxref{Line styles}) после символа @samp{:}. Например, @samp{biC:b} соответствует жирному курсиву с выравниванием по центру синего цвета. + +Начертания шрифта: @samp{r} -- прямой шрифт, @samp{i} -- курсив, @samp{b} -- жирный. По умолчанию используется прямой шрифт. Типы выравнивания текста: @samp{L} -- по левому краю (по умолчанию), @samp{C} -- по центру, @samp{R} -- по правому краю. Дополнительные эффекты шрифта: @samp{w} -- контурный, @samp{o} -- надчеркнутый, @samp{u} -- подчеркнутый. +@c Синтаксический разбор LaTeX-их команд по умолчанию включен (подробнее см. @pxref{mglFont class} и @ref{Font settings}). + +Синтаксический разбор LaTeX-их команд по умолчанию включен. Это команды смены стиля текста (например, \b для жирного текста): \a или \overline -- надчеркивание, \b или \textbf -- жирный, \i или \textit -- курсив, \r или \textrm -- прямой (отменяет стили жирного и курсива), \u или \underline -- подчеркнутый, \w или \wire -- контурный, \big -- большего размера, @@ -- меньшего размера. Нижний и верхний индексы задаются символами @samp{_} и @samp{^}. При этом изменение стиля применяется только к следующему символу или к символам в фигурных скобках @{@}, которые понимаются как единый блок. Например, сравните строки @samp{sin (x^@{2^3@})} и @samp{sin (x^2^3)}. Можно также менять цвет текста внутри строки с помощью команд #? или \color?, где @samp{?} -- символ цвета (@pxref{Line styles}). Например, слова @samp{Blue} и @samp{red} будут окрашены в соответствующий цвет в строке @samp{#b@{Blue@} and \colorr@{red@} text}. Большинство функций понимает символ новой строки @samp{\n} и позволяет выводить много строчный текст. Наконец, можно использовать символы с произвольным UTF кодом с помощью команды @code{\utf0x????}. Например, @code{\utf0x3b1} даст символ +@ifhtml +@html +α. +@end html +@end ifhtml +@ifnothtml +@math{\alpha}. +@end ifnothtml + +Распознаются также большинство символов TeX и AMSTeX, команды смены стиля текста (\textrm, \textbf, \textit, \textsc, \overline, \underline), акценты (\hat, \tilde, \dot, \ddot, \acute, \check, \grave, \bar, \breve) и корни (\sqrt, \sqrt3, \sqrt4). Полный список содержит около 2000 символов. Отмечу, что первый пробел (пробел, табуляция и пр.) после команды игнорируется, а все остальные пробелы печатаются обычным образом. Например, следующие строки дают одинаковый результат @math{\tilde a}: @samp{\tilde@{a@}}; @samp{\tilde a}; @samp{\tilde@{@}a}. + +@ifhtml +@html +В частности, распознаются греческие буквы: α – \alpha, β – \beta, γ – \gamma, δ – \delta, ε – \epsilon, η – \eta, ι – \iota, χ – \chi, κ – \kappa, λ – \lambda, μ – \mu, ν – \nu, o – \o, ω – \omega, ϕ – \phi, π – \pi, ψ – \psi, ρ – \rho, σ – \sigma, θ – \theta, τ – \tau, υ – \upsilon, ξ – \xi, ζ – \zeta, ς – \varsigma, ɛ – \varepsilon, ϑ – \vartheta, φ – \varphi, ϰ – \varkappa; A – \Alpha, B – \Beta, Γ – \Gamma, Δ – \Delta, E – \Epsilon, H – \Eta, I – \Iota, C – \Chi, K – \Kappa, Λ – \Lambda, M – \Mu, N – \Nu, O – \O, Ω – \Omega, Φ – \Phi, Π – \Pi, Ψ – \Psi, R – \Rho, Σ – \Sigma, Θ – \Theta, T – \Tau, Υ – \Upsilon, Ξ – \Xi, Z – \Zeta. + +

    Еще примеры наиболее общеупотребительных TeX-их символов: ∠ – \angle, ⋅ – \cdot, ♣ – \clubsuit, ✓ – \checkmark, ∪ – \cup, ∩ – \cap, ♢ – \diamondsuit, ◇ – \diamond, ÷ + – \div, +↓ – \downarrow, † – \dag, ‡ – \ddag, ≡ – \equiv, ∃ – \exists, ⌢ – \frown, ♭ – \flat, ≥ – \ge, ≥ – \geq, ≧ – \geqq, ← – \gets, ♡ – \heartsuit, ∞ – \infty, ∫ – \int, \Int, ℑ – \Im, ♢ – \lozenge, ⟨ – \langle, ≤ – \le, ≤ – \leq, ≦ – \leqq, ← – \leftarrow, ∓ – \mp, ∇ – \nabla, ≠ – \ne, ≠ – \neq, ♮ – \natural, ∮ – \oint, ⊙ – \odot, ⊕ – \oplus, ∂ – \partial, ∥ – \parallel, ⊥ –\perp, ± – \pm, ∝ – \propto, ∏ – \prod, ℜ – \Re, → – \rightarrow, ⟩ – \rangle, ♠ – \spadesuit, ~ – \sim, ⌣ – \smile, ⊂ – \subset, ⊃ – \supset, √ – \sqrt or \surd, § – \S, ♯ – \sharp, ∑ – \sum, × – \times, → – \to, ∴ – \therefore, ↑ – \uparrow, ℘ – \wp.

    +@end html +@end ifhtml +@ifnothtml +В частности, распознаются греческие буквы: @math{\alpha} -- \alpha, @math{\beta} -- \beta, @math{\gamma} -- \gamma, @math{\delta} -- \delta, @math{\epsilon} -- \epsilon, @math{\eta} -- \eta, @math{\iota} -- \iota, @math{\chi} -- \chi, @math{\kappa} -- \kappa, @math{\lambda} -- \lambda, @math{\mu} -- \mu, @math{\nu} -- \nu, @math{o} -- \o, @math{\omega} -- \omega, @math{\phi} -- \phi, @math{\pi} -- \pi, @math{\psi} -- \psi, @math{\rho} -- \rho, @math{\sigma} -- \sigma, @math{\theta} -- \theta, @math{\tau} -- \tau, @math{\upsilon} -- \upsilon, @math{\xi} -- \xi, @math{\zeta} -- \zeta, @math{\varsigma} -- \varsigma, @math{\varepsilon} -- \varepsilon, @math{\vartheta} -- \vartheta, @math{\varphi} -- \varphi, A -- \Alpha, B -- \Beta, @math{\Gamma} -- \Gamma, @math{\Delta} -- \Delta, E -- \Epsilon, H -- \Eta, I -- \Iota, C -- \Chi, K -- \Kappa, @math{\Lambda} -- \Lambda, M -- \Mu, N -- \Nu, O -- \O, @math{\Omega} -- \Omega, @math{\Phi} -- \Phi, @math{\Pi} -- \Pi, @math{\Psi} -- \Psi, R -- \Rho, @math{\Sigma} -- \Sigma, @math{\Theta} -- \Theta, T -- \Tau, @math{\Upsilon} -- \Upsilon, @math{\Xi} -- \Xi, Z -- \Zeta. + +Еще примеры наиболее общеупотребительных TeX-их символов: @math{\angle} -- \angle, @math{\aleph} -- \aleph, @math{\cdot} -- \cdot, @math{\clubsuit} -- \clubsuit, @math{\cup} -- \cup, @math{\cap} -- \cap, @math{\diamondsuit} -- \diamondsuit, @math{\diamond} -- \diamond, @math{\div} -- \div, @math{\downarrow} -- \downarrow, @math{\dag} -- \dag, @math{\ddag} -- \ddag, @math{\equiv} -- \equiv, @math{\exists} -- \exists, @math{\frown} -- \frown, @math{\flat} -- \flat, @math{\ge} -- \ge, @math{\geq} -- \geq, @math{\gets} -- \gets, @math{\heartsuit} -- \heartsuit, @math{\infty} -- \infty, @math{\in} -- \in, @math{\int} -- \int, @math{\Im} -- \Im, @math{\langle} -- \langle, @math{\le} -- \le, @math{\leq} -- \leq, @math{\leftarrow} -- \leftarrow, @math{\mp} -- \mp, @math{\nabla} -- \nabla, @math{\ne} -- \ne, @math{\neq} -- \neq, @math{\natural} -- \natural, @math{\oint} -- \oint, @math{\odot} -- \odot, @math{\oplus} -- \oplus, @math{\partial} -- \partial, @math{\parallel} -- \parallel, @math{\perp} -- \perp, @math{\pm} -- \pm, @math{\propto} -- \propto, @math{\prod} -- \prod, @math{\Re} -- \Re, @math{\rightarrow} -- \rightarrow, @math{\rangle} -- \rangle, @math{\spadesuit} -- \spadesuit, @math{\sim} -- \sim, @math{\smile} -- \smile, @math{\subset} -- \subset, @math{\supset} -- \supset, @math{\surd} -- \sqrt or \surd, @math{\S} -- \S, @math{\sharp} -- \sharp, @math{\sum} -- \sum, @math{\times} -- \times, @math{\to} -- \to, @math{\uparrow} -- \uparrow, @math{\wp} -- \wp and so on. +@end ifnothtml + +Размер текста может быть задан явно (если @var{size}>0) или относительно базового размера шрифта для рисунка |@var{size}|*@var{FontSize} при @var{size}<0. Значение @var{size}=0 указывает, что соответствующая строка выводиться не будет. Базовый размер шрифта измеряется во внутренних единицах. Специальные функции @code{SetFontSizePT(), SetFontSizeCM(), SetFontSizeIN()} позволяют задавать его в более ``привычных'' единицах. + +@node Textual formulas, , Font styles, General concepts +@subsection Текстовые формулы + +@cindex Текстовые формулы + +MathGL имеет быстрый парсер текстовых формул +@ifclear UDAV + (@pxref{mglFormula class}) +@end ifclear +, понимающий большое число функций и операций. Базовые операции: @samp{+} -- сложение, @samp{-} -- вычитание, @samp{*} -- умножение, @samp{/} -- деление, @samp{^} -- возведение в целосичленную степень. Также есть логические операции: @samp{<} -- истина если if x} -- истина если x>y, @samp{=} -- истина если x=y, @samp{&} -- истина если x и y оба не равны нулю, @samp{|} -- истина если x или y не нуль. Логические операции имеют наинизший приоритет и возвращают 1 если истина или 0 если ложно. + +Базовые функции: @samp{sqrt(x)} -- квадратный корень из @var{x}, @samp{pow(x,y)} -- @var{x} в степени @var{y}, @samp{ln(x)} -- натуральный логарифм @var{x}, @samp{lg(x)} -- десятичный логарифм @var{x}, @samp{log(a,x)} -- логарифм по основанию @var{a} от @var{x}, @samp{abs(x)} -- модуль @var{x}, @samp{sign(x)} -- знак @var{x}, @samp{mod(x,y)} -- остаток от деления x на y, @samp{step(x)} -- ступенчатая функция, @samp{int(x)} -- целая часть @var{x}, @samp{rnd} -- случайное число, @samp{pi} -- число +@ifhtml +@html +π = 3.1415926… +@end html +@end ifhtml +@ifnothtml +@math{\pi=3.1415926...} +@end ifnothtml + +Тригонометрические функции: @samp{sin(x)}, @samp{cos(x)}, @samp{tan(x)} (или @samp{tg(x)}). Обратные тригонометрические функции: @samp{asin(x)}, @samp{acos(x)}, @samp{atan(x)}. Гиперболические функции: @samp{sinh(x)} (или @samp{sh(x)}), @samp{cosh(x)} (или @samp{ch(x)}), @samp{tanh(x)} (или @samp{th(x)}). Обратные гиперболические функции: @samp{asinh(x)}, @samp{acosh(x)}, @samp{atanh(x)}. + +@ifhtml +@html +

    Специальные функции: ‘gamma(x)’ – гамма функция Γ(x) = ∫0 tx-1 exp(-t) dt, ‘psi(x)’ – дигамма функция ψ(x) = Γ′(x)/Γ(x) для x≠0, ‘ai(x)’ – Эйри функция Ai(x), ‘bi(x)’ – Эйри функция Bi(x), ‘cl(x)’ – функция Клаузена, ‘li2(x)’ (или ‘dilog(x)’) – дилогарифм Li2(x) = -ℜ∫0xds log(1-s)/s, ‘sinc(x)’ – функция sinc(x) = sin(πx)/(πx) для любых x, ‘zeta(x)’ – зета функция Римана ζ(s) = ∑k=1k-s для s≠1, ‘eta(x)’ – эта функция η(s) = (1 - 21-s)ζ(s) для произвольного s, ‘lp(l,x)’ – полином Лежандра Pl(x), (|x|≤1, l≥0), ‘w0(x)’, ‘w1(x)’ – функции Ламберта W. Функции W(x) определены как решение уравнения: W exp(W) = x.

    + +

    Экспоненциальные интегралы: ‘ci(x)’ – cos-интеграл Ci(x) = ∫0xdt cos(t)/t, ‘si(x)’ – sin-интеграл Si(x) = ∫0xdt sin(t)/t, ‘erf(x)’ – функция ошибки erf(x) = (2/√π) ∫0xdt exp(-t2) , ‘ei(x)’ – интеграл Ei(x) = -PV(∫-xdt exp(-t)/t) (где PV обозначает главное значение), ‘e1(x)’ – интеграл E1(x) = ℜ∫1dt exp(-xt)/t, ‘e2(x)’ – интеграл E2(x) = ℜ∫1∞dt exp(-xt)/t2, ‘ei3(x)’ – интеграл Ei3(x) = ∫0xdt exp(-t3) для x≥0.

    + +

    Функции Бесселя: ‘j(nu,x)’ – функция Бесселя первого рода, ‘y(nu,x)’ – функция Бесселя второго рода, ‘i(nu,x)’ – модифицированная функция Бесселя первого рода, ‘k(nu,x)’ – модифицированная функция Бесселя второго рода.

    + +

    Эллиптические интегралы: ‘ee(k)’ – полный эллиптический интеграл E(k) = E(π/2,k), ‘ek(k)’ – полный эллиптический интеграл K(k) = F(π/2,k), ‘e(phi,k)’ – эллиптический интеграл E(φ,k) = ∫0φdt √(1 - k2sin2(t)), ‘f(phi,k)’ – эллиптический интеграл F(φ,k) = ∫0φdt 1/√(1 - k2sin2(t))

    +@end html +@end ifhtml +@ifnothtml +Специальные функции: @samp{gamma(x)} -- гамма функция @math{\Gamma(x) = \int_0^\infty dt t^@{x-1@} \exp(-t)} , @samp{psi(x)} -- дигамма функция @math{\psi(x) = \Gamma’(x)/\Gamma(x)} для x!=0, @samp{ai(x)} -- Эйри функция Ai(x), @samp{bi(x)} -- Эйри функция Bi(x), @samp{cl(x)} -- функция Клаузена, @samp{li2(x)} (или @samp{dilog(x)}) -- дилогарифм @math{Li_2(x) = - \Re \int_0^x ds \log(1-s)/s}, @samp{sinc(x)} -- функция @math{sinc(x) = \sin(\pi x) / (\pi x)} для любых x, @samp{zeta(x)} -- зета функция Римана @math{\zeta(s) = \sum_@{k=1@}^\infty k^@{-s@}} для s!=1, @samp{eta(x)} -- эта функция @math{\eta(s) = (1-2^@{1-s@}) \zeta(s)} для произвольного s, @samp{lp(l,x)} -- полином Лежандра @math{P_l(x)}, (|x|<=1, l>=0), @samp{w0(x)}, @samp{w1(x)} -- функции Ламберта @var{W}. Функции W(x) определены как решение уравнения @math{W \exp(W) = x}. + +Экспоненциальные интегралы: @samp{ci(x)} -- cos-интеграл @math{Ci(x) = \int_0^x dt \cos(t)/t}, @samp{si(x)} -- sin-интеграл @math{Si(x) = \int_0^x dt \sin(t)/t}, @samp{erf(x)} -- функция ошибки @math{erf(x) = (2/\sqrt(\pi)) \int_0^x dt \exp(-t^2)}, @samp{ei(x)} -- интеграл @math{Ei(x) := - PV(\int_@{-x@}^\infty dt \exp(-t)/t)} (где PV обозначает главное значение), @samp{e1(x)} -- интеграл @math{E_1(x) := Re \int_1^\infty dt \exp(-xt)/t} , @samp{e2(x)} -- интеграл @math{E_2(x) := Re \int_1^\infty dt \exp(-xt)/t^2}, @samp{ei3(x)} -- интеграл @math{Ei_3(x) = \int_0^x dt \exp(-t^3)} для x>=0. + +Функции Бесселя: @samp{j(nu,x)} -- функция Бесселя первого рода, @samp{y(nu,x)} -- функция Бесселя второго рода, @samp{i(nu,x)} -- модифицированная функция Бесселя первого рода, @samp{k(nu,x)} -- модифицированная функция Бесселя второго рода. + +Эллиптические интегралы: @samp{ee(k)} -- полный эллиптический интеграл @math{E(k) = E(\pi/2, k)}, @samp{ek(k)} -- полный эллиптический интеграл @math{K(k) = F(\pi/2, k)}, @samp{e(phi,k)} -- эллиптический интеграл @math{E(\phi,k) = \int_0^\phi dt \sqrt((1 - k^2 \sin^2(t)))}, @samp{f(phi,k)} -- эллиптический интеграл @math{F(\phi,k) = \int_0^\phi dt 1/\sqrt((1 - k^2 \sin^2(t)))}. +@end ifnothtml + +Функции Якоби: @samp{sn(u,m)}, @samp{cn(u,m)}, @samp{dn(u,m)}, @samp{sc(u,m)}, @samp{sd(u,m)}, @samp{ns(u,m)}, @samp{cs(u,m)}, @samp{cd(u,m)}, @samp{nc(u,m)}, @samp{ds(u,m)}, @samp{dc(u,m)}, @samp{nd(u,m)}. + +Некоторые из функций могут быть недоступны если флаг NO_GSL был определен при компиляции библиотеки MathGL. + +При разборе формул нет различия между верхним и нижним регистром. Если аргумент лежит вне области определения функции, то возвращается NaN. + diff --git a/texinfo/core_en.texi b/texinfo/core_en.texi index 4a3526b..0103d78 100644 --- a/texinfo/core_en.texi +++ b/texinfo/core_en.texi @@ -1,5 +1,4 @@ @c ------------------------------------------------------------------ -@node MathGL core, Plotter classes, Examples, Top @chapter MathGL core @cindex mglGraph @@ -82,7 +81,7 @@ Flag which temporary switches transparency on/off for the plot. This is the same @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} SetTranspType (@code{int} type) @deftypefnx {C function} @code{void} mgl_set_transp_type (@code{HMGL} gr, @code{int} enable) -Set the transparency type. Normal transparency (@samp{0}) -- below things is less visible than upper ones. It does not look well in OpenGL mode (mglGraphGL) for several surfaces. Glass-like transparency (@samp{1}) -- below and upper things are commutable and just decrease intensity of light by RGB channel. Lamp-like transparency (@samp{2}) -- below and upper things are commutable and are the source of some additional light. I recommend to set @code{SetAlphaDef(0.3)} or less for lamp-like transparency. +Set the transparency type. Normal transparency (@samp{0}) -- below things is less visible than upper ones. It does not look well in OpenGL mode (mglGraphGL) for several surfaces. Glass-like transparency (@samp{1}) -- below and upper things are commutable and just decrease intensity of light by RGB channel. Lamp-like transparency (@samp{2}) -- below and upper things are commutable and are the source of some additional light. I recommend to set @code{SetAlphaDef(0.3)} or less for lamp-like transparency. @xref{Normal transparency}, @ref{Glass-like transparency}, @ref{Lamp-like transparency}. @end deftypefn @deftypecv {@emph{Obsolete option}} mglGraph @code{float} AlphaDef @@ -237,7 +236,7 @@ Flag which determines how points outside bounding box are drawn. If it is @code{ @end deftypefn @float -@image{png_static/cut, 7cm} +@image{cut, 7cm} @caption{Left figure is drawn with parameter @code{Cut=false}. Right one is drawn with parameter @code{Cut=true}.} @end float @@ -377,8 +376,9 @@ Number of actual colors in palette. See @code{SetPalette()}. @subsection Error handling @cindex Message -@cindex WarnCode +@c @cindex WarnCode @cindex SetWarn +@cindex GetWarnCode There are 2 variables which indicate the warnings/errors presence during plot creation. Normally user should set it to zero by @code{SetWarn(0);} before plotting and check if @var{WarnCode} is not zero after plotting. Only last warning will be saved. All warnings/errors produced by MathGL is not critical -- the plot just will not be drawn. @@ -390,8 +390,9 @@ Set warning code and corresponding message from function @var{who}. Normally you Pointer to buffer for writing messages about matters why some plot are not drawn. Set to NULL to disable messages. The buffer length must be at least 1024. If Message[0]==0 then there are no messages @end deftypecv -@deftypecv {General option (C++)} mglGraph @code{int} WarnCode -Numerical ID of warning about the not drawn plot. Possible values are: +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{int} GetWarnCode () +@deftypefnx {C function} @code{int} mgl_get_warn_code (@code{HMGL} gr) +Return the numerical ID of warning about the not drawn plot. Possible values are: @table @code @item mglWarnNone=0 Everything OK @@ -424,6 +425,10 @@ Setsize: size(s) is zero or negative @item mglWarnFmt Format is not supported for that build @end table +@end deftypefn + +@deftypecv {Obsolete option} mglGraph @code{int} WarnCode +Numerical ID of warning about the not drawn plot. @end deftypecv @c ================================================================== @@ -577,7 +582,7 @@ Flag for automatic shifting of axes origin @var{Org} if it lies out of range @va @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} SetFunc (@code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ=@code{""}, @code{const char *}EqA=@code{""}) @deftypefnx {C function} @code{void} mgl_set_func (@code{HMGL} gr, @code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ) @deftypefnx {C function} @code{void} mgl_set_func_ext (@code{HMGL} gr, @code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ, @code{const char *}EqA) -Sets transformation formulas for curvilinear coordinate. Each string should contain mathematical expression for real coordinate depending on internal coordinates x, y, z. For example, the cylindrical coordinates are introduced as @code{Axis("x*cos(y)", "x*sin(y)", "z");}. For removing of formulas the corresponding parameter should be empty or @code{NULL}. Using transformation formulas will slightly slowing the program. Parameter @var{EqA} set the similar transformation formula for color scheme. @xref{mglFormula class}. +Sets transformation formulas for curvilinear coordinate. Each string should contain mathematical expression for real coordinate depending on internal coordinates @samp{x}, @samp{y}, @samp{z} and @samp{a} or @samp{c} for colorbar. For example, the cylindrical coordinates are introduced as @code{Axis("x*cos(y)", "x*sin(y)", "z");}. For removing of formulas the corresponding parameter should be empty or @code{NULL}. Using transformation formulas will slightly slowing the program. Parameter @var{EqA} set the similar transformation formula for color scheme. @xref{Textual formulas}. @end deftypefn @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} SetCoor (@code{int} how) @@ -683,6 +688,8 @@ The position of common multiplier/component on the axis. See @code{SetTuneTicks( @cindex RestoreM @cindex View @cindex ColumnPlot +@cindex Push +@cindex Pop These functions control how and where further plotting will be placed. There is a curtain order of calling of these functions for the better plot view. First one should be SubPlot() or InPlot() for specifying the place. After it a Rotate() and Aspect(). And finally any other plotting functions may be called. Alternatevely you can use ColumnPlot() for position plots in the column one by another without gap between plot axis (bounding boxes). @@ -692,15 +699,21 @@ These functions control how and where further plotting will be placed. There is Puts further plotting in a @var{m}-th cell of @var{nx}*@var{ny} grid of the whole frame area. This function set off any aspects or rotations. So it should be used first for creating the subplot. From the aesthetical point of view it is not recommended to use this function with different matrices in the same frame. The position of the cell can be shifted from its default position by relative size @var{dx}, @var{dy}. @end deftypefn +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} SubPlot (@code{int} nx, @code{int} ny, @code{int} m, @code{const char *}style) +@deftypefnx {C function} @code{void} mgl_subplot_s (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{const char *}style) +The same as previous but space reserved for axis/colorbar is saved only if @var{style} contain: @samp{L} or @samp{<} -- at left side, @samp{R} or @samp{>} -- at right side, @samp{A} or @samp{^} -- at top side, @samp{U} or @samp{_} -- at bottom side. +@end deftypefn + @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} InPlot (@code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2, @code{bool} rel=@code{false}) @deftypefnx {C function} @code{void} mgl_inplot (@code{HMGL} gr, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2) @deftypefnx {C function} @code{void} mgl_relplot (@code{HMGL} gr, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2) Puts further plotting in some region of the whole frame surface. This function allows one to create a plot in arbitrary place of the screen. The position is defined by rectangular coordinates [@var{x1}, @var{x2}]*[@var{y1}, @var{y2}]. The coordinates @var{x1}, @var{x2}, @var{y1}, @var{y2} are normalized to interval [0, 1]. If parameter @var{rel}=@code{true} then the relative position to current SubPlot() (or last InPlot() with @var{rel}=@code{false}) is used. This function set off any aspects or rotations. So it should be used first for creating subplot. @end deftypefn -@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} ColumnPlot (@code{int} num, @code{int} ind) +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} ColumnPlot (@code{int} num, @code{int} ind, @code{float} d=@code{0}) @deftypefnx {C function} @code{void} mgl_columnplot (@code{HMGL} gr, @code{int} num, @code{int} ind) -Puts further plotting in @var{ind}-th cell of column with @var{num} cells. The position is relative to previous SubPlot() call (or InPlot() with @var{rel}=@code{false}). @sref{ColumnPlot sample} +@deftypefnx {C function} @code{void} mgl_columnplot_d (@code{HMGL} gr, @code{int} num, @code{int} ind, @code{float} d) +Puts further plotting in @var{ind}-th cell of column with @var{num} cells. The position is relative to previous SubPlot() call (or InPlot() with @var{rel}=@code{false}). Parameter @var{d} set extra gap between cells. @sref{ColumnPlot sample} @end deftypefn @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} StickPlot (@code{int} num, @code{int} ind, @code{float} tet, @code{float} phi) @@ -733,10 +746,15 @@ Add (switch on) the perspective to plot. The parameter @math{a ~ 1/z_@{eff@} \in Clears transformation matrix. This function clears all previous effects of Aspect(), SubPlot(), InPlot() or Rotate() functions. It is equivalent to the call of @code{InPlot(0,1,0,1,rel)}. @end deftypefn -@deftypefn {Method on @code{mglGraph} (C++)} @code{void} RestoreM () -Restore transformation matrix after last @code{InPlot()}. This function clears all previous effects of Aspect(), SubPlot(), InPlot() or Rotate() functions. It is useful to restore back the transformation matrix after @code{Identity()} call. +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Push () +@deftypefnx {C function} @code{void} mgl_mat_push (@code{HMGL} gr) +Push transformation matrix into stack. Later you can restore its current state by Pop() function. Stack can keep up to 10 matrices. @end deftypefn +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Pop () +@deftypefnx {C function} @code{void} mgl_mat_pop (@code{HMGL} gr) +Pop (restore last 'pushed') transformation matrix into stack. +@end deftypefn @c ################################################################## @node Export to file, Primitives drawing, Transformation matrix, MathGL core @@ -784,12 +802,12 @@ Exports current frame to BMP file. Parameter @var{fname} specifies the file name @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} WriteEPS (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {C function} @code{void} mgl_write_eps (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) -Exports current frame to EPS file. The vector representation is used if possible. So it is not recommended for the export of large data plot. It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file. By default there is no description added. +Exports current frame to EPS file. The vector representation is used if possible. So it is not recommended for the export of large data plot. It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file. By default there is no description added. If file name is terminated by @samp{z} (for example, @samp{fname.eps.gz}) then file will be compressed in gzip format. @end deftypefn @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} WriteSVG (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {C function} @code{void} mgl_write_svg (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) -Exports current frame to SVG (Scalable Vector Graphics) file. The vector representation is used. In difference of EPS format, SVG format support transparency that allows to correctly draw half-transparent plot (like SurfA(), Surf3A(), CloudQ() or CloudP()). Note, the output file may be too large for graphic of large data array (especially for surfaces). It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name). +Exports current frame to SVG (Scalable Vector Graphics) file. The vector representation is used. In difference of EPS format, SVG format support transparency that allows to correctly draw half-transparent plot (like SurfA(), Surf3A(), CloudQ() or CloudP()). Note, the output file may be too large for graphic of large data array (especially for surfaces). It is better to use bitmap format (for example PNG or JPEG). However, program has no internal limitations for size of output file. Parameter @var{fname} specifies the file name, @var{descr} adds description to file (default is file name). If file name is terminated by @samp{z} (for example, @samp{fname.svgz}) then file will be compressed in gzip format. @end deftypefn @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} WriteIDTF (@code{const char *}fname, @code{const char *}descr=@code{""}) @@ -918,9 +936,9 @@ Draw a set of triangles (or lines if @var{trig}=@code{NULL}) for glyph which is @cindex Text @cindex Title -These functions draw the text. There are functions for drawing text in arbitrary place, in arbitrary direction and along arbitrary curve. The class mglFont (@pxref{mglFont class}) is used for low-level string parsing and printing. It can use arbitrary font-faces and parse many TeX commands (for detail @pxref{mglFont class}). All these functions have 2 variant: for printing 8-bit text (@code{char *}) and for printing Unicode text (@code{wchar_t *}). In first case the conversion in current locale is used. So sometimes you need to specify it by @code{setlocale()} function. The size argument control the size of text: if positive it give the value, if negative it give the value relative to @var{FontSize}. The font type (STIX, arial, courier, times and so on) can be selected by function SetFont(), GetFont(). @xref{Font settings}. +These functions draw the text. There are functions for drawing text in arbitrary place, in arbitrary direction and along arbitrary curve. The class mglFont (@pxref{mglFont class}) is used for low-level string parsing and printing. It can use arbitrary font-faces and parse many TeX commands (for detail @pxref{Font styles}). All these functions have 2 variant: for printing 8-bit text (@code{char *}) and for printing Unicode text (@code{wchar_t *}). In first case the conversion in current locale is used. So sometimes you need to specify it by @code{setlocale()} function. The size argument control the size of text: if positive it give the value, if negative it give the value relative to @var{FontSize}. The font type (STIX, arial, courier, times and so on) can be selected by function SetFont(), GetFont(). @xref{Font settings}. -The font parameters are described by string. This string may contain several characters of font type (@samp{rbiwou}) and/or align (@samp{LRC}) specification. Also it may contain the text color @samp{wkrgbcymhRGBCYMHW} (@pxref{mglColor class}) after symbol @samp{:}. The font types are: @samp{r} -- roman font, @samp{i} -- italic style, @samp{b} -- bold style, @samp{w} -- wired style, @samp{o} -- over-lined text, @samp{u} -- underlined text. By default roman font is used. The align types are: @samp{L} -- align left (default), @samp{C} -- align center, @samp{R} -- align right. For example, string @samp{iC:b} correspond to italic font style for centered text which printed by blue color. +The font parameters are described by string. This string may contain several characters of font type (@samp{rbiwou}) and/or align (@samp{LRC}) specification. Also it may contain the text color @samp{wkrgbcymhRGBCYMHW} (@pxref{Line styles}) after symbol @samp{:}. The font types are: @samp{r} -- roman font, @samp{i} -- italic style, @samp{b} -- bold style, @samp{w} -- wired style, @samp{o} -- over-lined text, @samp{u} -- underlined text. By default roman font is used. The align types are: @samp{L} -- align left (default), @samp{C} -- align center, @samp{R} -- align right. For example, string @samp{iC:b} correspond to italic font style for centered text which printed by blue color. If string contains symbols @samp{aA} then text is printed at arbitrary position @{@var{x}, @var{y}@} (supposed to be in range [0,1]) of subplot (for @samp{a}) or picture (for @samp{A}). @@ -975,7 +993,7 @@ Print string @var{text} as title of the picture (at the top of the picture). Can @deftypefnx {C function} @code{void} mgl_text_y (@code{HMGL} gr, @code{const HMDT} y, @code{const char *}text, @code{const char *}font, float size) @deftypefnx {C function} @code{void} mgl_text_xy (@code{const HMDT} x, @code{const HMDT} y, @code{const char *}text, @code{const char *}font, float size) @deftypefnx {C function} @code{void} mgl_text_xyz (@code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}text, @code{const char *}font, float size) -The function draws @var{text} along the curve between points @{@var{x}[i], @var{y}[i], @var{z}[i]@} by font style @var{font} and with size @var{size}. The string @var{font} may contain symbols @samp{t} for printing the text under the curve (default), or @samp{T} for printing the text above the curve. The sizes of 1st dimension must be equal for all arrays @var{x.nx=y.nx=z.nx}. If array @var{x} is not specified then its an automatic array is used with values equidistantly distributed in interval [@var{Min}.x, @var{Max}.x] (@pxref{Ranges (bounding box)}). If array @var{z} is not specified then @var{z}[i] = @var{zVal} is used. @sref{Text sample} +The function draws @var{text} along the curve between points @{@var{x}[i], @var{y}[i], @var{z}[i]@} by font style @var{font} and with size @var{size}. The string @var{font} may contain symbols @samp{t} for printing the text under the curve (default), or @samp{T} for printing the text above the curve. The sizes of 1st dimension must be equal for all arrays @code{x.nx=y.nx=z.nx}. If array @var{x} is not specified then its an automatic array is used with values equidistantly distributed in interval [@var{Min}.x, @var{Max}.x] (@pxref{Ranges (bounding box)}). If array @var{z} is not specified then @var{z}[i] = @var{zVal} is used. @sref{Text sample} @end deftypefn @c ################################################################## @@ -991,23 +1009,27 @@ These functions draw the ``things for measuring'', like axis with ticks, colorba @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Axis (@code{const char *}dir=@code{"xyz"}, @code{bool} adjust=@code{false}) @deftypefnx {C function} @code{void} mgl_axis (@code{HMGL} gr, @code{const char *}dir) -Draws axes with ticks (@pxref{Axis settings}) in directions determined by string parameter @var{dir}.If string contain the symbol @samp{_} then tick labels are not printed. Font for ticks labels is determined by @var{FontDef} (@pxref{Font settings}). Ticks will be adjusted if @var{adjust}=@code{true} (by call of @code{AdjustTicks()}). +Draws axes with ticks (@pxref{Axis settings}) in directions determined by string parameter @var{dir}.If string contain the symbol @samp{_} then tick labels are not printed. Font for ticks labels is determined by @var{FontDef} (@pxref{Font settings}). Ticks will be adjusted if @var{adjust}=@code{true} (by call of @code{AdjustTicks()}). You may specified an arrow at the end of axis (see @pxref{Line styles}) @end deftypefn @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Colorbar (@code{const char *}sch=@code{""}, @code{int} where=@code{0}) @deftypefnx {C function} @code{void} mgl_colorbar (@code{HMGL} gr, @code{const char *}sch, @code{int} where) -Draws colorbar with color scheme @var{sch} (current scheme if @code{sch=""}) at edge of plot. Parameter @var{where} specifies the position of the colorbar: @samp{0} - at right (default), @samp{1} - at left, @samp{2} - at top, @samp{3} - at bottom. @sref{Dens sample} +Draws colorbar with color scheme @var{sch} (current scheme if @code{sch=""}) at edge of plot. Parameter @var{where} specifies the position of the colorbar: @samp{0} - at right (default), @samp{1} - at left, @samp{2} - at top, @samp{3} - at bottom. If string @var{sch} contains @samp{<>^_} then the parameter @var{pos} is defined as: @code{pos=0} for @samp{>} (right), @code{pos=1} for @samp{<} (left), @code{pos=2} for @samp{^} (top), @code{pos=3} for @samp{_} (bottom). If string have @samp{A} then absolute (relative to picture) coordinates is used. @sref{Dens sample} +@end deftypefn + +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Colorbar (@code{const mglData &}v, @code{const char *}sch=@code{""}, @code{int} where=@code{0}) +@deftypefnx {C function} @code{void} mgl_colorbar_val (@code{HMGL} gr, @code{const HMDT} v, @code{const char *}sch, @code{int} where) +The same as previous but with sharp colors @var{sch} (current palette if @code{sch=""}) for values @var{v}. @sref{ContD sample} @end deftypefn @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Colorbar (@code{const char *}sch, @code{int} where, @code{float} x, @code{float} y, @code{float} w, @code{float} h) -@deftypefnx {Method on @code{mglGraph} (C++)} @code{void} Colorbar (@code{int} where, @code{float} x, @code{float} y, @code{float} w, @code{float} h) +@deftypefnx {Method on @code{mglGraph} (C++, Python)} @code{void} Colorbar (@code{int} where, @code{float} x, @code{float} y, @code{float} w, @code{float} h) @deftypefnx {C function} @code{void} mgl_colorbar_ext (@code{HMGL} gr, @code{const char *}sch, @code{int} where, @code{float} x, @code{float} y, @code{float} w, @code{float} h) -Draws colorbar with color scheme @var{sch} (current scheme if not specified) at arbitrary position of subplot @{@var{x}, @var{y}@} (supposed to be in range [0,1]). Parameter @var{where} specifies the position of colorbar labels: @samp{0} - at left, @samp{1} - at right, @samp{2} - at bottom, @samp{3} - at top. Parameters @var{w}, @var{h} set the relative width and height of the colorbar. +The same as first one but at arbitrary position of subplot @{@var{x}, @var{y}@} (supposed to be in range [0,1]). Parameters @var{w}, @var{h} set the relative width and height of the colorbar. @end deftypefn -@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Colorbar (@code{const mglData &}v, @code{const char *}sch=@code{""}, @code{int} where=@code{0}) -@deftypefnx {C function} @code{void} mgl_colorbar_val (@code{HMGL} gr, @code{const HMDT} v, @code{const char *}sch, @code{int} where) -Draws colorbar with sharp colors @var{sch} (current palette if @code{sch=""}) for values @var{v} at edge of plot. Parameter @var{where} specifies the position of the colorbar: @samp{0} - at right (default), @samp{1} - at left, @samp{2} - at top, @samp{3} - at bottom. @sref{ContD sample} +@deftypefn {Method on @code{mglGraph} (C++)} @code{void} Colorbar (@code{const mglData &}v, @code{const char *}sch, @code{int} where, @code{float} x, @code{float} y, @code{float} w, @code{float} h) +The same as previous but with sharp colors @var{sch} (current palette if @code{sch=""}) for values @var{v}. @sref{ContD sample} @end deftypefn @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Grid (@code{const char *}dir=@code{"xyz"}, @code{const char *}pen=@code{"B-"}) @@ -1023,8 +1045,8 @@ Draws grid lines perpendicular to direction determined by string parameter @var{ Draws bounding box outside the plotting volume with color @var{col}. @end deftypefn -@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Label (@code{char} dir, @code{const char *}text, @code{float} pos=@code{+1}, @code{float} size=@code{-1.4}, @code{float} shift=@code{0}) -@deftypefnx {Method on @code{mglGraph} (C++)} @code{void} Label (@code{char} dir, @code{const wchar_t *}text, @code{float} pos=@code{+1}, @code{float} size=@code{-1.4}, @code{float} shift=@code{0}) +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Label (@code{char} dir, @code{const char *}text, @code{float} pos=@code{0}, @code{float} size=@code{-1.4}, @code{float} shift=@code{0}) +@deftypefnx {Method on @code{mglGraph} (C++)} @code{void} Label (@code{char} dir, @code{const wchar_t *}text, @code{float} pos=@code{0}, @code{float} size=@code{-1.4}, @code{float} shift=@code{0}) @deftypefnx {C function} @code{void} mgl_label (@code{HMGL} gr, @code{char} dir, @code{const char *}text) @deftypefnx {C function} @code{void} mgl_label_ext (@code{HMGL} gr, @code{char} dir, @code{const char *}text, @code{float} pos, @code{float} size, @code{float} shift) @deftypefnx {C function} @code{void} mgl_labelw_ext (@code{HMGL} gr, @code{char} dir, @code{const wchar_t *}text, @code{float} pos, @code{float} size, @code{float} shift) @@ -1037,8 +1059,10 @@ Prints the label @var{text} for axis @var{dir}=@samp{x},@samp{y},@samp{z},@samp{ @cindex Legend @cindex AddLegend @cindex ClearLegend +@cindex SetLegendBox +@cindex SetLegendMarks -These functions draw legend to the graph (useful for @ref{1D plotting}). Legend entry is a pair of strings: one for style of the line, another one with description text (with included TeX parsing). The arrays of strings may be used directly or by accumulating first to the internal arrays (by function AddLegend()) and further plotting it. The position of the legend can be selected automatic or manually. Parameters @var{font} and @var{size} specify the font style and size (@pxref{Font settings}). Parameter @var{llen} set the relative width of the line sample and the text indent. If line style string for entry is empty then the corresponding text is printed without indent. @sref{Legend sample} +These functions draw legend to the graph (useful for @ref{1D plotting}). Legend entry is a pair of strings: one for style of the line, another one with description text (with included TeX parsing). The arrays of strings may be used directly or by accumulating first to the internal arrays (by function AddLegend()) and further plotting it. The position of the legend can be selected automatic or manually. Parameters @var{font} and @var{size} specify the font style and size (@pxref{Font settings}). Parameter @var{llen} set the relative width of the line sample and the text indent. If line style string for entry is empty then the corresponding text is printed without indent. If string @var{font} contains symbol @samp{A} then legend coordinates set position in the picture (not in the current subplot). @sref{Legend sample} @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Legend (@code{int} where=@code{0x3}, @code{const char *}font=@code{"rL"}, @code{float} size=@code{-0.8}, @code{float} llen=@code{0.1}) @deftypefnx {C function} @code{void} mgl_legend (@code{HMGL} gr, @code{int} where, @code{const char *}font, @code{float} size, @code{float} llen) @@ -1075,6 +1099,11 @@ Clears saved legend strings. Switch on/off drawing box near legend. By default (=@code{true}) box is drawn. @end deftypefn +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} SetLegendMarks (@code{int} num) +@deftypefnx {C function} @code{void} mgl_set_legend_marks (@code{HMGL} gr, @code{int} num) +Set the number of marks in the legend. By default 1 mark is used. +@end deftypefn + @deftypecv {@emph{Obsolete option}} mglGraph @code{bool} LegendBox Switch on/off drawing box near legend. See @code{SetLegendBox()}. @end deftypecv @@ -1083,7 +1112,7 @@ Switch on/off drawing box near legend. See @code{SetLegendBox()}. @node 1D plotting, 2D plotting, Legend, MathGL core @section 1D plotting -These functions perform plotting of 1D data. 1D means that data depended from only 1 parameter like parametric curve @{x(i),y(i),z(i)@}, i=1...n. There are 5 generally different types of data representations: simple line plot (Plot), line plot with filling under it (Area), stairs plot (Step), bar plot (Bars, Barh) and vertical lines (Stem). Each type of plotting has similar interface. There are 3D version and two 2D versions. One of last requires single array. The parameters of line and marks are specified by the string argument. If the string parameter is "" then solid line with color from palette Pal is used (@pxref{Palette and colors}). Also there are some special 1d plots having slightly different interface: surface of curve rotation (Torus), chart (Chart) and error boxes (Error), marks with variable size (Mark), tubes (Tube) and so on. @xref{Line styles}. +These functions perform plotting of 1D data. 1D means that data depended from only 1 parameter like parametric curve @{x(i),y(i),z(i)@}, i=1...n. There are 5 generally different types of data representations: simple line plot (Plot), line plot with filling under it (Area), stairs plot (Step), bar plot (Bars, Barh) and vertical lines (Stem). Each type of plotting has similar interface. There are 3D version and two 2D versions. One of last requires single array. The parameters of line and marks are specified by the string argument. If the string parameter is "" then solid line with color from palette Pal is used (@pxref{Palette and colors}). Also there are some special 1d plots having slightly different interface: surface of curve rotation (Torus), chart (Chart) and error boxes (Error), marks with variable size (Mark), tubes (Tube) and so on. @xref{Line styles}. @sref{1D plot sample} @menu @@ -1110,7 +1139,7 @@ These functions perform plotting of 1D data. 1D means that data depended from on @subsection Plot @cindex Plot -These functions draw continuous lines between points. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @var{x.nx=y.nx=z.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). See also @ref{Area}, @ref{Step}, @ref{Stem}, @ref{Tube}, @ref{Mark}, @ref{Error}, @ref{Belt}, @ref{Tens}. @sref{Plot sample} +These functions draw continuous lines between points. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @code{x.nx=y.nx=z.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). See also @ref{Area}, @ref{Step}, @ref{Stem}, @ref{Tube}, @ref{Mark}, @ref{Error}, @ref{Belt}, @ref{Tens}. @sref{Plot sample} @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Plot (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""}) @deftypefnx {C function} @code{void} mgl_plot_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}pen) @@ -1127,13 +1156,6 @@ The function draws continuous lines between points @{@var{x}[i], @var{y}[i]@} in The function draws continuous lines between points @{@var{x}[i], @var{y}[i]@} in plane @var{z}=@var{zVal} (default in plane @var{z}=@var{Min.z}), where @var{x}[i] values are equidistantly distributed in interval [@var{Min}.x, @var{Max}.x]. @end deftypefn -@deftypefn {Method on @code{mglGraph} (C++)} @code{void} Plot2 (@code{const mglData &}a, @code{const char *}pen=@code{""}, @code{float} zVal=@code{NAN}) -The function draws continuous lines between points @{@var{x}[i], @var{y}[i]@} in plane @var{z}=@var{zVal} (default in plane @var{z}=@var{Min.z}), where @var{x}=@var{a}(2*k,:), @var{y}=@var{a}(2*k+1,:), k \in 0 ... @var{a.ny}/2. This function is obsolete -- use Plot() and SubData() functions instead. -@end deftypefn -@deftypefn {Method on @code{mglGraph} (C++)} @code{void} Plot3 (@code{const mglData &}a, @code{const char *}pen=@code{""}) -The function draws continuous lines between points @{@var{x}[i], @var{y}[i], @var{z}[i]@} in 3D space, where @var{x}=@var{a}(3*k,:), @var{y}=@var{a}(3*k+1,:), @var{z}=@var{a}(3*k+2,:), k \in 0 ... @var{a.ny}/3. This function is obsolete -- use Plot() and SubData() functions instead. -@end deftypefn - @c ================================================================== @node Radar, Tens, Plot, 1D plotting @subsection Radar @@ -1149,7 +1171,7 @@ This functions draws radar chart which is continuous lines between points locate @subsection Tens @cindex Tens -These functions draw continuous lines between points with color defined by the special array (look like tension plot). The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @var{x.nx=y.nx=z.nx}. String @var{pen} specifies the color scheme (@pxref{Color scheme}) and style and/or width of line (@pxref{Line styles}). By default (@code{pen=""}) solid line with current color scheme is used. See also @ref{Plot}, @ref{Mesh}, @ref{Fall}. @sref{Tens sample} +These functions draw continuous lines between points with color defined by the special array (look like tension plot). The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @code{x.nx=y.nx=z.nx}. String @var{pen} specifies the color scheme (@pxref{Color scheme}) and style and/or width of line (@pxref{Line styles}). By default (@code{pen=""}) solid line with current color scheme is used. See also @ref{Plot}, @ref{Mesh}, @ref{Fall}. @sref{Tens sample} @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Tens (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}pen=@code{""}) @deftypefnx {C function} @code{void} mgl_tens_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}pen) @@ -1171,30 +1193,21 @@ The function draws continuous lines between points @{@var{x}[i], @var{y}[i]@} in @subsection Area @cindex Area -These functions draw continuous lines between points and fills it to axis plane. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @var{x.nx=y.nx=z.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). See also @ref{Plot}, @ref{Bars}, @ref{Stem}. @sref{Area sample} +These functions draw continuous lines between points and fills it to axis plane. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @code{x.nx=y.nx=z.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). Also you can use gradient filling if number of specified colors is equal to 2*number of curves. If string contain symbol @samp{a} then lines are drawn one above another (like summation) -- you can reach the same effect if call @code{y.CumSum("y");} before plot. See also @ref{Plot}, @ref{Bars}, @ref{Stem}. @sref{Area sample} @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Area (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""}) @deftypefnx {C function} @code{void} mgl_area_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}pen) The function draws continuous lines between points @{@var{x}[i], @var{y}[i], @var{z}[i]@} in 3D space and fills it down to @var{z} = Org.z. @end deftypefn -@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Area (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}pen=@code{""}, @code{bool} sum=@code{false}) +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Area (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}pen=@code{""}) @deftypefnx {C function} @code{void} mgl_area_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const char *}pen) -@deftypefnx {C function} @code{void} mgl_area_xys (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const char *}pen) -The function draws continuous lines between points @{@var{x}[i], @var{y}[i]@} in plane @var{z}=@var{zVal} (default in plane @var{z}=@var{Min.z}) and fills it down to @var{y} = Org.y. Parameter @var{sum} set to draw a lines one above another (like summation). Note, you can reach the same effect if call @code{y.CumSum("y");} before plot. +The function draws continuous lines between points @{@var{x}[i], @var{y}[i]@} in plane @var{z}=@var{zVal} (default in plane @var{z}=@var{Min.z}) and fills it down to @var{y} = Org.y. @end deftypefn -@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Area (@code{const mglData &}y, @code{const char *}pen=@code{""}, @code{bool} sum=@code{false}) +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Area (@code{const mglData &}y, @code{const char *}pen=@code{""}) @deftypefnx {C function} @code{void} mgl_area (@code{HMGL} gr, @code{const HMDT} y, @code{const char *}pen) -@deftypefnx {C function} @code{void} mgl_area_s (@code{HMGL} gr, @code{const HMDT} y, @code{const char *}pen) -The function draws continuous lines between points @{@var{x}[i], @var{y}[i]@} in plane @var{z}=@var{zVal} (default in plane @var{z}=@var{Min.z}) and fills it down to @var{y} = Org.y, where @var{x}[i] values are equidistantly distributed in interval [@var{Min}.x, @var{Max}.x]. Parameter @var{sum} set to draw a lines one above another (like summation). Note, you can reach the same effect if call @code{y.CumSum("y");} before plot. -@end deftypefn - -@deftypefn {Method on @code{mglGraph} (C++)} @code{void} Area2 (@code{const mglData &}a, @code{const char *}pen=@code{""}, @code{float} zVal=@code{NAN}) -The function draws continuous lines between points @{@var{x}[i], @var{y}[i]@} in plane @var{z}=@var{zVal} (default in plane @var{z}=@var{Min.z}) and fills it down to @var{y} = Org.y, where @var{x}=@var{a}(2*k,:), @var{y}=@var{a}(2*k+1,:), k \in 0 ... @var{a.ny}/2. This function is obsolete -- use Area() and SubData() functions instead. -@end deftypefn -@deftypefn {Method on @code{mglGraph} (C++)} @code{void} Area3 (@code{const mglData &}a, @code{const char *}pen=@code{""}) -The function draws continuous lines between points @{@var{x}[i], @var{y}[i], @var{z}[i]@} in 3D space and fills it down to @var{z} = Org.z, where @var{x}=@var{a}(3*k,:), @var{y}=@var{a}(3*k+1,:), @var{z}=@var{a}(3*k+2,:), k \in 0 ... @var{a.ny}/3. This function is obsolete -- use Area() and SubData() functions instead. +The function draws continuous lines between points @{@var{x}[i], @var{y}[i]@} in plane @var{z}=@var{zVal} (default in plane @var{z}=@var{Min.z}) and fills it down to @var{y} = Org.y, where @var{x}[i] values are equidistantly distributed in interval [@var{Min}.x, @var{Max}.x]. @end deftypefn @c ================================================================== @@ -1202,11 +1215,11 @@ The function draws continuous lines between points @{@var{x}[i], @var{y}[i], @va @subsection Region @cindex Region -These functions fill area between 2 curves. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @var{x.nx=y1.nx=y2.nx} and all dimensions of arrays @var{y1} and @var{y2} must be equal too. String @var{pen} specifies the color (@pxref{Line styles}). By default (@code{pen=""}) color from palette is used (@pxref{Palette and colors}). See also @ref{Area}, @ref{Bars}, @ref{Stem}. @sref{Region sample} +These functions fill area between 2 curves. The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @code{x.nx=y1.nx=y2.nx} and all dimensions of arrays @var{y1} and @var{y2} must be equal too. String @var{pen} specifies the color (@pxref{Line styles}). By default (@code{pen=""}) color from palette is used (@pxref{Palette and colors}). Also you can use gradient filling if number of specified colors is equal to 2*number of curves. See also @ref{Area}, @ref{Bars}, @ref{Stem}. @sref{Region sample} @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Region (@code{const mglData &}x, @code{const mglData &}y1, @code{const mglData &}y2, @code{const char *}pen=@code{""}, @code{float} zVal=@code{NAN}, @code{bool} inside=@code{true}) @deftypefnx {C function} @code{void} mgl_region_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y1, @code{const HMDT} y2, @code{const char *}pen, @code{int} inside) -The function fills area between curves @{@var{x}[i], @var{y1}[i]@} and @{@var{x}[i], @var{y2}[i]@} at z=@var{zVal}. +The function fills area between curves @{@var{x}[i], @var{y1}[i]@} and @{@var{x}[i], @var{y2}[i]@} at z=@var{zVal}. Parameter @code{inside=false} set to fill are with y12}). String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{sch} have symbol @samp{#} then grid lines are drawn. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @var{x.nx=z.nx && y.nx=z.ny} or @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Dens}, @ref{Cont}, @ref{Axial}, @ref{ContFXYZ}. @sref{ContF sample} +The function draws solid (or filled) contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z} = @var{zVal} (or for @var{z=v}[k] if @code{zVal==NAN}). Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v} (must be @code{v.nx>2}). String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{sch} have symbol @samp{#} then grid lines are drawn. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Dens}, @ref{Cont}, @ref{Axial}, @ref{ContFXYZ}. @sref{ContF sample} @end deftypefn @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} ContF (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) @@ -1656,7 +1645,7 @@ The same as previous with @var{x}, @var{y} equidistantly distributed in interval @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} ContD (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) @deftypefnx {C function} @code{void} mgl_contd_xy_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal) -The function draws solid (or filled) contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z} = @var{zVal} (or for @var{z=v}[k] if @code{zVal==NAN}) with manual colors. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v} (must be @code{v.nx>2}). String @var{sch} sets the contour colors: the color of k-th contour is determined by character @code{sch[k%strlen(sch)]}. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @var{x.nx=z.nx && y.nx=z.ny} or @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Dens}, @ref{Cont}, @ref{ContF}. @sref{ContD sample} +The function draws solid (or filled) contour lines for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z} = @var{zVal} (or for @var{z=v}[k] if @code{zVal==NAN}) with manual colors. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v} (must be @code{v.nx>2}). String @var{sch} sets the contour colors: the color of k-th contour is determined by character @code{sch[k%strlen(sch)]}. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Dens}, @ref{Cont}, @ref{ContF}. @sref{ContD sample} @end deftypefn @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} ContD (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) @@ -1675,13 +1664,13 @@ The same as previous with @var{x}, @var{y} equidistantly distributed in interval @end deftypefn @c ================================================================== -@node Axial, Grid, ContD, 2D plotting +@node Axial, Grad, ContD, 2D plotting @subsection Axial @cindex Axial @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Axial (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}) @deftypefnx {C function} @code{void} mgl_axial_xy_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch) -The function draws surface which is result of contour plot rotation for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v}. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{sch} have symbol @samp{#} then wire plot is produced. If string contain symbols @samp{x}, @samp{y} or @samp{z} then rotation axis @var{AxialDir} (@pxref{Other settings}) will be set to specified direction. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @var{x.nx=z.nx && y.nx=z.ny} or @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Cont}, @ref{ContF}, @ref{Torus}, @ref{Surf3}. @sref{Axial sample} +The function draws surface which is result of contour plot rotation for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v}. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{sch} have symbol @samp{#} then wire plot is produced. If string contain symbols @samp{x}, @samp{y} or @samp{z} then rotation axis @var{AxialDir} (@pxref{Other settings}) will be set to specified direction. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Cont}, @ref{ContF}, @ref{Torus}, @ref{Surf3}. @sref{Axial sample} @end deftypefn @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Axial (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}) @@ -1699,14 +1688,35 @@ The same as first one with vector @var{v} of @var{num}-th elements equidistantly The same as previous with @var{x}, @var{y} equidistantly distributed in interval [@var{Min}, @var{Max}]. @end deftypefn + +@c ================================================================== +@node Grad, Grid, Axial, 2D plotting +@subsection Grad +@cindex Grad + +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Grad (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}phi, @code{const char *}sch=@code{""}, @code{int} num=@code{5}) +@deftypefnx {C function} @code{void} mgl_grad_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal) +The function draws gradient lines for scalar field @var{phi}[i,j,k] specified parametrically @{@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]@}. String @var{sch} sets the color scheme. Previous color scheme is used by default. Number of lines is proportional to @var{num}. If @var{num}<0 then lines start from borders only. The minor dimensions of arrays @var{x}, @var{y}, @var{z}, @var{phi} should be equal @code{x.nx=phi.nx && y.nx=phi.ny && z.nx=phi.nz} or @code{x.nx=y.nx=z.nx=phi.nx && x.ny=y.ny=z.ny=phi.ny && x.nz=y.nz=z.nz=phi.nz}. Arrays @var{x}, @var{y} and @var{z} can be vectors (not matrices as @var{phi}). See also @ref{Dens3}, @ref{Cont3}, @ref{Flow}. +@end deftypefn + +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Grad (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{5}, @code{float} zVal=@code{NAN}) +@deftypefnx {C function} @code{void} mgl_grad_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal) +The function draws gradient lines for scalar field @var{phi}[i,j] specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{phi}[i,j]@} at @var{z} = @var{zVal}. String @var{sch} sets the color scheme. Previous color scheme is used by default. Number of lines is proportional to @var{num}. If @var{num}<0 then lines start from borders only. The minor dimensions of arrays @var{x}, @var{y}, @var{phi} should be equal @code{x.nx=phi.nx && y.nx=phi.ny} or @code{x.nx=y.nx=phi.nx && x.ny=y.ny=phi.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{phi}). Lines are plotted for each z slice of the data. See also @ref{Dens}, @ref{Cont}, @ref{ContF}, @ref{Flow}. @sref{Grad sample} +@end deftypefn + +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Grad (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{5}, @code{float} zVal=@code{NAN}) +@deftypefnx {C function} @code{void} mgl_grad (@code{HMGL} gr, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal) +The same as previous with @var{x}, @var{y} equidistantly distributed in interval [@var{Min}, @var{Max}]. +@end deftypefn + @c ================================================================== -@node Grid, , Axial, 2D plotting +@node Grid, , Grad, 2D plotting @subsection Grid @cindex Grid @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Grid (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) @deftypefnx {C function} @code{void} mgl_grid_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal) -The function draws grid lines for density plot of surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z} = @var{zVal}. String @var{sch} sets the color scheme. Previous color scheme is used by default. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @var{x.nx=z.nx && y.nx=z.ny} or @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Grid is plotted for each z slice of the data. See also @ref{Dens}, @ref{Cont}, @ref{ContF}. +The function draws grid lines for density plot of surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} at @var{z} = @var{zVal}. String @var{sch} sets the color scheme. Previous color scheme is used by default. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Grid is plotted for each z slice of the data. See also @ref{Dens}, @ref{Cont}, @ref{ContF}. @end deftypefn @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Grid (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) @@ -1719,7 +1729,7 @@ The same as previous with @var{x}, @var{y} equidistantly distributed in interval @node 3D plotting, Dual plotting, 2D plotting, MathGL core @section 3D plotting -These functions perform plotting of 3D data. 3D means that data depend from 3 independent parameters like matrix @math{f(x_i,y_j,z_k), i=1...n, j=1...m, k=1...l}. There are 5 generally different types of data representations: isosurface or surface of constant value (Surf3), density plot at slices (Dens3), contour lines plot at slices (Cont3), solid contours plot at slices (ContF3) and cloud-like plot (Cloud). Surf3, Cont3 and ContF3 functions have variants for automatic and manual selection of level values for surfaces/contours. Also there are functions for plotting data grid lines according to the data format (Grid3) for enhancing density or contour plots. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. @xref{Color scheme}. +These functions perform plotting of 3D data. 3D means that data depend from 3 independent parameters like matrix @math{f(x_i,y_j,z_k), i=1...n, j=1...m, k=1...l}. There are 5 generally different types of data representations: isosurface or surface of constant value (Surf3), density plot at slices (Dens3), contour lines plot at slices (Cont3), solid contours plot at slices (ContF3) and cloud-like plot (Cloud). Surf3, Cont3 and ContF3 functions have variants for automatic and manual selection of level values for surfaces/contours. Also there are functions for plotting data grid lines according to the data format (Grid3) for enhancing density or contour plots. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. @xref{Color scheme}. @sref{3D plot sample} @menu * Surf3:: @@ -1790,7 +1800,7 @@ The same as previous with @var{x}, @var{y}, @var{z} equidistantly distributed in @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Cont3 (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}a, @code{char} dir, @code{int} sVal=@code{-1}, @code{const char *}stl=@code{""}) @deftypefnx {C function} @code{void} mgl_cont3_xyz_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} a, @code{char} dir, @code{int} sVal, @code{const char *}stl) -The function draws contour plot for 3d data specified parametrically @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]). Contours are plotted for values specified in array @var{v} at slice @var{sVal} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{stl} have symbol @samp{#} then grid lines are drawn. The minor dimensions of arrays @var{x}, @var{y}, @var{z} must be equal. Arrays @var{x}, @var{y}, @var{z} can be vectors (not 3d arrays as @var{a}). See also @ref{Dens3}, @ref{ContF3}, @ref{Cont}, @ref{Grid3}. @sref{Cont3 sample} +The function draws contour plot for 3d data specified parametrically @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]). Contours are plotted for values specified in array @var{v} at slice @var{sVal} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. String @var{stl} sets the color scheme. Previous color scheme is used by default. If string @var{stl} have symbol @samp{#} then grid lines are drawn. If string @var{stl} have symbol @samp{t} or @samp{T} then contour labels @var{v}[k] will be drawn below (or above) the contours. The minor dimensions of arrays @var{x}, @var{y}, @var{z} must be equal. Arrays @var{x}, @var{y}, @var{z} can be vectors (not 3d arrays as @var{a}). See also @ref{Dens3}, @ref{ContF3}, @ref{Cont}, @ref{Grid3}. @sref{Cont3 sample} @end deftypefn @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Cont3 (@code{const mglData &}v, @code{const mglData &}a, @code{char} dir, @code{int} sVal=@code{-1}, @code{const char *}sch=@code{""}) @@ -1947,7 +1957,7 @@ These plotting functions draw @emph{two matrix} simultaneously. There are 5 gene @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} SurfC (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}) @deftypefnx {C function} @code{void} mgl_surfc_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch) -The function draws surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} and color it by matrix @var{c}[i,j]. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{sch} have symbol @samp{#} then grid lines are drawn. All dimensions of arrays @var{z} and @var{c} must be equal. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @var{x.nx=z.nx && y.nx=z.ny} or @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Surf}, @ref{SurfA}, @ref{Surf3C}. @sref{SurfC sample} +The function draws surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} and color it by matrix @var{c}[i,j]. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{sch} have symbol @samp{#} then grid lines are drawn. All dimensions of arrays @var{z} and @var{c} must be equal. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Surf}, @ref{SurfA}, @ref{Surf3C}. @sref{SurfC sample} @end deftypefn @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} SurfC (@code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}) @@ -1989,7 +1999,7 @@ The same as previous with @var{x}, @var{y}, @var{z} equidistantly distributed in @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} SurfA (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}) @deftypefnx {C function} @code{void} mgl_surfa_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch) -The function draws surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} and transparent it by matrix @var{c}[i,j]. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{sch} have symbol @samp{#} then grid lines are drawn. All dimensions of arrays @var{z} and @var{c} must be equal. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @var{x.nx=z.nx && y.nx=z.ny} or @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Surf}, @ref{SurfC}, @ref{Surf3A}, @ref{TileS}. @sref{SurfA sample} +The function draws surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} and transparent it by matrix @var{c}[i,j]. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string @var{sch} have symbol @samp{#} then grid lines are drawn. All dimensions of arrays @var{z} and @var{c} must be equal. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{Surf}, @ref{SurfC}, @ref{Surf3A}, @ref{TileS}. @sref{SurfA sample} @end deftypefn @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} SurfA (@code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}) @@ -2030,7 +2040,7 @@ The same as previous with @var{x}, @var{y}, @var{z} equidistantly distributed in @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} TileS (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}r, @code{const char *}sch=@code{""}) @deftypefnx {C function} @code{void} mgl_tiles_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} r, @code{const char *}sch) -The function draws horizontal tiles for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. It is mostly the same as Tile() but the size of tiles is determined by @var{r} array. This is some kind of ``transparency'' useful for exporting to EPS files. String @var{sch} sets the color scheme. Previous color scheme is used by default. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @var{x.nx=z.nx && y.nx=z.ny} or @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{SurfA}, @ref{Tile}. @sref{TileS sample} +The function draws horizontal tiles for surface specified parametrically @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. It is mostly the same as Tile() but the size of tiles is determined by @var{r} array. This is some kind of ``transparency'' useful for exporting to EPS files. String @var{sch} sets the color scheme. Previous color scheme is used by default. The minor dimensions of arrays @var{x}, @var{y}, @var{z} should be equal @code{x.nx=z.nx && y.nx=z.ny} or @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{z}). Surface is plotted for each z slice of the data. See also @ref{SurfA}, @ref{Tile}. @sref{TileS sample} @end deftypefn @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} TileS (@code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}) @@ -2060,7 +2070,7 @@ The same as previous with @var{x}, @var{y} equidistantly distributed in interval @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} STFA (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}re, @code{const mglData &}im, @code{int} dn, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) @deftypefnx {C function} @code{void} mgl_stfa_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} re, @code{const HMDT} im, @code{int} dn, @code{const char *}sch, @code{float} zVal) -Draws spectrogram of complex array @var{re}+i*@code{im} for Fourier size of @var{dn} points at plane @var{z=zVal}. Parameter @var{dn} is arbitrary even integer. For example in 1D case, result is density plot of data @math{res[i,j]=|\sum_d^dn exp(I*j*d)*(re[i*dn+d]+I*im[i*dn+d])|/dn} with size @{int(nx/dn), dn, ny@}. At this array @var{re}, @var{im} parametrically depend on coordinates @var{x}, @var{y}. String @var{sch} sets the color scheme. Previous color scheme is used by default. The size of @var{re} and @var{im} must be the same. The minor dimensions of arrays @var{x}, @var{y}, @var{re} should be equal. Arrays @var{x}, @var{y} can be vectors (not matrix as @var{re}). @xref{Color scheme}. +Draws spectrogram of complex array @var{re}+i*@code{im} for Fourier size of @var{dn} points at plane @var{z=zVal}. Parameter @var{dn} is arbitrary even integer. For example in 1D case, result is density plot of data @math{res[i,j]=|\sum_d^dn exp(I*j*d)*(re[i*dn+d]+I*im[i*dn+d])|/dn} with size @{int(nx/dn), dn, ny@}. At this array @var{re}, @var{im} parametrically depend on coordinates @var{x}, @var{y}. String @var{sch} sets the color scheme. Previous color scheme is used by default. The size of @var{re} and @var{im} must be the same. The minor dimensions of arrays @var{x}, @var{y}, @var{re} should be equal. Arrays @var{x}, @var{y} can be vectors (not matrix as @var{re}). @sref{STFA sample} @end deftypefn @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} STFA (@code{const mglData &}re, @code{const mglData &}im, @code{int} dn, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) @@ -2199,7 +2209,7 @@ The same as previous with @var{x}, @var{y} equidistantly distributed in interval @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Flow (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}ax, @code{const mglData &}ay, @code{const char *}sch=@code{""}, @code{int} num=@code{5}, @code{bool} central=@code{true}, @code{float} zVal=@code{NAN}) @deftypefnx {C function} @code{void} mgl_flow_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} ax, @code{const HMDT} ay, @code{const char *}sch, @code{int} num, @code{int} central, @code{float} zVal) -The function draws flow threads for the plane vector field @{@var{ax}, @var{ay}@} parametrically depending on coordinates @var{x}, @var{y} at level z = @var{zVal}. Number of threads is proportional to @var{num}. Parameter @var{central} sets the thread start from center (if true) or only from edges (if false). The color of lines is proportional to @math{\sqrt@{ax^2+ay^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). String @var{sch} sets the color scheme. Previous color scheme is used by default. The size of @var{ax} and @var{ay} must be equal. The minor dimensions of arrays @var{x}, @var{y} and @var{ax} must be equal too. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{ax}). The vector field is plotted for each z slice of @var{ax}, @var{ay}. See also @ref{Pipe}, @ref{VectC}, @ref{Vect}. @sref{Flow sample} +The function draws flow threads for the plane vector field @{@var{ax}, @var{ay}@} parametrically depending on coordinates @var{x}, @var{y} at level z = @var{zVal}. Number of threads is proportional to @var{num}. Parameter @var{central} sets the thread start from center (if true) or only from edges (if false). From v.1.11 it is ignored and always equal to (@var{num}>0). The color of lines is proportional to @math{\sqrt@{ax^2+ay^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). String @var{sch} sets the color scheme. Previous color scheme is used by default. The size of @var{ax} and @var{ay} must be equal. The minor dimensions of arrays @var{x}, @var{y} and @var{ax} must be equal too. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{ax}). The vector field is plotted for each z slice of @var{ax}, @var{ay}. See also @ref{Pipe}, @ref{VectC}, @ref{Vect}. @sref{Flow sample} @end deftypefn @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Flow (@code{const mglData &}ax, @code{const mglData &}ay, @code{const char *}sch=@code{""}, @code{int} num=@code{5}, @code{bool} central=@code{true}, @code{float} zVal=@code{NAN}) @@ -2254,7 +2264,7 @@ The same as previous with @var{x}, @var{y} equidistantly distributed in interval @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Pipe (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}ax, @code{const mglData &}ay, @code{const char *}sch=@code{""}, @code{float} r0=@code{0.05}, @code{int} num=@code{5}, @code{bool} central=@code{true}, @code{float} zVal=@code{NAN}) @deftypefnx {C function} @code{void} mgl_pipe_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} ax, @code{const HMDT} ay, @code{const char *}sch, @code{float} r0, @code{int} num, @code{int} central, @code{float} zVal) -The function draws flow pipes for the plane vector field @{@var{ax}, @var{ay}@} parametrically depending on coordinates @var{x}, @var{y} at level z = @var{zVal}. Number of pipes is proportional to @var{num}. Parameter @var{central} sets the pipe start from center (if true) or only from edges (if false). The color of lines is proportional to @math{\sqrt@{ax^2+ay^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). String @var{sch} sets the color scheme. Previous color scheme is used by default. Parameter @var{r0} set the base pipe radius. If @var{r0}<0 then pipe radius is inverse proportional to amplitude. The size of @var{ax} and @var{ay} must be equal. The minor dimensions of arrays @var{x}, @var{y} and @var{ax} must be equal too. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{ax}). The vector field is plotted for each z slice of @var{ax}, @var{ay}. See also @ref{Pipe}, @ref{VectC}, @ref{Vect}. @sref{Pipe sample} +The function draws flow pipes for the plane vector field @{@var{ax}, @var{ay}@} parametrically depending on coordinates @var{x}, @var{y} at level z = @var{zVal}. Number of pipes is proportional to @var{num}. Parameter @var{central} sets the pipe start from center (if true) or only from edges (if false). From v.1.11 it is ignored and always equal to (@var{num}>0). The color of lines is proportional to @math{\sqrt@{ax^2+ay^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). String @var{sch} sets the color scheme. Previous color scheme is used by default. Parameter @var{r0} set the base pipe radius. If @var{r0}<0 then pipe radius is inverse proportional to amplitude. The size of @var{ax} and @var{ay} must be equal. The minor dimensions of arrays @var{x}, @var{y} and @var{ax} must be equal too. Arrays @var{x} and @var{y} can be vectors (not matrices as @var{ax}). The vector field is plotted for each z slice of @var{ax}, @var{ay}. See also @ref{Flow}, @ref{VectC}, @ref{Vect}. @sref{Pipe sample} @end deftypefn @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Pipe (@code{const mglData &}ax, @code{const mglData &}ay, @code{const char *}sch=@code{""}, @code{float} r0=@code{0.05}, @code{int} num=@code{5}, @code{bool} central=@code{true}, @code{float} zVal=@code{NAN}) @@ -2286,6 +2296,8 @@ These functions perform miscelaneous plotting. There is unstructured data points * Dots:: * Crust:: * TriPlot:: +* TriCont:: +* QuadPlot:: * Plots by formula:: * SimplePlot:: @end menu @@ -2437,7 +2449,7 @@ The same as previous with @var{x=tr}(0,:), @var{y=tr}(1,:), @var{z=tr}(2,:). @end deftypefn @c ================================================================== -@node TriPlot, Plots by formula, Crust, Other plotting +@node TriPlot, TriCont, Crust, Other plotting @subsection TriPlot @cindex TriPlot @@ -2445,7 +2457,7 @@ The same as previous with @var{x=tr}(0,:), @var{y=tr}(1,:), @var{z=tr}(2,:). @deftypefnx {Method on @code{mglGraph} (C++, Python)} @code{void} TriPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}) @deftypefnx {C function} @code{void} mgl_triplot_xyz (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch) @deftypefnx {C function} @code{void} mgl_triplot_xyzc (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch) -The function draws the surface of triangles. Triangle vertexes are set by indexes @var{id} of data points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string contain @samp{#} then wire plot is produced. First dimensions of @var{id} must be 3 or greater. Arrays @var{x}, @var{y}, @var{z} must have equal sizes. Parameter @var{c} set the colors of triangles (if @var{id}.ny=@var{c}.nx) or colors of vertexes (if @var{x}.nx=@var{c}.nx). See also @ref{Dots}, @ref{Crust}. +The function draws the surface of triangles. Triangle vertexes are set by indexes @var{id} of data points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string contain @samp{#} then wire plot is produced. First dimensions of @var{id} must be 3 or greater. Arrays @var{x}, @var{y}, @var{z} must have equal sizes. Parameter @var{c} set the colors of triangles (if @var{id}.ny=@var{c}.nx) or colors of vertexes (if @var{x}.nx=@var{c}.nx). See also @ref{Dots}, @ref{Crust}, @ref{QuadPlot}. @end deftypefn @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} TriPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) @@ -2454,7 +2466,43 @@ The same as previous with @var{z}[i]=@var{zVal}. @end deftypefn @c ================================================================== -@node Plots by formula, SimplePlot, TriPlot, Other plotting +@node TriCont, QuadPlot, TriPlot, Other plotting +@subsection TriCont +@cindex TriCont + +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} TriContV (@code{const mglData &}v, @code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) +@deftypefnx {Method on @code{mglGraph} (C++, Python)} @code{void} TriContV (@code{const mglData &}v, @code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) +@deftypefnx {C function} @code{void} mgl_tricont_xyzcv (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch, @code{float} zVal) +@deftypefnx {C function} @code{void} mgl_tricont_xyzv (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal) +The function draws contour lines for surface of triangles at @var{z} = @var{zVal} (or for @var{z=v}[k] if @code{zVal==NAN}). Triangle vertexes are set by indexes @var{id} of data points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Contours are plotted for @var{z}[i,j]=@var{v}[k] where @var{v}[k] are values of data array @var{v}. String @var{sch} sets the color scheme. Previous color scheme is used by default. Array @var{c} (if specified) is used for contour coloring. First dimensions of @var{id} must be 3 or greater. Arrays @var{x}, @var{y}, @var{z} must have equal sizes. Parameter @var{c} set the colors of triangles (if @var{id}.ny=@var{c}.nx) or colors of vertexes (if @var{x}.nx=@var{c}.nx). See also @ref{TriPlot}, @ref{Cont}. +@end deftypefn + +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} TriCont (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}, @code{num}=@code{7}, @code{float} zVal=@code{NAN}) +@deftypefnx {Method on @code{mglGraph} (C++, Python)} @code{void} TriCont (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{num}=@code{7}, @code{float} zVal=@code{NAN}) +@deftypefnx {C function} @code{void} mgl_tricont_xyzc (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch, @code{num}, @code{float} zVal) +@deftypefnx {C function} @code{void} mgl_tricont_xyz (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{num}, @code{float} zVal) +The same as first one with vector @var{v} of @var{num}-th elements equidistantly distributed in range [@var{Cmin}, @var{Cmax}]. +@end deftypefn + +@c ================================================================== +@node QuadPlot, Plots by formula, TriCont, Other plotting +@subsection QuadPlot +@cindex QuadPlot + +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}) +@deftypefnx {Method on @code{mglGraph} (C++, Python)} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}) +@deftypefnx {C function} @code{void} mgl_quadplot_xyz (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch) +@deftypefnx {C function} @code{void} mgl_quadplot_xyzc (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch) +The function draws the surface of quadrangles. Quadrangles vertexes are set by indexes @var{id} of data points @{@var{x}[i], @var{y}[i], @var{z}[i]@}. String @var{sch} sets the color scheme. Previous color scheme is used by default. If string contain @samp{#} then wire plot is produced. First dimensions of @var{id} must be 4 or greater. Arrays @var{x}, @var{y}, @var{z} must have equal sizes. Parameter @var{c} set the colors of quadrangles (if @var{id}.ny=@var{c}.nx) or colors of vertexes (if @var{x}.nx=@var{c}.nx). See also @ref{TriPlot}. +@end deftypefn + +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) +@deftypefnx {C function} @code{void} mgl_quadplot_xy (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const char *}sch, @code{float} zVal) +The same as previous with @var{z}[i]=@var{zVal}. +@end deftypefn + +@c ================================================================== +@node Plots by formula, SimplePlot, QuadPlot, Other plotting @subsection Plots by formula @cindex Plot @cindex Surf diff --git a/texinfo/core_ru.texi b/texinfo/core_ru.texi index b01c131..1ec64b8 100644 --- a/texinfo/core_ru.texi +++ b/texinfo/core_ru.texi @@ -1,5 +1,4 @@ @c ------------------------------------------------------------------ -@node MathGL core, Plotter classes, Examples, Top @chapter Ядро MathGL @cindex mglGraph @@ -77,12 +76,12 @@ @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} SetTransparent (@code{bool} val) @deftypefnx {Функция С} @code{void} mgl_set_transp (@code{HMGL} gr, @code{int} enable) -Временно включает/вохвращает прозрачность графиков. Это аналог @code{Alpha(val)}, но работает более корректно для класса mglGraphGL. +Временно включает/возвращает прозрачность графиков. Это аналог @code{Alpha(val)}, но работает более корректно для класса mglGraphGL. @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} SetTranspType (@code{int} type) @deftypefnx {Функция С} @code{void} mgl_set_transp_type (@code{HMGL} gr, @code{int} enable) -Задает тип прозрачности. Обычная прозрачность (@samp{0}) -- "закрытые" объекты видны меньше чем закрывающие. Этот режим некорректно отображается в OpenGL (mglGraphGL) для нескольких перекрывающихся поверхностей. "Стеклянная" прозрачность (@samp{1}) -- закрытые и закрывающие объекты единообразно ослабляют интенсивность света (по RGB каналам). "Ламповая" прозрачность (@samp{2}) -- закрытые и закрывающие объекты являются источниками дополнительного освещения (рекомендую установить @code{SetAlphaDef(0.3)} или меньше в этом случае). +Задает тип прозрачности. Обычная прозрачность (@samp{0}) -- "закрытые" объекты видны меньше чем закрывающие. Этот режим некорректно отображается в OpenGL (mglGraphGL) для нескольких перекрывающихся поверхностей. "Стеклянная" прозрачность (@samp{1}) -- закрытые и закрывающие объекты единообразно ослабляют интенсивность света (по RGB каналам). "Ламповая" прозрачность (@samp{2}) -- закрытые и закрывающие объекты являются источниками дополнительного освещения (рекомендую установить @code{SetAlphaDef(0.3)} или меньше в этом случае). @xref{Normal transparency}, @ref{Glass-like transparency}, @ref{Lamp-like transparency}. @end deftypefn @deftypecv {@emph{Устаревшая переменная}} mglGraph @code{float} AlphaDef @@ -135,7 +134,7 @@ @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Fog (@code{float} d, @code{float} dz=@code{0.25}) @deftypefnx {Функция С} @code{void} mgl_set_fog (@code{HMGL} gr, @code{float} d, @code{float} dz) -Имитирует туман на графике. Туман начинается на относительном расстоянии @var{dz} от точки обзора и его плотность растет экспоненциально вглубь по закону ~ 1-exp(-@emph{d*z}). Здесь @emph{z} -- нормализованная на 1 глубина графика. Если @var{d}=@code{0} то туман отсутствует. @sref{Surface in fog sample} +Имитирует туман на графике. Туман начинается на относительном расстоянии @var{dz} от точки обзора и его плотность растет экспоненциально вглубь по закону ~@math{1-exp(-d*z)}. Здесь @emph{z} -- нормализованная на 1 глубина графика. Если @var{d}=@code{0} то туман отсутствует. @sref{Surface in fog sample} @end deftypefn @c ================================================================== @@ -237,7 +236,7 @@ @end deftypefn @float -@image{png_static/cut, 7cm} +@image{cut, 7cm} @caption{Левый рисунок нарисован при @code{Cut=false}, правый при @code{Cut=true}.} @end float @@ -377,7 +376,7 @@ @subsection Обработка ошибок @cindex Message -@cindex WarnCode +@cindex GetWarnCode @cindex SetWarn Есть 2 переменные показывающие наличие предупреждения/ошибки при создании графика. Обычно вы должны сбросить их с помощью @code{SetWarn(0);} перед построением и проверить переменную @var{WarnCode} на наличие ошибок после построения. Только последнее предупреждение сохраняется. Замечу, что все предупреждения/ошибки в MathGL не являются критичными -- в худшем из вариантов соответствующий график просто не будет построен. @@ -390,8 +389,9 @@ Указатель на строку для вывода сообщений библиотеки о причине отсутствия графика. Если равен NULL, то сообщения не выводятся. Размер буфера должен быть не менее 1024 байт. Если Message[0]==0, то сообщений нет. @end deftypecv -@deftypecv {Переменная(C++)} mglGraph @code{int} WarnCode -Код сообщения о причине отсутствия графика. Возможные значения: +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{int} GetWarn () +@deftypefnx {C function} @code{int} mgl_get_warn (@code{HMGL} gr) +Возвращает код сообщения о причине отсутствия графика. Возможные значения: @table @code @item mglWarnNone=0 Предупреждений нет @@ -424,6 +424,10 @@ Setsize: размер(ы) равны нулю или отрицательны @item mglWarnFmt Формат не поддерживается @end table +@end deftypefn + +@deftypecv {Устаревшая переменная} mglGraph @code{int} WarnCode +Код сообщения о причине отсутствия графика. @end deftypecv @c ================================================================== @@ -577,7 +581,7 @@ Setsize: размер(ы) равны нулю или отрицательны @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} SetFunc (@code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ=@code{""}, @code{const char *}EqA=@code{""}) @deftypefnx {Функция С} @code{void} mgl_set_func (@code{HMGL} gr, @code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ) @deftypefnx {Функция С} @code{void} mgl_set_func_ext (@code{HMGL} gr, @code{const char *}EqX, @code{const char *}EqY, @code{const char *}EqZ, @code{const char *}EqA) -Задает формулы перехода к криволинейным координатам. Каждая строка является математическим выражением, зависящим от старых координат x, y, z. Например, для цилиндрических координат будет @code{Axis("x*cos(y)", "x*sin(y)", "z");}. Для удаления формул соответствующий параметр должен быть пустым или @code{NULL}. Использование формул преобразования слегка замедляет программу, т.е.. @code{Axis("", "", "")} быстрее чем @code{Axis("1*x", "1*y", "1*z")}. Параметр @var{EqA} задает аналогичную формулу для цветовой шкалы. @xref{mglFormula class}. +Задает формулы перехода к криволинейным координатам. Каждая строка является математическим выражением, зависящим от старых координат @samp{x}, @samp{y}, @samp{z} и @samp{a} или @samp{c} для цветовой шкалы. Например, для цилиндрических координат будет @code{Axis("x*cos(y)", "x*sin(y)", "z");}. Для удаления формул соответствующий параметр должен быть пустым или @code{NULL}. Использование формул преобразования слегка замедляет программу, т.е.. @code{Axis("", "", "")} быстрее чем @code{Axis("1*x", "1*y", "1*z")}. Параметр @var{EqA} задает аналогичную формулу для цветовой шкалы. @xref{Textual formulas}. @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} SetCoor (@code{int} how) @@ -613,7 +617,7 @@ Setsize: размер(ы) равны нулю или отрицательны @deftypefnx {Функция С} @code{void} mgl_set_ticks (@code{HMGL} gr, @code{float} dx, @code{float} dy, @code{float} dz) @deftypefnx {Функция С} @code{void} mgl_set_subticks (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} nz) @deftypefnx {Функция С} @code{void} mgl_set_tick_origin (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0) -Задает шаг меток осей @var{d}, число подметок @var{ns} и начальное положение меток @var{org} для оси вдоль направления @var{dir} (используйте 'c' для меток colorbar). Переменная @var{d} задает шаг меток (если положительна) или их число на оси (if отрицательна). Нулевое значение задает логарифмические метки. Если @var{org}=@code{NAN}, то используется значение из переменной @var{Org}. +Задает шаг меток осей @var{d}, число подметок @var{ns} и начальное положение меток @var{org} для оси вдоль направления @var{dir} (используйте 'c' для меток colorbar). Переменная @var{d} задает шаг меток (если положительна) или их число на оси (если отрицательна). Нулевое значение задает логарифмические метки. Если @var{org}=@code{NAN}, то используется значение из переменной @var{Org}. @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} SetTicksVal (@code{char} dir, @code{int} n, @code{float *}val, @code{const char **}lbl) @@ -691,15 +695,21 @@ Setsize: размер(ы) равны нулю или отрицательны Помещает последующий вывод в @var{m}-ую ячейку сетки размером @var{nx}*@var{ny} от всего рисунка. Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться первой для создания "подграфика". С эстетической точки зрения не рекомендуется вызывать эту функцию с различными (или не кратными) размерами сетки. Ячейка может быть дополнительно сдвинута относительно своего обычного положения на относительный размер @var{dx}, @var{dy}. @end deftypefn +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} SubPlot (@code{int} nx, @code{int} ny, @code{int} m, @code{const char *}style) +@deftypefnx {C function} @code{void} mgl_subplot_s (@code{HMGL} gr, @code{int} nx, @code{int} ny, @code{int} m, @code{const char *}style) +Аналогично предыдущему, но место для осей/colorbar резервируется только если строка @var{style} содержит: @samp{L} или @samp{<} -- с левого края, @samp{R} или @samp{>} -- с правого края, @samp{A} или @samp{^} -- с верхнего края, @samp{U} или @samp{_} -- с нижнего края. +@end deftypefn + @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} InPlot (@code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2, @code{bool} rel=@code{false}) @deftypefnx {Функция С} @code{void} mgl_inplot (@code{HMGL} gr, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2) @deftypefnx {Функция С} @code{void} mgl_relplot (@code{HMGL} gr, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2) -Помещает последующий вывод в прямоугольную область [@var{x1}, @var{x2}]*[@var{y1}, @var{y2}] (исходный размер [0,1]*[0,1]). Эта функция позволяет поместить график в произвольную область рисунока. Если параметр @var{rel}=@code{true}, то используется позиция относительно текщего SubPlot() (или InPlot() с @var{rel}=@code{false}). Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться первой для создания "подграфика". +Помещает последующий вывод в прямоугольную область [@var{x1}, @var{x2}]*[@var{y1}, @var{y2}] (исходный размер [0,1]*[0,1]). Эта функция позволяет поместить график в произвольную область рисунка. Если параметр @var{rel}=@code{true}, то используется позиция относительно текщего SubPlot() (или InPlot() с @var{rel}=@code{false}). Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться первой для создания "подграфика". @end deftypefn -@deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} ColumnPlot (@code{int} num, @code{int} ind) +@deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} ColumnPlot (@code{int} num, @code{int} ind, @code{float} d=@code{0}) @deftypefnx {Функция С} @code{void} mgl_columnplot (@code{HMGL} gr, @code{int} num, @code{int} ind) -Помещает последующий вывод в @var{ind}-ую строку столбца из @var{num} строк. Положение столбца выбирается относительно последнего вызова SubPlot() (или InPlot() с @var{rel}=@code{false}). @sref{ColumnPlot sample} +@deftypefnx {Функция С} @code{void} mgl_columnplot (@code{HMGL} gr, @code{int} num, @code{int} ind, @code{float} d) +Помещает последующий вывод в @var{ind}-ую строку столбца из @var{num} строк. Положение столбца выбирается относительно последнего вызова SubPlot() (или InPlot() с @var{rel}=@code{false}). Параметр @var{d} задает дополнительный зазор между строк. @sref{ColumnPlot sample} @end deftypefn @deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} StickPlot (@code{int} num, @code{int} ind, @code{float} tet, @code{float} phi) @@ -732,8 +742,14 @@ Setsize: размер(ы) равны нулю или отрицательны Сбрасывает матрицу трансформации. Эквивалентно вызову @code{InPlot(0,1,0,1,rel)}. @end deftypefn -@deftypefn {Метод класса @code{mglGraph} (C++)} @code{void} RestoreM () -Восстанавливает матрицу преобразования к матрице после последнего @code{InPlot()}. Полезна для возвращения состояния после вызова функции @code{Identity()}. +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Push () +@deftypefnx {C function} @code{void} mgl_mat_push (@code{HMGL} gr) +Помещает матрицу преобразования в стек. Позднее вы можете восстановить текущее состояние с помощью функции Pop(). Стек может содержать до 10 матриц. +@end deftypefn + +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} Pop () +@deftypefnx {C function} @code{void} mgl_mat_pop (@code{HMGL} gr) +Заменяет (восстанавливает) матрицу преобразования на последнюю помещенную в стек матрицу. @end deftypefn @@ -783,12 +799,12 @@ Setsize: размер(ы) равны нулю или отрицательны @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} WriteEPS (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {Функция С} @code{void} mgl_write_eps (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) -Экспортирует текущий кадр в EPS файл, используя векторное представление графика (класс mglGraphPS). Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) в формате EPS из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. +Экспортирует текущий кадр в EPS файл, используя векторное представление графика (класс mglGraphPS). Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) в формате EPS из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. Если имя файла оканчивается на @samp{z} (например, @samp{fname.eps.gz}), то файл автоматически архивируется в формате gzip. @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} WriteSVG (@code{const char *}fname, @code{const char *}descr=@code{""}) @deftypefnx {Функция С} @code{void} mgl_write_svg (@code{HMGL} gr, @code{const char *}fname, @code{const char *}descr) -Экспортирует текущий кадр в SVG файл, используя векторное представление графика (класс mglGraphPS). Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) в формате SVG из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. +Экспортирует текущий кадр в SVG файл, используя векторное представление графика (класс mglGraphPS). Вследствие чего не рекомендуется сохранять большие графики (поверхности, а особенно поверхности уровня) в формате SVG из-за большого размера файла. Хотя никаких внутренних ограничений на размер выходного файла нет. Для них лучше использовать растровый формат (например, PNG или JPEG). Параметры функции следующие: @var{fname} -- имя файла, @var{descr} -- описание файла. Если имя файла оканчивается на @samp{z} (например, @samp{fname.svgz}), то файл автоматически архивируется в формате gzip. @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} WriteIDTF (@code{const char *}fname, @code{const char *}descr=@code{""}) @@ -877,7 +893,7 @@ Setsize: размер(ы) равны нулю или отрицательны @deftypefnx {Функция С} @code{void} mgl_facex (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} wy, @code{float} wz, @code{const char *}stl, @code{float} d1, @code{float} d2) @deftypefnx {Функция С} @code{void} mgl_facey (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} wx, @code{float} wz, @code{const char *}stl, @code{float} d1, @code{float} d2) @deftypefnx {Функция С} @code{void} mgl_facez (@code{HMGL} gr, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} wx, @code{float} wy, @code{const char *}stl, @code{float} d1, @code{float} d2) -Рисует заполненный прямоугольник (грань) перпендикулярно оси [x,y,z] в точке @{@var{x0}, @var{y0}, @var{z0}@} цветом @var{stl} и шириной @var{wx}, @var{wy}, @var{wz} вдоль соответствующего направления. При этом цвет может быть один для всей грани, или различным если указаны все 4 цвета. Параметры @var{d1}!=0, @var{d2}!=0 задают дополнительный сдвиг последней точки (т.е. рисуют четырехугольник).Грань будет нарисована даже если часть ее лежит вне диапазона осей координат. +Рисует закрашенный прямоугольник (грань) перпендикулярно оси [x,y,z] в точке @{@var{x0}, @var{y0}, @var{z0}@} цветом @var{stl} и шириной @var{wx}, @var{wy}, @var{wz} вдоль соответствующего направления. При этом цвет может быть один для всей грани, или различным для разных вершин если указаны все 4 цвета. Параметры @var{d1}!=0, @var{d2}!=0 задают дополнительный сдвиг последней точки (т.е. рисуют четырехугольник).Грань будет нарисована даже если часть ее лежит вне диапазона осей координат. @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++)} @code{void} Sphere (@code{mglPoint} p, @code{float} r, @code{const char *}stl=@code{"r"}) @@ -917,9 +933,9 @@ Setsize: размер(ы) равны нулю или отрицательны @cindex Text @cindex Title -Функции для вывода текста позволяют вывести строку текста в произвольном месте рисунка, в произвольном направлении и вдоль произвольной кривой. Для низкоуровневого вывода и разбора ТеХ-их выражений используется класс mglFont (@pxref{mglFont class}). Он позволяет использовать произвольное начертание шрифта и многие ТеХ-ие команды (детальнее @pxref{mglFont class}). Все функции вывода текста имеют варианты для 8-bit строк (@code{char *}) и для Unicode строк (@code{wchar_t *}). В первом случае используется конверсия из текущей локали, т.е. иногда вам требуется явно указать локаль с помощью функции @code{setlocale()}. Аргумент @var{size} определяет размер текста: размер шрифта если положителен или относительный размер (=-@var{size}*@var{FontSize}) если отрицателен. Начертание шрифта (STIX, arial, courier, times и др) можно изменить с помощью функций SetFont(), GetFont(). @xref{Font settings}. +Функции для вывода текста позволяют вывести строку текста в произвольном месте рисунка, в произвольном направлении и вдоль произвольной кривой. Для низкоуровневого вывода и разбора ТеХ-их выражений используется класс mglFont (@pxref{mglFont class}). Он позволяет использовать произвольное начертание шрифта и многие ТеХ-ие команды (детальнее @pxref{Font styles}). Все функции вывода текста имеют варианты для 8-bit строк (@code{char *}) и для Unicode строк (@code{wchar_t *}). В первом случае используется конверсия из текущей локали, т.е. иногда вам требуется явно указать локаль с помощью функции @code{setlocale()}. Аргумент @var{size} определяет размер текста: размер шрифта если положителен или относительный размер (=-@var{size}*@var{FontSize}) если отрицателен. Начертание шрифта (STIX, arial, courier, times и др) можно изменить с помощью функций SetFont(), GetFont(). @xref{Font settings}. -Параметры шрифта задаются строкой, которая может содержать символы стиля (@samp{rbiwou}) и/или выравнивания (@samp{LRC}). Также строка может содержать символы цвета @samp{wkrgbcymhRGBCYMHW} (@pxref{mglColor class}) после символа @samp{:}. Стили шрифта: @samp{r} -- прямой, @samp{i} -- курсив, @samp{b} -- жирный, @samp{w} -- контурный, @samp{o} -- надчеркнутый, @samp{u} -- подчеркнутый. По умолчанию используется прямой шрифт. Типы выравнивания: @samp{L} -- по левому краю (по умолчанию), @samp{C} -- по центру, @samp{R} -- по правому краю. Например, строка @samp{iC:b} соответствует курсиву синего цвета с выравниванием по центру. +Параметры шрифта задаются строкой, которая может содержать символы стиля (@samp{rbiwou}) и/или выравнивания (@samp{LRC}). Также строка может содержать символы цвета @samp{wkrgbcymhRGBCYMHW} (@pxref{Line styles}) после символа @samp{:}. Стили шрифта: @samp{r} -- прямой, @samp{i} -- курсив, @samp{b} -- жирный, @samp{w} -- контурный, @samp{o} -- надчеркнутый, @samp{u} -- подчеркнутый. По умолчанию используется прямой шрифт. Типы выравнивания: @samp{L} -- по левому краю (по умолчанию), @samp{C} -- по центру, @samp{R} -- по правому краю. Например, строка @samp{iC:b} соответствует курсиву синего цвета с выравниванием по центру. Если строка содержит символы @samp{aA}, то текст выводится в абсолютных координатах (полагаются в диапазоне [0,1]). При этом используются координаты относительно рисунка (если указано @samp{A}) или относительно последнего SubPlot()/InPlot() (если указано @samp{a}). @@ -969,7 +985,7 @@ Setsize: размер(ы) равны нулю или отрицательны @deftypefnx {Функция С} @code{void} mgl_text_y (@code{HMGL} gr, @code{const HMDT} y, @code{const char *}text, @code{const char *}font, float size) @deftypefnx {Функция С} @code{void} mgl_text_xy (@code{const HMDT} x, @code{const HMDT} y, @code{const char *}text, @code{const char *}font, float size) @deftypefnx {Функция С} @code{void} mgl_text_xyz (@code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}text, @code{const char *}font, float size) -Выводит строку @var{text} вдоль кривой @{@var{x}[i], @var{y}[i], @var{z}[i]@} шрифтом @var{font}. Строка @var{font} может содержать символы: @samp{t} для вывода текста под кривой (по умолчанию), или @samp{T} для вывода текста над кривой. Размеры по 1-ой размерности должны быть одинаковы для всех массивов @var{x.nx=y.nx=z.nx}. Если массив @var{x} не указан, то используется "автоматический" массив со значениями в диапазоне [@var{Min}.x, @var{Max}.x] (@pxref{Ranges (bounding box)}). Если массив @var{z} не указан, то используется @var{z}[i] = @var{zVal}. @sref{Text sample} +Выводит строку @var{text} вдоль кривой @{@var{x}[i], @var{y}[i], @var{z}[i]@} шрифтом @var{font}. Строка @var{font} может содержать символы: @samp{t} для вывода текста под кривой (по умолчанию), или @samp{T} для вывода текста над кривой. Размеры по 1-ой размерности должны быть одинаковы для всех массивов @code{x.nx=y.nx=z.nx}. Если массив @var{x} не указан, то используется "автоматический" массив со значениями в диапазоне [@var{Min}.x, @var{Max}.x] (@pxref{Ranges (bounding box)}). Если массив @var{z} не указан, то используется @var{z}[i] = @var{zVal}. @sref{Text sample} @end deftypefn @c ################################################################## @@ -988,20 +1004,24 @@ Setsize: размер(ы) равны нулю или отрицательны Рисует оси координат и метки на них (@pxref{Axis settings}) в направлениях, указанных строкой @var{dir}. Если строка содержит символ @samp{_}, то подписи меток отображаться не будут. Шрифт подписей определяется функцией @code{SetFontDef()} (@pxref{Font settings}). Метки будут "подогнаны" если @var{adjust}=@code{true} (с помощью вызова функции @code{AdjustTicks()}). @end deftypefn -@deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Colorbar (@code{const char *}sch=@code{""}, @code{int} where=@code{0}) -@deftypefnx {Функция С} @code{void} mgl_colorbar (@code{HMGL} gr, @code{const char *}sch, @code{int} where) -Рисует полосу соответствия цвета и числовых значений (colorbar) для цветовой схемы @var{sch} (используется текущая для @code{sch=""}) с краю от графика. Параметр @var{where} задает местоположение: @samp{0} - справа (по умолчанию), @samp{1} - слева, @samp{2} - сверху, @samp{3} - снизу. @sref{Dens sample} +@deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Colorbar (@code{const char *}sch=@code{""}, @code{int} pos=@code{0}) +@deftypefnx {Функция С} @code{void} mgl_colorbar (@code{HMGL} gr, @code{const char *}sch, @code{int} pos) +Рисует полосу соответствия цвета и числовых значений (colorbar) для цветовой схемы @var{sch} (используется текущая для @code{sch=""}) с краю от графика. Параметр @var{pos} задает местоположение: @samp{0} - справа (по умолчанию), @samp{1} - слева, @samp{2} - сверху, @samp{3} - снизу. Если строка @var{sch} содержит @samp{<>^_}, то параметр @var{pos} определяется как: @code{pos=0} для @samp{>} (справа), @code{pos=1} для @samp{<} (слева), @code{pos=2} для @samp{^} (сверху), @code{pos=3} для @samp{_} (снизу). Если строка содержит @samp{A}, то используются абсолютные координаты (относительно рисунка). @sref{Dens sample} +@end deftypefn + +@deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Colorbar (@code{const mglData &}v, @code{const char *}sch=@code{""}, @code{int} where=@code{0}) +@deftypefnx {Функция С} @code{void} mgl_colorbar_val (@code{HMGL} gr, @code{const HMDT} v, @code{const char *}sch, @code{int} where) +Аналогично предыдущему, но для цветовой схемы без сглаживания с заданными значениями @var{v}. @sref{ContD sample} @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Colorbar (@code{const char *}sch, @code{int} where, @code{float} x, @code{float} y, @code{float} w, @code{float} h) -@deftypefnx {Метод класса @code{mglGraph} (C++)} @code{void} Colorbar (@code{int} where, @code{float} x, @code{float} y, @code{float} w, @code{float} h) +@deftypefnx {Метод класса @code{mglGraph} (C++, Python)} @code{void} Colorbar (@code{int} where, @code{float} x, @code{float} y, @code{float} w, @code{float} h) @deftypefnx {Функция С} @code{void} mgl_colorbar_ext (@code{HMGL} gr, @code{const char *}sch, @code{int} where, @code{float} x, @code{float} y, @code{float} w, @code{float} h) -Рисует полосу соответствия цвета и числовых значений (colorbar) для цветовой схемы @var{sch} (используется текущая для @code{sch=""}) в произвольном месте графика @{@var{x}, @var{y}@} (полагаются в диапазоне [0,1]). Параметр @var{where} задает положение меток: @samp{0} - слева, @samp{1} - справа, @samp{2} - снизу, @samp{3} - сверху. Параметры @var{w}, @var{h} задают относительную ширину и высоту colorbar. +Аналогично первому, но в произвольном месте графика @{@var{x}, @var{y}@} (полагаются в диапазоне [0,1]). Параметры @var{w}, @var{h} задают относительную ширину и высоту colorbar. @end deftypefn -@deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Colorbar (@code{const mglData &}v, @code{const char *}sch=@code{""}, @code{int} where=@code{0}) -@deftypefnx {Функция С} @code{void} mgl_colorbar_val (@code{HMGL} gr, @code{const HMDT} v, @code{const char *}sch, @code{int} where) -Рисует полосу соответствия цвета и числовых значений (colorbar) для цветовой схемы без сглаживания @var{sch} (используется текущая для @code{sch=""}) для значений @var{v} с краю от графика. Параметр @var{where} задает местоположение: @samp{0} - справа (по умолчанию), @samp{1} - слева, @samp{2} - сверху, @samp{3} - снизу. @sref{ContD sample} +@deftypefn {Метод класса @code{mglGraph} (C++)} @code{void} Colorbar (@code{const mglData &}v, @code{const char *}sch, @code{int} where, @code{float} x, @code{float} y, @code{float} w, @code{float} h) +Аналогично предыдущему, но для цветовой схемы без сглаживания с заданными значениями @var{v}. @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Grid (@code{const char *}dir=@code{"xyz"}, @code{const char *}pen=@code{"B-"}) @@ -1017,8 +1037,8 @@ Setsize: размер(ы) равны нулю или отрицательны Рисует ограничивающий параллелепипед цветом @var{col}. @end deftypefn -@deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Label (@code{char} dir, @code{const char *}text, @code{float} pos=@code{+1}, @code{float} size=@code{-1.4}, @code{float} shift=@code{0}) -@deftypefnx {Метод класса @code{mglGraph} (C++)} @code{void} Label (@code{char} dir, @code{const wchar_t *}text, @code{float} pos=@code{+1}, @code{float} size=@code{-1.4}, @code{float} shift=@code{0}) +@deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Label (@code{char} dir, @code{const char *}text, @code{float} pos=@code{0}, @code{float} size=@code{-1.4}, @code{float} shift=@code{0}) +@deftypefnx {Метод класса @code{mglGraph} (C++)} @code{void} Label (@code{char} dir, @code{const wchar_t *}text, @code{float} pos=@code{0}, @code{float} size=@code{-1.4}, @code{float} shift=@code{0}) @deftypefnx {Функция С} @code{void} mgl_label (@code{HMGL} gr, @code{char} dir, @code{const char *}text) @deftypefnx {Функция С} @code{void} mgl_label_ext (@code{HMGL} gr, @code{char} dir, @code{const char *}text, @code{float} pos, @code{float} size, @code{float} shift) @deftypefnx {Функция С} @code{void} mgl_labelw_ext (@code{HMGL} gr, @code{char} dir, @code{const wchar_t *}text, @code{float} pos, @code{float} size, @code{float} shift) @@ -1031,12 +1051,14 @@ Setsize: размер(ы) равны нулю или отрицательны @cindex Legend @cindex AddLegend @cindex ClearLegend +@cindex SetLegendBox +@cindex SetLegendMarks -Эти функции обеспечивают рисование легенды графика (полезно для @ref{1D plotting}). Запись в легенде состоит из двух строк: одна для стиля линии и маркеров, другая с текстом описания (с включенным разбором TeX-их команд). Можно использовать непосредственно массивы строк, или накопление во внутренние массивы с помощью функции AddLegend() с последующим отображением. Положение легенды можно задать автоматически или вручную. Параметры @var{font} и @var{size} задают стиль и размер шрифта (@pxref{Font settings}). Параметр @var{llen} задает относительную ширину примера линии. Ели стиль линии пустой, то соответствующий текст печатается без отступа. @sref{Legend sample} +Эти функции обеспечивают рисование легенды графика (полезно для @ref{1D plotting}). Запись в легенде состоит из двух строк: одна для стиля линии и маркеров, другая с текстом описания (с включенным разбором TeX-их команд). Можно использовать непосредственно массивы строк, или накопление во внутренние массивы с помощью функции AddLegend() с последующим отображением. Положение легенды можно задать автоматически или вручную. Параметры @var{font} и @var{size} задают стиль и размер шрифта (@pxref{Font settings}). Параметр @var{llen} задает относительную ширину примера линии. Ели стиль линии пустой, то соответствующий текст печатается без отступа. Если строка @var{font} содержит символ @samp{A}, то координаты легенды считаются относительно картинки (а не текущего subplot). @sref{Legend sample} @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Legend (@code{int} where=@code{0x3}, @code{const char *}font=@code{"rL"}, @code{float} size=@code{-0.8}, @code{float} llen=@code{0.1}) @deftypefnx {Функция С} @code{void} mgl_legend (@code{HMGL} gr, @code{int} where, @code{const char *}font, @code{float} size, @code{float} llen) -Рисует легенду из накпленных записей шрифтом @var{font} размером @var{size}. Параметр @var{where} задает положение легенды: @samp{0} -- в нижнем левом углу, @samp{1} -- нижнем правом углу, @samp{2} -- верхнем левом углу, @samp{3} -- верхнем правом углу (по умолчанию). +Рисует легенду из накопленных записей шрифтом @var{font} размером @var{size}. Параметр @var{where} задает положение легенды: @samp{0} -- в нижнем левом углу, @samp{1} -- нижнем правом углу, @samp{2} -- верхнем левом углу, @samp{3} -- верхнем правом углу (по умолчанию). @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++)} @code{void} Legend (@code{int} n, @code{wchar_t **}text, @code{char **}style, @code{int} where=@code{0x3}, @code{const char *}font=@code{"rL"}, @code{float} size=@code{-0.8}, @code{float} llen=@code{0.1}) @@ -1045,7 +1067,7 @@ Setsize: размер(ы) равны нулю или отрицательны @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Legend (@code{float} x, @code{float} y, @code{const char *}font=@code{"rL"}, @code{float} size=@code{-0.8}, @code{float} llen=@code{0.1}) @deftypefnx {Функция С} @code{void} mgl_legend_xy (@code{HMGL} gr, @code{float} x, @code{float} y, @code{const char *}font, @code{float} size, @code{float} llen) -Рисует легенду из накпленных записей шрифтом @var{font} размером @var{size}. Положение легенды задается параметрами @var{x}, @var{y}, которые полагаются нормированными в диапазоне [0,1]. +Рисует легенду из накопленных записей шрифтом @var{font} размером @var{size}. Положение легенды задается параметрами @var{x}, @var{y}, которые полагаются нормированными в диапазоне [0,1]. @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++)} @code{void} Legend (@code{int} n, @code{wchar_t **}text, @code{char **}style, @code{float} x, @code{float} y, @code{const char *}font=@code{"rL"}, @code{float} size=@code{-0.8}, @code{float} llen=@code{0.1}) @@ -1069,11 +1091,16 @@ Setsize: размер(ы) равны нулю или отрицательны Включает/выключает рисование прямоугольника вокруг легенды. По умолчанию (=@code{true}) прямоугольник рисуется. @end deftypefn +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} SetLegendMarks (@code{int} num) +@deftypefnx {C function} @code{void} mgl_set_legend_marks (@code{HMGL} gr, @code{int} num) +Задает число маркеров в легенде. По умолчанию используется 1 маркер. +@end deftypefn + @c ################################################################## @node 1D plotting, 2D plotting, Legend, MathGL core @section 1D графики -Эти функции строят графики для одномерных (1D) массивов. Одномерными считаются массивы, зависящие только от одного параметра (индекса) подобно кривой в параметрической форме @{x(i),y(i),z(i)@}, i=1...n. Есть 5 основных типов 1D графиков: линия (Plot), линия с заполнением (Area), ступеньки (Step), прямоугольники (Bars, Barh) и вертикальные линии (Stem). Все эти типы графиков имеют похожий интерфейс. Есть версии для рисования в пространстве и на плоскости. В последнем случае имеется возможность использования только одного массива. Стиль линии и маркеров указывается строковой переменной. Если она равна "", то используется сплошная линия с цветом из палитры (@pxref{Palette and colors}). Кроме того, есть еще несколько типов графиков для одномерных массивов, имеющих другой интерфейс и вид: поверхность вращения кривой (Torus), диаграмма (Chart), размер ошибки (Error), маркеры переменного размера (Mark), трубками (Tube) и т.д. @xref{Line styles}. +Эти функции строят графики для одномерных (1D) массивов. Одномерными считаются массивы, зависящие только от одного параметра (индекса) подобно кривой в параметрической форме @{x(i),y(i),z(i)@}, i=1...n. Есть 5 основных типов 1D графиков: линия (Plot), линия с заполнением (Area), ступеньки (Step), прямоугольники (Bars, Barh) и вертикальные линии (Stem). Все эти типы графиков имеют похожий интерфейс. Есть версии для рисования в пространстве и на плоскости. В последнем случае имеется возможность использования только одного массива. Стиль линии и маркеров указывается строковой переменной. Если она равна "", то используется сплошная линия с цветом из палитры (@pxref{Palette and colors}). Кроме того, есть еще несколько типов графиков для одномерных массивов, имеющих другой интерфейс и вид: поверхность вращения кривой (Torus), диаграмма (Chart), размер ошибки (Error), маркеры переменного размера (Mark), трубками (Tube) и т.д. @xref{Line styles}. @sref{1D plot sample} @menu * Plot:: @@ -1099,7 +1126,7 @@ Setsize: размер(ы) равны нулю или отрицательны @subsection Plot @cindex Plot -Функции рисуют ломанную линию по точкам. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @var{x.nx=y.nx=z.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) рисуется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). См. также @ref{Area}, @ref{Step}, @ref{Stem}, @ref{Tube}, @ref{Mark}, @ref{Error}, @ref{Belt}, @ref{Tens}. @sref{Plot sample} +Функции рисуют ломанную линию по точкам. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{x.nx=y.nx=z.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) рисуется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). См. также @ref{Area}, @ref{Step}, @ref{Stem}, @ref{Tube}, @ref{Mark}, @ref{Error}, @ref{Belt}, @ref{Tens}. @sref{Plot sample} @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Plot (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""}) @deftypefnx {Функция С} @code{void} mgl_plot_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}pen) @@ -1131,7 +1158,7 @@ Setsize: размер(ы) равны нулю или отрицательны @subsection Tens @cindex Tens -Функции рисуют ломанную линию по точкам с цветом, определяемым массивом @var{c} (типа графика натяжений). График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @var{x.nx=y.nx=z.nx=c.nx}. Строка @var{pen} задает цветовую схему (@pxref{Color scheme}) и стиль и/или толщину линии (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущей цветовой схемой. См. также @ref{Plot}, @ref{Mesh}, @ref{Fall}. @sref{Tens sample} +Функции рисуют ломанную линию по точкам с цветом, определяемым массивом @var{c} (типа графика натяжений). График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{x.nx=y.nx=z.nx=c.nx}. Строка @var{pen} задает цветовую схему (@pxref{Color scheme}) и стиль и/или толщину линии (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущей цветовой схемой. См. также @ref{Plot}, @ref{Mesh}, @ref{Fall}. @sref{Tens sample} @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Tens (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}pen=@code{""}) @deftypefnx {Функция С} @code{void} mgl_tens_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}pen) @@ -1153,17 +1180,16 @@ Setsize: размер(ы) равны нулю или отрицательны @subsection Area @cindex Area -Функции рисуют ломанную линию между точками и закрашивает ее вниз до плоскости осей координат. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @var{x.nx=y.nx=z.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). См. также @ref{Plot}, @ref{Bars}, @ref{Stem}. @sref{Area sample} +Функции рисуют ломанную линию между точками и закрашивает ее вниз до плоскости осей координат. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{x.nx=y.nx=z.nx}. Строка @var{pen} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется сплошная линия с текущим цветом из палитры (@pxref{Palette and colors}). Также можно использовать градиентное закрашивание если число указанных цветов равно удвоенному числу кривых для построения. Если строка содержит символ @samp{a}, то линии рисуются одна поверх другой (с суммированием) -- того же эффекта можно достичь вызовом @code{y.CumSum("y");} перед построением графика. См. также @ref{Plot}, @ref{Bars}, @ref{Stem}. @sref{Area sample} @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Area (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}pen=@code{""}) @deftypefnx {Функция С} @code{void} mgl_area_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}pen) Рисует в пространстве линию между точками @{@var{x}[i], @var{y}[i], @var{z}[i]@} и закрашивает ее вниз до плоскости @var{z} = Org.z. @end deftypefn -@deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Area (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}pen=@code{""}, @code{bool} sum=@code{false}) +@deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Area (@code{const mglData &}x, @code{const mglData &}y, @code{const char *}pen=@code{""}) @deftypefnx {Функция С} @code{void} mgl_area_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const char *}pen) -@deftypefnx {Функция С} @code{void} mgl_area_xys (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const char *}pen) -Рисует линию между точками @{@var{x}[i], @var{y}[i]@} в плоскости @var{z}=@var{zVal} (по умолчанию в плоскости @var{z}=@var{Min.z}) и закрашивает ее до прямой @var{y} = Org.y. Параметр @var{sum} задает режим рисования линий одна поверх другой (с сумированием). Замечу, что того же эффекта можно достичь вызовом @code{y.CumSum("y");} перед построением графика. +Рисует линию между точками @{@var{x}[i], @var{y}[i]@} в плоскости @var{z}=@var{zVal} (по умолчанию в плоскости @var{z}=@var{Min.z}) и закрашивает ее до прямой @var{y} = Org.y. @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Area (@code{const mglData &}y, @code{const char *}pen=@code{""}, @code{bool} sum=@code{false}) @@ -1177,11 +1203,11 @@ Setsize: размер(ы) равны нулю или отрицательны @subsection Region @cindex Region -Фунукции закрашивают область между 2 кривыми. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @var{x.nx=y1.nx=y2.nx} и размеры массивов @var{y1}, @var{y2} должны быть также одинаковы. Строка @var{pen} задает цвет (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется текущий цвет из палитры (@pxref{Palette and colors}). См. также @ref{Area}, @ref{Bars}, @ref{Stem}. @sref{Region sample} +Функции закрашивают область между 2 кривыми. График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{x.nx=y1.nx=y2.nx} и размеры массивов @var{y1}, @var{y2} должны быть также одинаковы. Строка @var{pen} задает цвет (@pxref{Line styles}). По умолчанию (@code{pen=""}) используется текущий цвет из палитры (@pxref{Palette and colors}). Также можно использовать градиентное закрашивание если число указанных цветов равно удвоенному числу кривых для построения. См. также @ref{Area}, @ref{Bars}, @ref{Stem}. @sref{Region sample} @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Region (@code{const mglData &}x, @code{const mglData &}y1, @code{const mglData &}y2, @code{const char *}pen=@code{""}, @code{float} zVal=@code{NAN}, @code{bool} inside=@code{true}) @deftypefnx {Функция С} @code{void} mgl_region_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y1, @code{const HMDT} y2, @code{const char *}pen, @code{int} inside) -Закрашивает область между кривыми @{@var{x}[i], @var{y1}[i]@} и @{@var{x}[i], @var{y2}[i]@} при z=@var{zVal}. +Закрашивает область между кривыми @{@var{x}[i], @var{y1}[i]@} и @{@var{x}[i], @var{y2}[i]@} при z=@var{zVal}. При @code{inside=off} закрашивается только область y12}). Строка @var{sch} задает цвет контуров: цвет k-го контура определяется символом @code{sch[k%strlen(sch)]}. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @var{x.nx=z.nx && y.nx=z.ny} или @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Dens}, @ref{Cont}, @ref{ContF}. @sref{ContD sample} +Рисует закрашенные линии (контуры) уровня для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z} = @var{zVal} (или при @var{z=v}[k] если @code{zVal==NAN}) цветами заданными явно. Линии уровня рисуются для @var{z}[i,j]=@var{v}[k] (должно быть @code{v.nx>2}). Строка @var{sch} задает цвет контуров: цвет k-го контура определяется символом @code{sch[k%strlen(sch)]}. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Dens}, @ref{Cont}, @ref{ContF}. @sref{ContD sample} @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} ContD (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) @@ -1625,13 +1652,13 @@ Setsize: размер(ы) равны нулю или отрицательны @end deftypefn @c ================================================================== -@node Axial, Grid, ContD, 2D plotting +@node Axial, Grad, ContD, 2D plotting @subsection Axial @cindex Axial @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Axial (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}) @deftypefnx {Функция С} @code{void} mgl_axial_xy_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch) -Рисует поверхность вращения линии уровня для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Линии уровня рисуются для @var{z}[i,j]=@var{v}[k]. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{#}, то рисуется сетчатая поверхность. Если строка содержит символы @samp{x}, @samp{y} или @samp{z}, то ось вращения (@pxref{Other settings}) устанавливается в указанное направление. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @var{x.nx=z.nx && y.nx=z.ny} или @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Cont}, @ref{ContF}, @ref{Torus}, @ref{Surf3}. @sref{Axial sample} +Рисует поверхность вращения линии уровня для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Линии уровня рисуются для @var{z}[i,j]=@var{v}[k]. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{#}, то рисуется сетчатая поверхность. Если строка содержит символы @samp{x}, @samp{y} или @samp{z}, то ось вращения (@pxref{Other settings}) устанавливается в указанное направление. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Cont}, @ref{ContF}, @ref{Torus}, @ref{Surf3}. @sref{Axial sample} @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Axial (@code{const mglData &}v, @code{const mglData &}z, @code{const char *}sch=@code{""}) @@ -1650,13 +1677,34 @@ Setsize: размер(ы) равны нулю или отрицательны @end deftypefn @c ================================================================== -@node Grid, , Axial, 2D plotting +@node Grad, Grid, Axial, 2D plotting +@subsection Grad +@cindex Grad + +@deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Grad (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}phi, @code{const char *}sch=@code{""}, @code{int} num=@code{5}) +@deftypefnx {Функция С} @code{void} mgl_grad_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal) +Рисует линии градиента скалярного поля @var{phi}[i,j,k] заданного параметрически @{@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]@}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Число линий пропорционально @var{num}. Линии рисуются только с границ интервала при @var{num}<0. Младшие размерности массивов @var{x}, @var{y}, @var{z}, @var{phi} должны быть одинаковы @code{x.nx=phi.nx && y.nx=phi.ny && z.nx=phi.nz} или @code{x.nx=y.nx=z.nx=phi.nx && x.ny=y.ny=z.ny=phi.ny && x.nz=y.nz=z.nz=phi.nz}. Массивы @var{x}, @var{y} и @var{z} могут быть векторами (не матрицами как @var{phi}). См. также @ref{Dens3}, @ref{Cont3}, @ref{Flow}. +@end deftypefn + + +@deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Grad (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{5}, @code{float} zVal=@code{NAN}) +@deftypefnx {Функция С} @code{void} mgl_grad_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal) +Рисует линии градиента скалярного поля @var{phi}[i,j] заданного параметрически @{@var{x}[i,j], @var{y}[i,j]@} при @var{z} = @var{zVal}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Число линий пропорционально @var{num}. Линии рисуются только с границ интервала при @var{num}<0. Младшие размерности массивов @var{x}, @var{y}, @var{phi} должны быть одинаковы @code{x.nx=phi.nx && y.nx=phi.ny} или @code{x.nx=y.nx=phi.nx && x.ny=y.ny=phi.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{phi}). График строится для каждого z среза данных. См. также @ref{Dens}, @ref{Cont}, @ref{ContF}, @ref{Flow}. @sref{Grad sample} +@end deftypefn + +@deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Grad (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{int} num=@code{5}, @code{float} zVal=@code{NAN}) +@deftypefnx {Функция С} @code{void} mgl_grad (@code{HMGL} gr, @code{const HMDT} z, @code{const char *}sch, @code{int} num, @code{float} zVal) +Как предыдущий с @var{x}, @var{y} равно распределенными в интервале [@var{Min}, @var{Max}]. +@end deftypefn + +@c ================================================================== +@node Grid, , Grad, 2D plotting @subsection Grid @cindex Grid @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Grid (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) @deftypefnx {Функция С} @code{void} mgl_grid_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal) -Рисует плоскую сету для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z} = @var{zVal}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @var{x.nx=z.nx && y.nx=z.ny} или @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Dens}, @ref{Cont}, @ref{ContF}. +Рисует плоскую сету для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} при @var{z} = @var{zVal}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Dens}, @ref{Cont}, @ref{ContF}. @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Grid (@code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) @@ -1669,7 +1717,7 @@ Setsize: размер(ы) равны нулю или отрицательны @node 3D plotting, Dual plotting, 2D plotting, MathGL core @section 3D графики -Эти функции строят графики для трехмерных (3D) массивов. Трехмерными считаются массивы, зависящие от трех параметров (индексов) подобно матрице @math{f(x_i,y_j,z_k), i=1...n, j=1...m, k=1...l}. Есть 5 основных типов 3D графиков: поверхность постоянного уровня (Surf3), график плотности на срезе (Dens3), линии уровня на срезе (Cont3), закрашенные контуры уровня на срезе (ContF3) и график объемной прозрачности типа облака (Cloud). В функциях Cont3(), ContF3() и Surf3() значения уровней можно задавать автоматически и вручную. Можно также нарисовать на срезе сетку (Grid3) по массиву данных для улучшения вида графика плотности или линий уровня. Каждый тип графика имеет похожий интерфейс. Есть версия для рисования одного массива с автоматическими координатами и версия для параметрически заданного массива. Параметры цветовой схемы задаются строкой @xref{Color scheme}. +Эти функции строят графики для трехмерных (3D) массивов. Трехмерными считаются массивы, зависящие от трех параметров (индексов) подобно матрице @math{f(x_i,y_j,z_k), i=1...n, j=1...m, k=1...l}. Есть 5 основных типов 3D графиков: поверхность постоянного уровня (Surf3), график плотности на срезе (Dens3), линии уровня на срезе (Cont3), закрашенные контуры уровня на срезе (ContF3) и график объемной прозрачности типа облака (Cloud). В функциях Cont3(), ContF3() и Surf3() значения уровней можно задавать автоматически и вручную. Можно также нарисовать на срезе сетку (Grid3) по массиву данных для улучшения вида графика плотности или линий уровня. Каждый тип графика имеет похожий интерфейс. Есть версия для рисования одного массива с автоматическими координатами и версия для параметрически заданного массива. Параметры цветовой схемы задаются строкой @xref{Color scheme}. @sref{3D plot sample} @menu * Surf3:: @@ -1740,7 +1788,7 @@ Setsize: размер(ы) равны нулю или отрицательны @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Cont3 (@code{const mglData &}v, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}a, @code{char} dir, @code{int} sVal=@code{-1}, @code{const char *}stl=@code{""}) @deftypefnx {Функция С} @code{void} mgl_cont3_xyz_val (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} a, @code{char} dir, @code{int} sVal, @code{const char *}stl) -Рисует линии уровня для 3d массива, заданного параметрически @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]). Линии рисуются для значений из массива @var{v} на срезе @var{sVal} в направлении @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{stl} содержит @samp{#}, то на срезе рисуется сетка. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы. Массивы @var{x}, @var{y}, @var{z} могут быть векторами (не 3d массивами как @var{a}). См. также @ref{Dens3}, @ref{ContF3}, @ref{Cont}, @ref{Grid3}. @sref{Cont3 sample} +Рисует линии уровня для 3d массива, заданного параметрически @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]). Линии рисуются для значений из массива @var{v} на срезе @var{sVal} в направлении @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@}. Строка @var{stl} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{stl} содержит @samp{#}, то на срезе рисуется сетка. Если @var{sch} содержит @samp{t} или @samp{T}, то значения @var{v}[k] будут выведены вдоль контуров над (или под) кривой. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы. Массивы @var{x}, @var{y}, @var{z} могут быть векторами (не 3d массивами как @var{a}). См. также @ref{Dens3}, @ref{ContF3}, @ref{Cont}, @ref{Grid3}. @sref{Cont3 sample} @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Cont3 (@code{const mglData &}v, @code{const mglData &}a, @code{char} dir, @code{int} sVal=@code{-1}, @code{const char *}sch=@code{""}) @@ -1864,7 +1912,7 @@ Setsize: размер(ы) равны нулю или отрицательны @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Beam (@code{float} val, @code{const mglData &}tr, @code{const mglData &}g1, @code{const mglData &}g2, @code{const mglData &}a, @code{float} r, @code{const char *}stl=@code{""}, @code{int} flag=@code{0}) @deftypefnx {Функция С} @code{void} mgl_beam_val (@code{HMGL} gr, @code{float} val, @code{const HMDT} tr, @code{const HMDT} g1, @code{const HMDT} g2, @code{const HMDT} a, @code{float} r, @code{const char *}stl, @code{int} flag) -Рисует поверхность уровня для 3d массива @var{a} при постоянном значении @var{a}=@var{val}. Это специальный тип графика для @var{a} заданным в сопровождающей системе координат вдоль кривой @var{tr} с ортами @var{g1}, @var{g2} и с поперечным размером @var{r}. Переменная @var{flag} -- битовый флаг: @samp{0x1} - рисовать в сопровождающих (не лабораторных) координатах; @samp{0x2} - рисовать проекцию на плоскость @math{\rho-z}; @samp{0x4} - рисовать нормированное в каждом сечении поле. Размеры массивов по 1-му индексу @var{tr}, @var{g1}, @var{g2} должны быть nx>2. Размеры массивов по 2-му индексу @var{tr}, @var{g1}, @var{g2} и размер по 3-му индексу массива @var{a} должны быть одинаковы. @xref{Surf3}. +Рисует поверхность уровня для 3d массива @var{a} при постоянном значении @var{a}=@var{val}. Это специальный тип графика для @var{a} заданного в сопровождающей системе координат вдоль кривой @var{tr} с ортами @var{g1}, @var{g2} и с поперечным размером @var{r}. Переменная @var{flag} -- битовый флаг: @samp{0x1} - рисовать в сопровождающих (не лабораторных) координатах; @samp{0x2} - рисовать проекцию на плоскость @math{\rho-z}; @samp{0x4} - рисовать нормированное в каждом сечении поле. Размеры массивов по 1-му индексу @var{tr}, @var{g1}, @var{g2} должны быть nx>2. Размеры массивов по 2-му индексу @var{tr}, @var{g1}, @var{g2} и размер по 3-му индексу массива @var{a} должны быть одинаковы. См. также @ref{Surf3}. @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Beam (@code{const mglData &}tr, @code{const mglData &}g1, @code{const mglData &}g2, @code{const mglData &}a, @code{float} r, @code{const char *}stl=@code{""}, @code{int} flag=@code{0}, @code{int} num=@code{3}) @@ -1897,7 +1945,7 @@ Setsize: размер(ы) равны нулю или отрицательны @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} SurfC (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}) @deftypefnx {Функция С} @code{void} mgl_surfc_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch) -Рисует параметрически заданную поверхность @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} с цветом, заданным массивом @var{c}[i,j]. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{#}, то на поверхности рисуется сетка. Все размеры массивов @var{z} и @var{c} должны быть одинаковы. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @var{x.nx=z.nx && y.nx=z.ny} или @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Surf}, @ref{SurfA}, @ref{Surf3C}. @sref{SurfC sample} +Рисует параметрически заданную поверхность @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} с цветом, заданным массивом @var{c}[i,j]. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{#}, то на поверхности рисуется сетка. Все размеры массивов @var{z} и @var{c} должны быть одинаковы. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Surf}, @ref{SurfA}, @ref{Surf3C}. @sref{SurfC sample} @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} SurfC (@code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}) @@ -1939,7 +1987,7 @@ Setsize: размер(ы) равны нулю или отрицательны @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} SurfA (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}) @deftypefnx {Функция С} @code{void} mgl_surfa_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch) -Рисует параметрически заданную поверхность @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} с прозрачностью, заданным массивом @var{c}[i,j]. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{#}, то на поверхности рисуется сетка. Все размеры массивов @var{z} и @var{c} должны быть одинаковы. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @var{x.nx=z.nx && y.nx=z.ny} или @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Surf}, @ref{SurfC}, @ref{Surf3A}, @ref{TileS}. @sref{SurfA sample} +Рисует параметрически заданную поверхность @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@} с прозрачностью, заданным массивом @var{c}[i,j]. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если @var{sch} содержит @samp{#}, то на поверхности рисуется сетка. Все размеры массивов @var{z} и @var{c} должны быть одинаковы. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{Surf}, @ref{SurfC}, @ref{Surf3A}, @ref{TileS}. @sref{SurfA sample} @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} SurfA (@code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}) @@ -1980,7 +2028,7 @@ Setsize: размер(ы) равны нулю или отрицательны @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} TileS (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}r, @code{const char *}sch=@code{""}) @deftypefnx {Функция С} @code{void} mgl_tiles_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} r, @code{const char *}sch) -Рисует плитки для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Аналогично Tile(), но размер плиток задается массивов @var{r}. Это создает эффект "прозрачности" при экспорте в файлы EPS. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @var{x.nx=z.nx && y.nx=z.ny} или @var{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{SurfA}, @ref{Tile}. @sref{TileS sample} +Рисует плитки для параметрически заданной поверхности @{@var{x}[i,j], @var{y}[i,j], @var{z}[i,j]@}. Аналогично Tile(), но размер плиток задается массивов @var{r}. Это создает эффект "прозрачности" при экспорте в файлы EPS. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Младшие размерности массивов @var{x}, @var{y}, @var{z} должны быть одинаковы @code{x.nx=z.nx && y.nx=z.ny} или @code{x.nx=y.nx=z.nx && x.ny=y.ny=z.ny}. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{z}). График строится для каждого z среза данных. См. также @ref{SurfA}, @ref{Tile}. @sref{TileS sample} @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} TileS (@code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}) @@ -2010,7 +2058,7 @@ Setsize: размер(ы) равны нулю или отрицательны @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} STFA (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}re, @code{const mglData &}im, @code{int} dn, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) @deftypefnx {Функция С} @code{void} mgl_stfa_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} re, @code{const HMDT} im, @code{int} dn, @code{const char *}sch, @code{float} zVal) -Рисует спектрограмму комплексного массива @var{re}+i*@code{im} для Фурье размером @var{dn} точек в плоскости @var{z=zVal}. Параметр @var{dn} -- любое четное число. Например в 1D случае, результатом будет график плотности от массива @math{res[i,j]=|\sum_d^dn exp(I*j*d)*(re[i*dn+d]+I*im[i*dn+d])|/dn} размером @{int(nx/dn), dn, ny@}. Массивы @var{re}, @var{im} параметрически зависят от координат @var{x}, @var{y}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Все размеры массивов @var{re} и @var{im} должны быть одинаковы. Младшие размерности массивов @var{x}, @var{y}, @var{re} должны быть одинаковы. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{re}). @xref{Color scheme}. +Рисует спектрограмму комплексного массива @var{re}+i*@code{im} для Фурье размером @var{dn} точек в плоскости @var{z=zVal}. Параметр @var{dn} -- любое четное число. Например в 1D случае, результатом будет график плотности от массива @math{res[i,j]=|\sum_d^dn exp(I*j*d)*(re[i*dn+d]+I*im[i*dn+d])|/dn} размером @{int(nx/dn), dn, ny@}. Массивы @var{re}, @var{im} параметрически зависят от координат @var{x}, @var{y}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Все размеры массивов @var{re} и @var{im} должны быть одинаковы. Младшие размерности массивов @var{x}, @var{y}, @var{re} должны быть одинаковы. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{re}). @sref{STFA sample} @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} STFA (@code{const mglData &}re, @code{const mglData &}im, @code{int} dn, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) @@ -2021,9 +2069,9 @@ Setsize: размер(ы) равны нулю или отрицательны @c ################################################################## @node Vector fields, Other plotting, Dual plotting, MathGL core -@section Векторные графики +@section Векторные поля -Эти функции рисуют графики для 2D и 3D векторных полей. Есть несколько 5 типов графиков: просто векторное поле (Vect), вектора вдоль траектории (Traj), векторное поле каплями (Dew), нити тока (Flow, FlowP), трубки тока (Pipe). Каждый тип графика имеет похожий интерфейс. Есть версия для рисования одного массива с автоматическими координатами и версия для параметрически заданного массива. Параметры цветовой схемы задаются строкой @xref{Color scheme}. +Эти функции рисуют графики для 2D и 3D векторных полей. Есть несколько типов графиков: просто векторное поле (Vect), вектора вдоль траектории (Traj), векторное поле каплями (Dew), нити тока (Flow, FlowP), трубки тока (Pipe). Каждый тип графика имеет похожий интерфейс. Есть версия для рисования одного массива с автоматическими координатами и версия для параметрически заданного массива. Параметры цветовой схемы задаются строкой @xref{Color scheme}. @menu * Traj:: @@ -2093,7 +2141,7 @@ Setsize: размер(ы) равны нулю или отрицательны @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Flow (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}ax, @code{const mglData &}ay, @code{const char *}sch=@code{""}, @code{int} num=@code{5}, @code{bool} central=@code{true}, @code{float} zVal=@code{NAN}) @deftypefnx {Функция С} @code{void} mgl_flow_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} ax, @code{const HMDT} ay, @code{const char *}sch, @code{int} num, @code{int} central, @code{float} zVal) -Рисует нити тока для векторного поля @{@var{ax}, @var{ay}@}, параметрически зависящего от координат @var{x}, @var{y} на плоскости при z = @var{zVal}. Число нитей пропорционально @var{num}. Параметр @var{central} задает возможность старта нитей изнутри сетки (если true) или только с краев (если false). Цвет нитей пропорционален @math{\sqrt@{ax^2+ay^2@}}. Теплые цвета соответствуют нормальному току (типа стока). Холодные цвета соответствуют обратному току (типа источника). Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Все размеры массивов @var{ax} и @var{ay} должны быть одинаковы. Младшие размерности массивов @var{x}, @var{y} и @var{ax} должны быть одинаковы. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{ax}). График строится для каждого z среза @var{ax}, @var{ay}. См. также @ref{Pipe}, @ref{Vect}. @sref{Flow sample} +Рисует нити тока для векторного поля @{@var{ax}, @var{ay}@}, параметрически зависящего от координат @var{x}, @var{y} на плоскости при z = @var{zVal}. Число нитей пропорционально @var{num}. Параметр @var{central} задает возможность старта нитей изнутри сетки (если true) или только с краев (если false). С версии 1.11 он игнорируется и всегда равен (@var{num}>0). Цвет нитей пропорционален @math{\sqrt@{ax^2+ay^2@}}. Теплые цвета соответствуют нормальному току (типа стока). Холодные цвета соответствуют обратному току (типа источника). Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Все размеры массивов @var{ax} и @var{ay} должны быть одинаковы. Младшие размерности массивов @var{x}, @var{y} и @var{ax} должны быть одинаковы. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{ax}). График строится для каждого z среза @var{ax}, @var{ay}. См. также @ref{Pipe}, @ref{Vect}. @sref{Flow sample} @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Flow (@code{const mglData &}ax, @code{const mglData &}ay, @code{const char *}sch=@code{""}, @code{int} num=@code{5}, @code{bool} central=@code{true}, @code{float} zVal=@code{NAN}) @@ -2103,7 +2151,7 @@ Setsize: размер(ы) равны нулю или отрицательны @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Flow (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}ax, @code{const mglData &}ay, @code{const mglData &}az, @code{const char *}sch=@code{""}, @code{int} num=@code{3}, @code{bool} central=@code{true}) @deftypefnx {Функция С} @code{void} mgl_flow_xyz (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} ax, @code{const HMDT} ay, @code{const HMDT} az, @code{const char *}sch, @code{int} num, @code{int} central) -Это 3D версия графика. Здесь массивы @var{ax}, @var{ay}, @var{az} должны быть 3d массивами, а цвет пропорциональны @math{\sqrt@{ax^2+ay^2+az^2@}}. @sref{Flow 3D sample} +Это 3D версия графика. Здесь массивы @var{ax}, @var{ay}, @var{az} должны быть 3d массивами, а цвет пропорционален @math{\sqrt@{ax^2+ay^2+az^2@}}. @sref{Flow 3D sample} @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Flow (@code{const mglData &}ax, @code{const mglData &}ay, @code{const mglData &}az, @code{const char *}sch=@code{""}, @code{int} num=@code{3}, @code{bool} central=@code{true}) @@ -2148,7 +2196,7 @@ Setsize: размер(ы) равны нулю или отрицательны @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Pipe (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}ax, @code{const mglData &}ay, @code{const char *}sch=@code{""}, @code{float} r0=@code{0.05}, @code{int} num=@code{5}, @code{bool} central=@code{true}, @code{float} zVal=@code{NAN}) @deftypefnx {Функция С} @code{void} mgl_pipe_xy (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} ax, @code{const HMDT} ay, @code{const char *}sch, @code{float} r0, @code{int} num, @code{int} central, @code{float} zVal) -Рисует трубки тока для векторного поля @{@var{ax}, @var{ay}@}, параметрически зависящего от координат @var{x}, @var{y} на плоскости при z = @var{zVal}. Число трубок пропорционально @var{num}. Параметр @var{central} задает возможность старта трубок изнутри сетки (если true) или только с краев (если false). Цвет и радиус трубок пропорционален @math{\sqrt@{ax^2+ay^2@}}. Теплые цвета соответствуют нормальному току (типа стока). Холодные цвета соответствуют обратному току (типа источника). Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Параметр @var{r0} задает радиус трубок. При @var{r0}<0 радиус трубок обратно пропорционален их амплитуде. Все размеры массивов @var{ax} и @var{ay} должны быть одинаковы. Младшие размерности массивов @var{x}, @var{y} и @var{ax} должны быть одинаковы. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{ax}). График строится для каждого z среза @var{ax}, @var{ay}. См. также @ref{Pipe}, @ref{Vect}. @sref{Pipe sample} +Рисует трубки тока для векторного поля @{@var{ax}, @var{ay}@}, параметрически зависящего от координат @var{x}, @var{y} на плоскости при z = @var{zVal}. Число трубок пропорционально @var{num}. Параметр @var{central} задает возможность старта трубок изнутри сетки (если true) или только с краев (если false). С версии 1.11 он игнорируется и всегда равен (@var{num}>0). Цвет и радиус трубок пропорционален @math{\sqrt@{ax^2+ay^2@}}. Теплые цвета соответствуют нормальному току (типа стока). Холодные цвета соответствуют обратному току (типа источника). Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Параметр @var{r0} задает радиус трубок. При @var{r0}<0 радиус трубок обратно пропорционален их амплитуде. Все размеры массивов @var{ax} и @var{ay} должны быть одинаковы. Младшие размерности массивов @var{x}, @var{y} и @var{ax} должны быть одинаковы. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{ax}). График строится для каждого z среза @var{ax}, @var{ay}. См. также @ref{Flow}, @ref{Vect}. @sref{Pipe sample} @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Pipe (@code{const mglData &}ax, @code{const mglData &}ay, @code{const char *}sch=@code{""}, @code{float} r0=@code{0.05}, @code{int} num=@code{5}, @code{bool} central=@code{true}, @code{float} zVal=@code{NAN}) @@ -2180,6 +2228,8 @@ Setsize: размер(ы) равны нулю или отрицательны * Dots:: * Crust:: * TriPlot:: +* TriCont:: +* QuadPlot:: * Plots by formula:: * SimplePlot:: @end menu @@ -2322,7 +2372,7 @@ gr->ContZ(c.Sum("z"),0,-1); @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} Crust (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} er=@code{0}) @deftypefnx {Функция С} @code{void} mgl_crust (@code{HMGL} gr, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} er) -Функция реконструирует и рисует поверхность по произвольно расположенным точкам @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Параметр @var{er} задает радиус ошибки (увеличте для удаления дыр). Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если строка содержит @samp{#}, то рисуется сетчатая поверхность. Массивы @var{x}, @var{y}, @var{z} должны иметь одинаковые размеры. См. также @ref{Dots}, @ref{TriPlot}. @sref{Crust sample} +Реконструирует и рисует поверхность по произвольно расположенным точкам @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Параметр @var{er} задает радиус ошибки (увеличте для удаления дыр). Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если строка содержит @samp{#}, то рисуется сетчатая поверхность. Массивы @var{x}, @var{y}, @var{z} должны иметь одинаковые размеры. См. также @ref{Dots}, @ref{TriPlot}. @sref{Crust sample} @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++)} @code{void} Crust (@code{const mglData &}tr, @code{const char *}sch=@code{""}, @code{float} er=@code{0}) @@ -2331,7 +2381,7 @@ gr->ContZ(c.Sum("z"),0,-1); @end deftypefn @c ================================================================== -@node TriPlot, Plots by formula, Crust, Other plotting +@node TriPlot, TriCont, Crust, Other plotting @subsection TriPlot @cindex TriPlot @@ -2339,7 +2389,7 @@ gr->ContZ(c.Sum("z"),0,-1); @deftypefnx {Метод класса @code{mglGraph} (C++, Python)} @code{void} TriPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}) @deftypefnx {Функция С} @code{void} mgl_triplot_xyz (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch) @deftypefnx {Функция С} @code{void} mgl_triplot_xyzc (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch) -Рисует поверхность из треугольников. Вершины треугольников задаются индексами @var{id} в массиве точек @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если строка содержит @samp{#}, то рисуется сетчатая поверхность. Размер по 1-му индексу массива @var{id} должен быть 3 или больше. Массивы @var{x}, @var{y}, @var{z} должны иметь одинаковые размеры. Массив @var{c} задает цвет треугольников (если @var{id}.ny=@var{c}.nx) или цвет вершин (если @var{x}.nx=@var{c}.nx). См. также @ref{Dots}, @ref{Crust}. +Рисует поверхность из треугольников. Вершины треугольников задаются индексами @var{id} в массиве точек @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если строка содержит @samp{#}, то рисуется сетчатая поверхность. Размер по 1-му индексу массива @var{id} должен быть 3 или больше. Массивы @var{x}, @var{y}, @var{z} должны иметь одинаковые размеры. Массив @var{c} задает цвет треугольников (если @var{id}.ny=@var{c}.nx) или цвет вершин (если @var{x}.nx=@var{c}.nx). См. также @ref{Dots}, @ref{Crust}, @ref{QuadPlot}, @ref{TriCont}. @end deftypefn @deftypefn {Метод класса @code{mglGraph} (C++, Python)} @code{void} TriPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) @@ -2348,7 +2398,43 @@ gr->ContZ(c.Sum("z"),0,-1); @end deftypefn @c ================================================================== -@node Plots by formula, SimplePlot, TriPlot, Other plotting +@node TriCont, QuadPlot, TriPlot, Other plotting +@subsection TriCont +@cindex TriCont + +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} TriContV (@code{const mglData &}v, @code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) +@deftypefnx {Method on @code{mglGraph} (C++, Python)} @code{void} TriContV (@code{const mglData &}v, @code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) +@deftypefnx {C function} @code{void} mgl_tricont_xyzcv (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch, @code{float} zVal) +@deftypefnx {C function} @code{void} mgl_tricont_xyzv (@code{HMGL} gr, @code{const HMDT} v, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{float} zVal) +Рисует линии уровня поверхности из треугольников при @var{z} = @var{zVal} (или для @var{z=v}[k] если @code{zVal==NAN}). Вершины треугольников задаются индексами @var{id} в массиве точек @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Размер по 1-му индексу массива @var{id} должен быть 3 или больше. Массивы @var{x}, @var{y}, @var{z} должны иметь одинаковые размеры. Массив @var{c} задает цвет треугольников (если @var{id}.ny=@var{c}.nx) или цвет вершин (если @var{x}.nx=@var{c}.nx). См. также @ref{TriPlot}, @ref{Cont}. +@end deftypefn + +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} TriCont (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}, @code{num}=@code{7}, @code{float} zVal=@code{NAN}) +@deftypefnx {Method on @code{mglGraph} (C++, Python)} @code{void} TriCont (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}, @code{num}=@code{7}, @code{float} zVal=@code{NAN}) +@deftypefnx {C function} @code{void} mgl_tricont_xyzc (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch, @code{num}, @code{float} zVal) +@deftypefnx {C function} @code{void} mgl_tricont_xyz (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch, @code{num}, @code{float} zVal) +Аналогично предыдущему с вектором @var{v} из @var{num} элементов равно распределенных в интервале [@var{Cmin}, @var{Cmax}]. +@end deftypefn + +@c ================================================================== +@node QuadPlot, Plots by formula, TriCont, Other plotting +@subsection QuadPlot +@cindex QuadPlot + +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const mglData &}c, @code{const char *}sch=@code{""}) +@deftypefnx {Method on @code{mglGraph} (C++, Python)} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z, @code{const char *}sch=@code{""}) +@deftypefnx {C function} @code{void} mgl_quadplot_xyz (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const char *}sch) +@deftypefnx {C function} @code{void} mgl_quadplot_xyzc (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z, @code{const HMDT} c, @code{const char *}sch) +Рисует поверхность из четырехугольников. Вершины четырехугольников задаются индексами @var{id} в массиве точек @{@var{x}[i], @var{y}[i], @var{z}[i]@}. Строка @var{sch} задает цветовую схему. Предыдущая цветовая схема используется по умолчанию. Если строка содержит @samp{#}, то рисуется сетчатая поверхность. Размер по 1-му индексу массива @var{id} должен быть 4 или больше. Массивы @var{x}, @var{y}, @var{z} должны иметь одинаковые размеры. Массив @var{c} задает цвет четырехугольников (если @var{id}.ny=@var{c}.nx) или цвет вершин (если @var{x}.nx=@var{c}.nx). См. также @ref{TriPlot}. +@end deftypefn + +@deftypefn {Method on @code{mglGraph} (C++, Python)} @code{void} QuadPlot (@code{const mglData &}id, @code{const mglData &}x, @code{const mglData &}y, @code{const char *}sch=@code{""}, @code{float} zVal=@code{NAN}) +@deftypefnx {C function} @code{void} mgl_quadplot_xy (@code{HMGL} gr, @code{const HMDT} id, @code{const HMDT} x, @code{const HMDT} y, @code{const char *}sch, @code{float} zVal) +Как предыдущий с @var{z}[i]=@var{zVal}. +@end deftypefn + +@c ================================================================== +@node Plots by formula, SimplePlot, QuadPlot, Other plotting @subsection Графики функций @cindex Plot @cindex Surf @@ -2395,7 +2481,7 @@ gr->ContZ(c.Sum("z"),0,-1); @cindex Fit2 @cindex Fit3 -Эти функции подбирают параметры функции для наилучшей аппроксимации данных, т.е. минимизируют сумму @math{\sum_i (f(x_i, y_i, z_i) - a_i)^2/s_i^2}. При этом аппроксимирующая функция @samp{f} может зависеть от 1 аргументы @samp{x} (1D случай), от двух аргументов @samp{x,y} (2D случай) или от трех аргументов @samp{x,y,z} (3D случай). Функция @samp{f} также может зависеть от параметров. Список параметров задается строкой @var{var} (например, @samp{abcd}). Обычно пользователь должен предоставить начальные значения параметров в переменной @var{ini}. Однако, при его отсутствии используются нулевые значения. Параметр @var{print}=@code{true} включает вывод найденной формулы в @var{Message} (@pxref{Error handling}). +Эти функции подбирают параметры функции для наилучшей аппроксимации данных, т.е. минимизируют сумму @math{\sum_i (f(x_i, y_i, z_i) - a_i)^2/s_i^2}. При этом аппроксимирующая функция @samp{f} может зависеть от одного аргумента @samp{x} (1D случай), от двух аргументов @samp{x,y} (2D случай) или от трех аргументов @samp{x,y,z} (3D случай). Функция @samp{f} также может зависеть от параметров. Список параметров задается строкой @var{var} (например, @samp{abcd}). Обычно пользователь должен предоставить начальные значения параметров в переменной @var{ini}. Однако, при его отсутствии используются нулевые значения. Параметр @var{print}=@code{true} включает вывод найденной формулы в @var{Message} (@pxref{Error handling}). Функции Fit() и FitS() не рисуют полученные массивы. Они заполняют массив @var{fit} по формуле @samp{f} с найденными коэффициентами и возвращают @math{\chi^2} ошибку аппроксимации. При этом, координаты @samp{x,y,z} равнораспределены в интервале @var{Min}--@var{Max}. Число точек в @var{fit} выбирается максимальным из размера массива @var{fit} и значения переменной @var{FitPnts}. Функции используют библиотеку GSL. @sref{Fitting sample} diff --git a/texinfo/png_static/cut.png b/texinfo/cut.png similarity index 100% rename from texinfo/png_static/cut.png rename to texinfo/cut.png diff --git a/texinfo/data_en.texi b/texinfo/data_en.texi index c1a1681..ffc8eeb 100644 --- a/texinfo/data_en.texi +++ b/texinfo/data_en.texi @@ -1,8 +1,7 @@ @c ------------------------------------------------------------------ -@node mglData class, Other classes, Widget classes, Top @chapter mglData class -Class for working with data array. This class is defined in @code{#include }. The class has functions for easy and safe allocation, resizing, loading and saving, modifying of data arrays. Also it can numerically differentiate and integrate data, interpolate, fill data by formula and so on. Class supports data with dimensions up to 3 (like function of 3 variables - x,y,z). The internal representation of numbers is float. Float type was chosen because it has smaller size in memory and usually it has enough precision in plotting purposes. +Class for working with data array. This class is defined in @code{#include }. The class has functions for easy and safe allocation, resizing, loading and saving, modifying of data arrays. Also it can numerically differentiate and integrate data, interpolate, fill data by formula and so on. Class supports data with dimensions up to 3 (like function of 3 variables -- x,y,z). The internal representation of numbers is float. Float type was chosen because it has smaller size in memory and usually it has enough precision in plotting purposes. @menu * Public variables:: @@ -11,7 +10,7 @@ Class for working with data array. This class is defined in @code{#include &}d) @@ -122,14 +121,11 @@ Fills the value of array according to the formula in string @var{eq}. Formula is @end deftypefn @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Modify (@code{const char *}eq, @code{int} dim=@code{0}) -@deftypefnx {C function} @code{void} mgl_data_modify (@code{HMDT} dat, @code{const char *}eq, @code{int} dim) -Function fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. Variable @samp{u} is the original value of the array. Modification will be fulfilled only for slices >=@var{dim}. -@end deftypefn - -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Modify (@code{const char *}eq, @code{const mglData &}v) +@deftypefnx {Method on @code{mglData} (C++, Python)} @code{void} Modify (@code{const char *}eq, @code{const mglData &}v) @deftypefnx {Method on @code{mglData} (C++, Python)} @code{void} Modify (@code{const char *}eq, @code{const mglData &}v, @code{const mglData &}w) +@deftypefnx {C function} @code{void} mgl_data_modify (@code{HMDT} dat, @code{const char *}eq, @code{int} dim) @deftypefnx {C function} @code{void} mgl_data_modify_vw (@code{HMDT} dat, @code{const char *}eq, @code{const HMDT} v, @code{const HMDT} w) -Function fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. Variable @samp{u} is the original value of the array. Variables @samp{v} and @samp{w} are values of @var{vdat}, @var{wdat}. +Fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Coordinates @samp{x}, @samp{y}, @samp{z} are supposed to be normalized in range [0,1] (in difference from @code{Fill} functions). Variable @samp{u} is the original value of the array. Variables @samp{v} and @samp{w} are values of @var{vdat}, @var{wdat} which can be @code{NULL} (i.e. can be omitted). If @var{dim}>0 is specified then modification will be fulfilled only for slices >=@var{dim}. @end deftypefn @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Put (@code{float} val, @code{int} i=@code{-1}, @code{int} j=@code{-1}, @code{int} k=@code{-1}) @@ -202,7 +198,7 @@ Transposes (shift order of) dimensions of the data. New order of dimensions is s @end deftypefn @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Squeeze (@code{int} rx, @code{int} ry=@code{1}, @code{int} rz=@code{1}, @code{bool} smooth=@code{false}) @deftypefnx {C function} @code{void} mgl_data_squeeze (@code{HMDT} dat, @code{int} rx, @code{int} ry, @code{int} rz, @code{int} smooth) -Reduces the data size by excluding data elements which indexes are not divisible by @var{rx}, @var{ry}, @var{rz} correspondingly. Parameter @var{squeeze} set to use smoothing +Reduces the data size by excluding data elements which indexes are not divisible by @var{rx}, @var{ry}, @var{rz} correspondingly. Parameter @var{smooth} set to use smoothing @iftex (i.e. @math{a_{out}[i]=\sum_{j=i,i+r}a[j]/r}) or not (i.e. @math{a_{out}[i]=a[j*r]}). @end iftex @@ -249,15 +245,6 @@ Delete @var{num} slices along @var{dir}-direction at position @var{pos}. @node File I/O, Make another data, Rearrange, mglData class @section File I/O @cindex Read -@cindex ReadMat -@cindex ReadAll -@cindex ReadRange -@cindex ReadHDF -@cindex Save -@cindex SaveHDF -@cindex Export -@cindex Import - @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Read (@code{const char *}fname) @deftypefnx {C function} @code{void} mgl_data_read (@code{HMDT} dat, @code{const char *}fname) Reads data from tab-separated text file with auto determining sizes of the data. @@ -266,58 +253,55 @@ Reads data from tab-separated text file with auto determining sizes of the data. @deftypefnx {C function} @code{void} mgl_data_read_dim (@code{HMDT} dat, @code{const char *}fname, @code{int} mx, @code{int} my, @code{int} mz) Reads data from text file with specified data sizes. This function does nothing if one of parameters @var{mx}, @var{my} or @var{mz} is zero or negative. @end deftypefn +@cindex ReadMat @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} ReadMat (@code{const char *}fname, @code{int} dim=@code{2}) @deftypefnx {C function} @code{void} mgl_data_read_mat (@code{HMDT} dat, @code{const char *}fname, @code{int} dim) Read data from text file with size specified at beginning of the file by first @var{dim} numbers. At this, variable @var{dim} set data dimensions. @end deftypefn +@cindex ReadRange @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} ReadRange (@code{const char *}templ, @code{float} from, @code{float} to, @code{float} step=@code{1.f}, @code{bool} as_slice=@code{false}) Join data arrays from several text files. The file names are determined by function call @code{sprintf(fname,templ,val);}, where @var{val} changes from @var{from} to @var{to} with step @var{step}. The data load one-by-one in the same slice if @var{as_slice}=@code{false} or as slice-by-slice if @var{as_slice}=@code{true}. @end deftypefn +@cindex ReadAll @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} ReadAll (@code{const char *}templ, @code{bool} as_slice=@code{false}) Join data arrays from several text files which filenames satisfied the template @var{templ} (for example, @var{templ}=@code{"t_*.dat"}). The data load one-by-one in the same slice if @var{as_slice}=@code{false} or as slice-by-slice if @var{as_slice}=@code{true}. @end deftypefn +@cindex Save @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Save (@code{const char *}fname, @code{int} ns=@code{-1}) @code{const} @deftypefnx {C function} @code{void} mgl_data_save (@code{const HMDT} dat, @code{const char *}fname, @code{int} ns) -Saves the whole data array (for @var{ns}=@code{-1}) or only ns-th slice to text file. If @var{ns}>0 then only @var{ns}-th slice (or column for 2D array) will be saved. +Saves the whole data array (for @var{ns}=@code{-1}) or only @var{ns}-th slice to text file. @end deftypefn +@cindex ReadHDF @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} ReadHDF (@code{const char *}fname, @code{const char *}dname) -Reads data array named @var{dname} from HDF file. This function does nothing if NO_HDF5 was defined during library compilation. +Reads data array named @var{dname} from HDF5 or HDF4 file. This function does nothing if NO_HDF5|NO_HDF4 was defined during library compilation. @end deftypefn +@cindex SaveHDF @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} SaveHDF (@code{const char *}fname, @code{const char *}dname, @code{bool} rewrite=@code{false}) @code{const} -Saves data array named @var{dname} from HDF file. This function does nothing if NO_HDF5 was defined during library compilation. +Saves data array named @var{dname} from HDF5 or HDF4 file. This function does nothing if NO_HDF5|NO_HDF4 was defined during library compilation. @end deftypefn +@cindex Import @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Import (@code{const char *}fname, @code{const char *}scheme, @code{float} v1=@code{0}, float v2=@code{1}) @deftypefnx {C function} @code{void} mgl_data_import (@code{HMDT} dat, @code{const char *}fname, @code{const char *}scheme, @code{float} v1, float v2) Reads data from bitmap file (now support only PNG format). The RGB values of bitmap pixels are transformed to float values in range [@var{v1}, @var{v2}] using color scheme @var{scheme} (@pxref{Color scheme}). @end deftypefn +@cindex Export @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Export (@code{const char *}fname, @code{const char *}scheme, @code{float} v1=@code{0}, float v2=@code{0}, @code{int} ns=@code{-1}) const @deftypefnx {C function} @code{void} mgl_data_export (@code{HMDT} dat, @code{const char *}fname, @code{const char *}scheme, @code{float} v1, float v2, @code{int} ns) const Saves data matrix (or @code{ns}-th slice for 3d data) to bitmap file (now support only PNG format). The data values are transformed from range [@var{v1}, @var{v2}] to RGB pixels of bitmap using color scheme @var{scheme} (@pxref{Color scheme}). If @var{v1}>=@var{v2} then the values of @var{v1}, @var{v2} are automatically determined as minimal and maximal value of the data array. @end deftypefn @c ------------------------------------------------------------------ -@node Make another data, Functions on direction, File I/O, mglData class +@node Make another data, Change data, File I/O, mglData class @section Make another data -@cindex SubData -@cindex Column -@cindex SetColumnId -@cindex Hist -@cindex Momentum -@cindex Sum -@cindex Max -@cindex Min -@cindex Combine -@cindex Evaluate -@cindex Resize -@cindex Trace +@cindex SubData @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} SubData (@code{int} xx, @code{int} yy=@code{-1}, @code{int} zz=@code{-1}) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_subdata (@code{const HMDT} dat, @code{int} xx, @code{int} yy, @code{int} zz) -Extracts sub-array data from the original data array keeping fixed positive index. For example @code{SubData(-1,2)} extracts 3d row (indexes are zero based), @code{SubData(4,-1)} extracts 5th column, @code{SubData(-1,-1,3)} extracts 4th slice and so on. The most convenient way is to use this function as initialization of other @code{mglData} variable like @code{mglData a1(a.SubData(-1,-1,3))}. +Extracts sub-array data from the original data array keeping fixed positive index. For example @code{SubData(-1,2)} extracts 3d row (indexes are zero based), @code{SubData(4,-1)} extracts 5th column, @code{SubData(-1,-1,3)} extracts 4th slice and so on. @end deftypefn @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} SubData (@code{const mglData &}xx, @code{const mglData &}yy, @code{const mglData &}zz) @code{const} @@ -325,19 +309,24 @@ Extracts sub-array data from the original data array keeping fixed positive inde Extracts sub-array data from the original data array for indexes specified by arrays @var{xx}, @var{yy}, @var{zz} (indirect access). The resulting array have the same dimensions as input arrays for 2D and 3D arguments. This function work like previous one for 1D arguments (or numbers). The dimensions of all argument must be the same if they are 2D or 3D arrays. @end deftypefn +@cindex Column @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Column (@code{const char *}eq) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_column (@code{const HMDT} dat, @code{const char *}eq) Get column (or slice) of the data filled by formula @var{eq} of other named columns. For example, @code{Column("n*w^2/exp(t)");}. The column ids must be defined first by @code{SetColumnId()} function. @end deftypefn + +@cindex SetColumnId @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} SetColumnId (@code{const char *}ids) @deftypefnx {C function} @code{void} mgl_data_set_id (@code{HMDT} dat, @code{const char *}ids) Set the symbol id for data columns. The string must contain one symbol 'a'...'z' per column (without spaces). @end deftypefn +@cindex Trace @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Trace () @code{const} Gets array of diagonal elements a[i,i] (for 2D case) or a[i,i,i] (for 3D case) where i=0...nx-1. Function return copy of itself for 1D case. Data array must have dimensions ny,nz >= nx or ny,nz = 1. @end deftypefn +@cindex Hist @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Hist (@code{int} n, @code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{int} nsub=@code{0}) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_hist (@code{const HMDT} dat, @code{int} n, @code{float} v1, @code{float} v2, @code{int} nsub) Creates @var{n}-th points distribution of the data values in range [@var{v1}, @var{v2}]. Parameter @var{nsub} define the number of additional interpolated points (for smoothness of histogram). @@ -346,6 +335,8 @@ Creates @var{n}-th points distribution of the data values in range [@var{v1}, @v @deftypefnx {C function} @code{HMDT} mgl_data_hist_w (@code{const HMDT} dat, @code{const HMDT} w, @code{int} n, @code{float} v1, @code{float} v2, @code{int} nsub) Creates @var{n}-th points distribution of the data values in range [@var{v1}, @var{v2}]. Array @var{w} specifies weights of the data elements. Parameter @var{nsub} define the number of additional interpolated points (for smoothness of histogram). @end deftypefn + +@cindex Momentum @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Momentum (@code{char} dir, @code{const char *}how) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_momentum (@code{const HMDT} dat, @code{char} dir, @code{const char *}how) Get momentum (1D-array) of the data along direction @var{dir}. String @var{how} contain kind of momentum. The momentum is defined like as @@ -358,33 +349,39 @@ res_k = \sum_ij how(x_i,y_j,z_k) a_ij/ \sum_ij a_ij if @var{var}=@samp{z} and so on. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. @end deftypefn +@cindex Sum @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Sum (@code{const char *}dir) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_sum (@code{const HMDT} dat, @code{const char *}dir) Gets array which is the result of summation in given direction or direction(s). @end deftypefn +@cindex Max @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Max (@code{const char *}dir) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_max_dir (@code{const HMDT} dat, @code{const char *}dir) Gets array which is the maximal data values in given direction or direction(s). @end deftypefn +@cindex Min @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Min (@code{const char *}dir) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_min_dir (@code{const HMDT} dat, @code{const char *}dir) Gets array which is the maximal data values in given direction or direction(s). @end deftypefn +@cindex Combine @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Combine (@code{const mglData &}a) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_combine (@code{const HMDT} dat, @code{const HMDT} a) Return direct multiplication of arrays (like, res[i,j] = this[i]*a[j] and so on). @end deftypefn +@cindex Evaluate @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Evaluate (@code{const mglData &}idat, @code{bool} norm=@code{true}) @code{const} @deftypefnx {Method on @code{mglData} (C++, Python)} @code{mglData} Evaluate (@code{const mglData &}idat, @code{const mglData &}jdat, @code{bool} norm=@code{true}) @code{const} @deftypefnx {Method on @code{mglData} (C++, Python)} @code{mglData} Evaluate (@code{const mglData &}idat, @code{const mglData &}jdat, @code{const mglData &}kdat, @code{bool} norm=@code{true}) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_evaluate_i (@code{const HMDT} dat, @code{const HMDT} idat, @code{int} norm) @deftypefnx {C function} @code{HMDT} mgl_data_evaluate_ij (@code{const HMDT} dat, @code{const HMDT} idat, @code{const HMDT} jdat, @code{int} norm) @deftypefnx {C function} @code{HMDT} mgl_data_evaluate_ijk (@code{const HMDT} dat, @code{const HMDT} idat, @code{const HMDT} jdat, @code{const HMDT} kdat, @code{int} norm) -Get array which values is result of interpolation of original array for coordinates from other arrays. All dimensions must be the same for data @var{idat}, @var{jdat}, @var{kdat}. Coordinates from @var{idat}, @var{jdat}, @var{kdat} are supposed to be normalized in range [0,1] (if @var{norm}=@code{true}) or in range [0,nx], [0,ny], [0,nz] correspondingly. +Get array which values is result of interpolation of original array for coordinates from other arrays. All dimensions must be the same for data @var{idat}, @var{jdat}, @var{kdat}. Coordinates from @var{idat}, @var{jdat}, @var{kdat} are supposed to be normalized in range [0,1] (if @var{norm}=@code{true}) or in ranges [0,nx], [0,ny], [0,nz] correspondingly. @end deftypefn +@cindex Resize @deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Resize (@code{int} mx, @code{int} my=@code{1}, @code{int} mz=@code{1}, @code{float} x1=@code{0}, @code{float} x2=@code{1}, @code{float} y1=@code{0}, @code{float} y2=@code{1}, @code{float} z1=@code{0}, @code{float} z2=@code{1}) @code{const} @deftypefnx {C function} @code{HMDT} mgl_data_resize (@code{const HMDT} dat, @code{int} mx, @code{int} my, @code{int} mz) @deftypefnx {C function} @code{HMDT} mgl_data_resize_box (@code{const HMDT} dat, @code{int} mx, @code{int} my, @code{int} mz, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2, @code{float} z1, @code{float} z2) @@ -392,72 +389,108 @@ Resizes the data to new size @var{mx}, @var{my}, @var{mz} from box (part) [@var{ @end deftypefn @c ------------------------------------------------------------------ -@node Functions on direction, Interpolation, Make another data, mglData class -@section Functions on direction -@cindex CumSum -@cindex Integral -@cindex Diff -@cindex Diff2 -@cindex Swap -@cindex Mirror -@cindex Sew -@cindex Smooth -@cindex Envelop -@cindex Norm -@cindex NormSl +@node Change data, Interpolation, Make another data, mglData class +@section Change data These functions change the data in some direction like differentiations, integrations and so on. The direction in which the change will applied is specified by the string parameter, which may contain @samp{x}, @samp{y} or @samp{z} characters for 1-st, 2-nd and 3-d dimension correspondengly. +@cindex CumSum @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} CumSum (@code{const char *}dir) @deftypefnx {C function} @code{void} mgl_data_cumsum (@code{HMDT} dat, @code{const char *}dir) -CCumulative summation of the data in given direction or directions. +Cumulative summation of the data in given direction or directions. @end deftypefn + +@cindex Integral @deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Integral (@code{const char *}dir) @deftypefnx {C function} @code{void} mgl_data_integral (@code{HMDT} dat, @code{const char *}dir) Integrates (like cumulative summation) the data in given direction or directions. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Diff (@code{const char *}dir) -@deftypefnx {C function} @code{void} mgl_data_diff (@code{HMDT} dat, @code{const char *}dir) + +@cindex Diff +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Diff (@code{const char *}dir) +@deftypefnx {Функция С} @code{void} mgl_data_diff (@code{HMDT} dat, @code{const char *}dir) Differentiates the data in given direction or directions. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Diff (@code{const mglData &}x, @code{const mglData &}y) -@deftypefnx {Method on @code{mglData} (C++, Python)} @code{void} Diff (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z) -@deftypefnx {C function} @code{void} mgl_data_diff_par (@code{HMDT} dat, @code{const HMDT} x, @code{const HMDT}y, @code{const HMDT}z) +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Diff (@code{const mglData &}x, @code{const mglData &}y) +@deftypefnx {Метод класса @code{mglData} (C++, Python)} @code{void} Diff (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z) +@deftypefnx {Функция С} @code{void} mgl_data_diff_par (@code{HMDT} dat, @code{const HMDT} x, @code{const HMDT}y, @code{const HMDT}z) Differentiates the data specified parametrically in direction @var{x} with @var{y}, @var{z}=constant. Parametrical differentiation uses the formula (for 2D case): @math{da/dx = (a_j*y_i-a_i*y_j)/(x_j*y_i-x_i*y_j)} where @math{a_i=da/di, a_j=da/dj} denotes usual differentiation along 1st and 2nd dimensions. The similar formula is used for 3D case. Note, that you may change the order of arguments -- for example, if you have 2D data a(i,j) which depend on coordinates @{x(i,j), y(i,j)@} then usual derivative along @samp{x} will be @code{Diff(x,y);} and usual derivative along @samp{y} will be @code{Diff(y,x);}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Diff2 (@code{const char *}dir) -@deftypefnx {C function} @code{void} mgl_data_diff2 (@code{const char *}dir) +@cindex Diff2 +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Diff2 (@code{const char *}dir) +@deftypefnx {Функция С} @code{void} mgl_data_diff2 (@code{const char *}dir) Double-differentiates (like Laplace operator) the data in given direction. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Swap (@code{const char *}dir) -@deftypefnx {C function} @code{void} mgl_data_swap (@code{HMDT} dat, @code{const char *}dir) + +@cindex SinFFT +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} SinFFT (@code{const char *}dir) +@deftypefnx {Функция С} @code{void} mgl_data_sinfft (@code{HMDT} dat, @code{const char *}dir) +Do Sine transform of the data in given direction or directions. The Sine transform is @math{\sum a_i \sin(k i)}. +@end deftypefn + +@cindex CosFFT +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} CosFFT (@code{const char *}dir) +@deftypefnx {Функция С} @code{void} mgl_data_cosfft (@code{HMDT} dat, @code{const char *}dir) +Do Cosine transform of the data in given direction or directions. The Cosine transform is @math{\sum a_i \cos(k i)}. +@end deftypefn + +@cindex Hankel +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Hankel (@code{const char *}dir) +@deftypefnx {Функция С} @code{void} mgl_data_hankel (@code{HMDT} dat, @code{const char *}dir) +Do Hankel transform of the data in given direction or directions. The Hankel transform is @math{\sum a_i J_0(k i)}. +@end deftypefn + + +@cindex Swap +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Swap (@code{const char *}dir) +@deftypefnx {Функция С} @code{void} mgl_data_swap (@code{HMDT} dat, @code{const char *}dir) Swaps the left and right part of the data in given direction (useful for Fourier spectrum). @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Mirror (@code{const char *}dir) -@deftypefnx {C function} @code{void} mgl_data_mirror (@code{HMDT} dat, @code{const char *}dir) + +@cindex Roll +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Roll (@code{char} dir, @code{num}) +@deftypefnx {Функция С} @code{void} mgl_data_roll (@code{HMDT} dat, @code{char} dir, @code{num}) +Rolls the data along direction @var{dir}. Resulting array will be out[i] = ini[(i+num)%nx] if @code{dir='x'}. +@end deftypefn + +@cindex Mirror +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Mirror (@code{const char *}dir) +@deftypefnx {Функция С} @code{void} mgl_data_mirror (@code{HMDT} dat, @code{const char *}dir) Mirror the left-to-right part of the data in given direction. Looks like change the value index @var{i}->@var{n-i}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Sew (@code{const char *}dir, @code{float} da=@code{2*M_PI}) -@deftypefnx {C function} @code{void} mgl_data_sew (@code{HMDT} dat, @code{const char *}dir, @code{float} da) + +@cindex Sew +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Sew (@code{const char *}dir, @code{float} da=@code{2*M_PI}) +@deftypefnx {Функция С} @code{void} mgl_data_sew (@code{HMDT} dat, @code{const char *}dir, @code{float} da) Remove value steps (like phase jumps after inverse trigonometric functions) with period @var{da} in given direction. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Smooth (@code{int} Type, @code{const char *}dir, @code{float} delta=@code{0}) -@deftypefnx {C function} @code{void} mgl_data_smooth (@code{HMDT} dat, @code{int} Type, @code{float} delt, @code{const char *}dirs) + +@cindex Smooth +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Smooth (@code{int} Type, @code{const char *}dir, @code{float} delta=@code{0}) +@deftypefnx {Функция С} @code{void} mgl_data_smooth (@code{HMDT} dat, @code{int} Type, @code{float} delt, @code{const char *}dirs) Smooths the data on specified direction or directions by method @var{Type}. Now 4 methods are supported: @code{SMOOTH_NONE} does nothing for @var{delta}=0 or approaches data to zero with the step @var{delta}, @code{SMOOTH_LINE_3} linear averaging by 3 points, @code{SMOOTH_LINE_5} linear averaging by 5 points, @code{SMOOTH_QUAD_5} quadratic averaging by 5 points. Parameter @var{delta} forbids to change values of array more than @var{delta} from the original ones. String @var{dirs} specifies the dimensions which will be smoothed. It may contain characters: 'x' for 1st dimension, 'y' for 2nd dimension, 'z' for 3d dimension. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Smooth (@code{const char *}dir) +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Smooth (@code{const char *}dir) Smooths the data on specified direction(s). This is the same as @code{Smooth()} but argument @var{Type} is specified in string as @samp{0} for @code{SMOOTH_NONE}, @samp{3} for @code{SMOOTH_LINE_3}, @samp{5} for @code{SMOOTH_LINE_5}. If string @var{dir} don't contain digits @samp{035} then @var{Type}=@code{SMOOTH_QUAD_5} is used. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Envelop (@code{char} dir=@code{'x'}) -@deftypefnx {C function} @code{void} mgl_data_envelop (@code{HMDT} dat, @code{char} dir) + +@cindex Envelop +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Envelop (@code{char} dir=@code{'x'}) +@deftypefnx {Функция С} @code{void} mgl_data_envelop (@code{HMDT} dat, @code{char} dir) Find envelop for data values along direction @var{dir}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} NormSl (@code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{char} dir=@code{'z'}, @code{bool} keep_en=@code{true}, @code{bool} sym=@code{false}) -@deftypefnx {C function} @code{void} mgl_data_norm_slice (@code{HMDT} dat, @code{float} v1, @code{float} v2, @code{char} dir, @code{int} keep_en, @code{int} sym) +@cindex Norm +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Norm (@code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{bool} sym=@code{false}, @code{int} dim=@code{0}) +Normalizes the data to range [@var{v1},@var{v2}]. If flag @var{sym}=@code{true} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. Modification will be applied only for slices >=@var{dim}. +@end deftypefn + +@cindex NormSl +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} NormSl (@code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{char} dir=@code{'z'}, @code{bool} keep_en=@code{true}, @code{bool} sym=@code{false}) +@deftypefnx {Функция С} @code{void} mgl_data_norm_slice (@code{HMDT} dat, @code{float} v1, @code{float} v2, @code{char} dir, @code{int} keep_en, @code{int} sym) Normalizes data slice-by-slice along direction @var{dir} the data in slices to range [@var{v1},@var{v2}]. If flag @var{sym}=@code{true} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. If @var{keep_en} is set then maximal value of k-th slice will be limited by @iftex @math{\sqrt{\sum a_{ij}(k)/\sum a_{ij}(0)}}. @@ -466,40 +499,36 @@ Normalizes data slice-by-slice along direction @var{dir} the data in slices to r @math{\sqrt@{\sum a_ij(k)/\sum a_ij(0)@}}. @end ifnottex @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Norm (@code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{bool} sym=@code{false}, @code{int} dim=@code{0}) -Normalizes the data to range [@var{v1},@var{v2}]. If flag @var{sym}=@code{true} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. Modification will be applied only for slices >=@var{dim}. -@end deftypefn @c ------------------------------------------------------------------ -@node Interpolation, Informational functions, Functions on direction, mglData class +@node Interpolation, Informational functions, Change data, mglData class @section Interpolation @cindex Spline -@cindex Spline1 -@cindex Linear -@cindex Linear1 -@cindex Spline5 -@cindex v - @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Spline (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}) @code{const} @deftypefnx {C function} @code{float} mgl_data_spline (@code{const HMDT} dat, @code{float} x, @code{float} y, @code{float} z) Interpolates data by cubic spline to the given point @var{x} in [0...nx-1], @var{y} in [0...ny-1], @var{z} in [0...nz-1]. @end deftypefn +@cindex Spline1 @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Spline1 (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}) @code{const} @deftypefnx {C function} @code{float} mgl_data_spline1 (@code{const HMDT} dat, @code{float} x, @code{float} y, @code{float} z) Interpolates data by cubic spline to the given point @var{x}, @var{y}, @var{z} which assumed to be normalized in range [0, 1]. @end deftypefn +@cindex Linear @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Linear (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}) @code{const} @deftypefnx {C function} @code{float} mgl_data_linear (@code{const HMDT} dat, @code{float} x, @code{float} y, @code{float} z) Interpolates data by linear function to the given point @var{x} in [0...nx-1], @var{y} in [0...ny-1], @var{z} in [0...nz-1]. @end deftypefn +@cindex Linear1 @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Linear1 (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}) @code{const} @deftypefnx {C function} @code{float} mgl_data_linear1 (@code{const HMDT} dat, @code{float} x, @code{float} y, @code{float} z) Interpolates data by linear function to the given point @var{x}, @var{y}, @var{z} which assumed to be normalized in range [0, 1]. @end deftypefn +@cindex v @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} v (@code{int} i, @code{int} j=@code{0}, @code{int} k=@code{0}) @code{const} @deftypefnx {C function} @code{float} mgl_data_get_value (@code{const HMDT} dat, @code{int} i, @code{int} j, @code{int} k) Gets the value in specified cell of the data with border checking. @end deftypefn +@cindex Spline5 @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Spline5 (@code{float} x, @code{float} y, @code{float} z, @code{float} &dx, @code{float} &dy, @code{float} &dz) @code{const} Interpolate by 5-th order splain the data to given point @var{x}, @var{y}, @var{z} which normalized in range [0, 1] and evaluate its derivatives. @end deftypefn @@ -515,68 +544,67 @@ Gets the pointer to internal data array. @node Informational functions, Operators, Interpolation, mglData class @section Informational functions @cindex PrintInfo -@cindex Maximal -@cindex Minimal -@cindex Momentum -@cindex Find -@cindex Last -@cindex FindAny - -@deftypefn {Method on @code{mglData} (C++)} @code{void} PrintInfo (@code{char *}buf, @code{bool} all=@code{false}) @code{const} +@deftypefn {Метод класса @code{mglData} (C++)} @code{void} PrintInfo (@code{char *}buf, @code{bool} all=@code{false}) @code{const} Print information about the data (sizes and momentum) to string @var{buf}. Parameter @var{all} set to print most of information (if @code{true}) or just basic one like dimensions, maximal an minimal values. @end deftypefn -@deftypefn {Method on @code{mglData} (C++)} @code{void} PrintInfo (@code{FILE *}fp) @code{const} -Print information about the data (sizes and momentum) to FILE (for example, stdout) +@deftypefn {Метод класса @code{mglData} (C++)} @code{void} PrintInfo (@code{FILE *}fp) @code{const} +Print information about the data (sizes and momentum) to FILE (for example, stdout). @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Maximal () @code{const} -@deftypefnx {C function} @code{float} mgl_data_max (@code{const HMDT} dat) +@cindex Maximal +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Maximal () @code{const} +@deftypefnx {Функция С} @code{float} mgl_data_max (@code{const HMDT} dat) Gets maximal value of the data. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Minimal () @code{const} -@deftypefnx {C function} @code{float} mgl_data_min (@code{HMDT} dat) @code{const} +@cindex Minimal +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Minimal () @code{const} +@deftypefnx {Функция С} @code{float} mgl_data_min (@code{HMDT} dat) @code{const} Gets minimal value of the data. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Maximal (@code{int} &i, @code{int} &j, @code{int} &k) @code{const} -@deftypefnx {C function} @code{float} mgl_data_max_int (@code{const HMDT} dat, @code{int} *i, @code{int} *j, @code{int} *k) +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Maximal (@code{int} &i, @code{int} &j, @code{int} &k) @code{const} +@deftypefnx {Функция С} @code{float} mgl_data_max_int (@code{const HMDT} dat, @code{int} *i, @code{int} *j, @code{int} *k) Gets maximal value of the data and its position in the array to variables @var{i}, @var{j}, @var{k}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Minimal (@code{int} &i, @code{int} &j, @code{int} &k) @code{const} -@deftypefnx {C function} @code{float} mgl_data_min_int (@code{const HMDT} dat, @code{int} *i, @code{int} *j, @code{int} *k) +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Minimal (@code{int} &i, @code{int} &j, @code{int} &k) @code{const} +@deftypefnx {Функция С} @code{float} mgl_data_min_int (@code{const HMDT} dat, @code{int} *i, @code{int} *j, @code{int} *k) Gets minimal value of the data and its position in the array to variables @var{i}, @var{j}, @var{k}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Maximal (@code{float} &i, @code{float} &j, @code{float} &k) @code{const} -@deftypefnx {C function} @code{float} mgl_data_max_real (@code{const HMDT} dat, @code{float} *x, @code{float} *y, @code{float} *z) +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Maximal (@code{float} &i, @code{float} &j, @code{float} &k) @code{const} +@deftypefnx {Функция С} @code{float} mgl_data_max_real (@code{const HMDT} dat, @code{float} *x, @code{float} *y, @code{float} *z) Gets maximal value of the data and its approximated (interpolated) position to variables @var{i}, @var{j}, @var{k}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Minimal (@code{float} &i, @code{float} &j, @code{float} &k) @code{const} -@deftypefnx {C function} @code{float} mgl_data_min_real (@code{const HMDT} dat, @code{float} *x, @code{float} *y, @code{float} *z) +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Minimal (@code{float} &i, @code{float} &j, @code{float} &k) @code{const} +@deftypefnx {Функция С} @code{float} mgl_data_min_real (@code{const HMDT} dat, @code{float} *x, @code{float} *y, @code{float} *z) Gets minimal value of the data and its approximated (interpolated) position to variables @var{i}, @var{j}, @var{k}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Momentum (@code{char} dir, @code{float} &m, @code{float} &w) @code{const} -@deftypefnx {C function} @code{float} mgl_data_momentum_mw (@code{const HMDT} dat, @code{char} dir, @code{float} *m, @code{float} *w) +@cindex Momentum +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Momentum (@code{char} dir, @code{float} &m, @code{float} &w) @code{const} +@deftypefnx {Функция С} @code{float} mgl_data_momentum_mw (@code{const HMDT} dat, @code{char} dir, @code{float} *m, @code{float} *w) Gets zero-momentum (energy, @math{I=\sum a_i}) and write first momentum (median, @math{m = \sum \xi_i a_i/I}) and second momentum (width, @math{w^2 = \sum (\xi_i-m)^2 a_i/I}) to variables. Here @math{\xi} is corresponding coordinate if @var{dir} is @samp{'x'}, @samp{'y'} or @samp{'z'}. Otherwise median is @math{m = \sum a_i/N}, width is @math{w^2 = \sum (a_i-m)^2/N}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++)} @code{float} Momentum (@code{char} dir, @code{float} &m, @code{float} &w, @code{float} &s, @code{float} &k) @code{const} -Gets zero-momentum (energy, @math{I=\sum a_i}) and write first momentum (median, @math{m = \sum \xi_i a_i/I}), second momentum (width, @math{w^2 = \sum (\xi_i-m)^2 a_i/I}, third momentum (skewness, @math{s = \sum (\xi_i-m)^3 a_i/ I w^3}) and fourth momentum (kurtosis, @math{k = \sum (\xi_i-m)^4 a_i / 3 I w^4})) to variables. Here @math{\xi} is corresponding coordinate if @var{dir} is @samp{'x'}, @samp{'y'} or @samp{'z'}. Otherwise median is @math{m = \sum a_i/N}, width is @math{w^2 = \sum (a_i-m)^2/N} and so on. +@deftypefn {Метод класса @code{mglData} (C++)} @code{float} Momentum (@code{char} dir, @code{float} &m, @code{float} &w, @code{float} &s, @code{float} &k) @code{const} +Gets zero-momentum (energy, @math{I=\sum a_i}) and write first momentum (median, @math{m = \sum \xi_i a_i/I}), second momentum (width, @math{w^2 = \sum (\xi_i-m)^2 a_i/I}), third momentum (skewness, @math{s = \sum (\xi_i-m)^3 a_i/ I w^3}) and fourth momentum (kurtosis, @math{k = \sum (\xi_i-m)^4 a_i / 3 I w^4}) to variables. Here @math{\xi} is corresponding coordinate if @var{dir} is @samp{'x'}, @samp{'y'} or @samp{'z'}. Otherwise median is @math{m = \sum a_i/N}, width is @math{w^2 = \sum (a_i-m)^2/N} and so on. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Find (@code{const char *}cond, @code{int} &i, @code{int} &j, @code{int} &k) @code{const} -@deftypefnx {C function} @code{float} mgl_data_first (@code{const HMDT} dat, @code{const char *}cond, @code{int} *i, @code{int} *j, @code{int} *k) +@cindex Find +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Find (@code{const char *}cond, @code{int} &i, @code{int} &j, @code{int} &k) @code{const} +@deftypefnx {Функция С} @code{float} mgl_data_first (@code{const HMDT} dat, @code{const char *}cond, @code{int} *i, @code{int} *j, @code{int} *k) Find position (after specified in @var{i}, @var{j}, @var{k}) of first nonzero value of formula @var{cond}. Function return the data value at found position. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Last (@code{const char *}cond, @code{int} &i, @code{int} &j, @code{int} &k) @code{const} -@deftypefnx {C function} @code{float} mgl_data_last (@code{const HMDT} dat, @code{const char *}cond, @code{int} *i, @code{int} *j, @code{int} *k) +@cindex Last +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Last (@code{const char *}cond, @code{int} &i, @code{int} &j, @code{int} &k) @code{const} +@deftypefnx {Функция С} @code{float} mgl_data_last (@code{const HMDT} dat, @code{const char *}cond, @code{int} *i, @code{int} *j, @code{int} *k) Find position (before specified in @var{i}, @var{j}, @var{k}) of last nonzero value of formula @var{cond}. Function return the data value at found position. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{int} Find (@code{const char *}cond, @code{char} dir, @code{int} i=@code{0}, @code{int} j=@code{0}, @code{int} k=@code{0}) @code{const} -@deftypefnx {C function} @code{float} mgl_data_find (@code{const HMDT} dat, @code{const char *}cond, @code{int} i, @code{int} j, @code{int} k) +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{int} Find (@code{const char *}cond, @code{char} dir, @code{int} i=@code{0}, @code{int} j=@code{0}, @code{int} k=@code{0}) @code{const} +@deftypefnx {Функция С} @code{float} mgl_data_find (@code{const HMDT} dat, @code{const char *}cond, @code{int} i, @code{int} j, @code{int} k) Return position of first in direction @var{dir} nonzero value of formula @var{cond}. The search is started from point @{i,j,k@}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{bool} FindAny (@code{const char *}cond) @code{const} -@deftypefnx {C function} @code{float} mgl_data_find_any (@code{const HMDT} dat, @code{const char *}cond) +@cindex FindAny +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{bool} FindAny (@code{const char *}cond) @code{const} +@deftypefnx {Функция С} @code{float} mgl_data_find_any (@code{const HMDT} dat, @code{const char *}cond) Determines if any nonzero value of formula in the data array. @end deftypefn @@ -666,32 +694,32 @@ These functions are not methods of @code{mglData} class. However it have additio @deftypefn {Global function} @code{mglData} mglTransform (@code{const mglData &}real, @code{const mglData &}imag, @code{const char *}type) @deftypefnx {C function} @code{HMDT} mgl_transform (@code{const HMDT} real, @code{const HMDT} imag, @code{const char *}type) -Do integral transformation of complex data @var{real}, @var{imag} on specified direction. Now only Fourier transformation is supported. The order of transformations is specified in string @var{type}: first character for x-dimension, second one for y-dimension, third one for z-dimension. The possible character are: @samp{f} is forward Fourier transformation, @samp{i} is inverse Fourier transformation, @samp{n} or @samp{ } is no transformation. +Do integral transformation of complex data @var{real}, @var{imag} on specified direction. The order of transformations is specified in string @var{type}: first character for x-dimension, second one for y-dimension, third one for z-dimension. The possible character are: @samp{f} is forward Fourier transformation, @samp{i} is inverse Fourier transformation, @samp{s} is Sine transform, @samp{c} is Cosine transform, @samp{h} is Hankel transform, @samp{n} or @samp{ } is no transformation. @end deftypefn @deftypefn {Global function} @code{mglData} mglTransformA @code{const mglData &}ampl, @code{const mglData &}phase, @code{const char *}type) @deftypefnx {C function} @code{HMDT} mgl_transform_a @code{const HMDT} ampl, @code{const HMDT} phase, @code{const char *}type) -Do integral transformation of complex data @var{ampl}, @var{phase} on specified direction. Now only Fourier transformation is supported. The order of transformations is specified in string @var{type}: first character for x-dimension, second one for y-dimension, third one for z-dimension. The possible character are: @samp{f} is forward Fourier transformation, @samp{i} is inverse Fourier transformation, @samp{n} or @samp{ } is no transformation. +The same as previous but with specified amplitude @var{ampl} and phase @var{phase} of complex numbers. @end deftypefn @deftypefn {Global function} @code{mglData} mglSTFA (@code{const mglData &}real, @code{const mglData &}imag, @code{int} dn, @code{char} dir=@code{'x'}) @deftypefnx {C function} @code{HMDT} mgl_data_stfa (@code{const HMDT} real, @code{const HMDT} imag, @code{int} dn,@code{char} dir) -Short time Fourier analysis for real and imaginary parts. Output is amplitude of partial Fourier of length @var{dn}. For example if @var{dir}=@samp{x}, result will have size @{int(nx/dn), dn, ny@} and it will contain @math{res[i,j,k]=|\sum_d^dn exp(I*j*d)*(real[i*dn+d,k]+I*imag[i*dn+d,k])|/dn}. +Short time Fourier transformation for real and imaginary parts. Output is amplitude of partial Fourier of length @var{dn}. For example if @var{dir}=@samp{x}, result will have size @{int(nx/dn), dn, ny@} and it will contain @math{res[i,j,k]=|\sum_d^dn exp(I*j*d)*(real[i*dn+d,k]+I*imag[i*dn+d,k])|/dn}. @end deftypefn @deftypefn {Global function} @code{mglData} mglPDE (@code{const char *}ham, @code{const mglData &}ini_re, @code{const mglData &}ini_im, @code{mglPoint} Min, @code{mglPoint} Max, @code{float} dz=@code{0.1}, @code{float} k0=@code{100}) @deftypefnx {C function} @code{HMDT} mgl_pde_solve (@code{HMGL} gr, @code{const char *}ham, @code{const HMDT} ini_re, @code{const HMDT} ini_im, @code{float} dz, @code{float} k0) -Solves equation du/dz = i*k0*@var{ham}(p,q,x,y,z,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators. Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Parameters @var{Min}, @var{Max} set the bounding box for the solution. Note, that really this ranges are increased by factor 3/2 for purpose of reducing reflection from boundaries. Parameter @var{dz} set the step along evolutionary coordinate z. At this moment, simplified form of function @var{ham} is supported -- all ``mixed'' terms (like @samp{x*p}->x*d/dx) are excluded. For example, in 2D case this function is effectively @math{ham = f(p,z) + g(x,z,u)}. However commutable combinations (like @samp{x*q}->x*d/dy) are allowed. Here variable @samp{u} is used for field amplitude |u|. This allow one solve nonlinear problems -- for example, for nonlinear Shrodinger equation you may set @code{ham="p^2 + q^2 - u^2"}. You may specify imaginary part for wave absorption, like @code{ham = "p^2 + i*x*(x>0)"}, but only if dependence on variable @samp{i} is linear (i.e. @math{ham = hre+i*him}). @sref{PDE sample} +Solves equation du/dz = i*k0*@var{ham}(p,q,x,y,z,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators. Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Parameters @var{Min}, @var{Max} set the bounding box for the solution. Note, that really this ranges are increased by factor 3/2 for purpose of reducing reflection from boundaries. Parameter @var{dz} set the step along evolutionary coordinate z. At this moment, simplified form of function @var{ham} is supported -- all ``mixed'' terms (like @samp{x*p}->x*d/dx) are excluded. For example, in 2D case this function is effectively @math{ham = f(p,z) + g(x,z,u)}. However commutable combinations (like @samp{x*q}->x*d/dy) are allowed. Here variable @samp{u} is used for field amplitude |u|. This allow one solve nonlinear problems -- for example, for nonlinear Shrodinger equation you may set @code{ham="p^2 + q^2 - u^2"}. You may specify imaginary part for wave absorption, like @code{ham = "p^2 + i*x*(x>0)"}, but only if dependence on variable @samp{i} is linear (i.e. @math{ham = hre+i*him}). @sref{PDE sample} @sref{PDE sample} @end deftypefn @deftypefn {Global function} @code{mglData} mglRay (@code{const char *}ham, @code{mglPoint} r0, @code{mglPoint} p0, @code{float} dt=@code{0.1}, @code{float} tmax=@code{10}) @deftypefnx {C function} @code{HMDT} mgl_ray_trace (@code{const char *}ham, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} px, @code{float} py, @code{float} pz, @code{float} dt, @code{float} tmax) -Solves GO ray equation like dr/dt = d @var{ham}/dp, dp/dt = -d @var{ham}/dr. This is Hamiltonian equations for particle trajectory in 3D case. Here @var{ham} is Hamiltonian which may depend on coordinates @samp{x}, @samp{y}, @samp{z}, momentums @samp{p}=px, @samp{q}=py, @samp{v}=pz and time @samp{t}: @math{ham = H(x,y,z,p,q,v,t)}. The starting point (at @code{t=0}) is defined by variables @var{r0}, @var{p0}. Parameters @var{dt} and @var{tmax} specify the integration step and maximal time for ray tracing. Result is array of @{x,y,z,p,q,v,t@} with dimensions @{7 * int(@var{tmax}/@var{dt}+1) @}. +Solves GO ray equation like dr/dt = d @var{ham}/dp, dp/dt = -d @var{ham}/dr. This is Hamiltonian equations for particle trajectory in 3D case. Here @var{ham} is Hamiltonian which may depend on coordinates @samp{x}, @samp{y}, @samp{z}, momentums @samp{p}=px, @samp{q}=py, @samp{v}=pz and time @samp{t}: @math{ham = H(x,y,z,p,q,v,t)}. The starting point (at @code{t=0}) is defined by variables @var{r0}, @var{p0}. Parameters @var{dt} and @var{tmax} specify the integration step and maximal time for ray tracing. Result is array of @{x,y,z,p,q,v,t@} with dimensions @{7 * int(@var{tmax}/@var{dt}+1) @}. @sref{Beam tracing sample} @end deftypefn @deftypefn {Global function} @code{mglData} mglQO2d (@code{const char *}ham, @code{const mglData &}ini_re, @code{const mglData &}ini_im, @code{const mglData &}ray, @code{float} r=@code{1}, @code{float} k0=@code{100}, @code{mglData *}xx=@code{0}, @code{mglData *}yy=@code{0}, @code{bool} UseR=@code{true}) @deftypefnx {C function} @code{HMDT} mgl_qo2d_solve (@code{const char *}ham, @code{const HMDT} ini_re, @code{const HMDT} ini_im, @code{const HMDT} ray, @code{float} r, @code{float} k0, @code{HMDT} xx, @code{HMDT} yy) -Solves equation du/dt = i*k0*@var{ham}(p,q,x,y,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators (see @code{mglPDE()} for details). Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Parameters @var{ray} set the reference ray, i.e. the ray around which the accompanied coordinate system will be maked. You may use, for example, the array created by @code{mglRay()} function. Note, that the reference ray @strong{must be} smooth enough to make accompanied coodrinates unambiguity. Otherwise errors in the solution may appear. If @var{xx} and @var{yy} are non-zero then Cartesian coordinates for each point will be written into them. @sref{Beam tracing sample} +Solves equation du/dt = i*k0*@var{ham}(p,q,x,y,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators (see @code{mglPDE()} for details). Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Parameters @var{ray} set the reference ray, i.e. the ray around which the accompanied coordinate system will be maked. You may use, for example, the array created by @code{mglRay()} function. Note, that the reference ray @strong{must be} smooth enough to make accompanied coodrinates unambiguity. Otherwise errors in the solution may appear. If @var{xx} and @var{yy} are non-zero then Cartesian coordinates for each point will be written into them. See also @code{mglPDE()}. @sref{Beam tracing sample} @end deftypefn @deftypefn {Global function} @code{mglData} mglJacobian (@code{const mglData &}x, @code{const mglData &}y) diff --git a/texinfo/data_ru.texi b/texinfo/data_ru.texi index c1a1681..7d05004 100644 --- a/texinfo/data_ru.texi +++ b/texinfo/data_ru.texi @@ -1,8 +1,7 @@ @c ------------------------------------------------------------------ -@node mglData class, Other classes, Widget classes, Top -@chapter mglData class +@chapter Класс mglData -Class for working with data array. This class is defined in @code{#include }. The class has functions for easy and safe allocation, resizing, loading and saving, modifying of data arrays. Also it can numerically differentiate and integrate data, interpolate, fill data by formula and so on. Class supports data with dimensions up to 3 (like function of 3 variables - x,y,z). The internal representation of numbers is float. Float type was chosen because it has smaller size in memory and usually it has enough precision in plotting purposes. +Это класс для работы с массивами данных, определенный в @code{#include }. Он содержит функции для выделения памяти и изменения размера данных, чтения данных из файла, численного дифференцирования/интегрирования/интерполяции и пр., заполнения по текстовой формуле и т.д. Класс позволяет работать с данными размерности не более 3 (как функции от трех переменных -- x,y,z). По умолчанию внутреннее представление данных -- float, выбранный в силу меньшего размера занимаемой памяти и достаточной для построения графиков точности. Базовый тип можно сменить на этапе установки (@pxref{Installation and using}) указав опцию @code{--enable-double}. Однако, в дальнейшем в документации будет использован тип @code{float}. @menu * Public variables:: @@ -11,7 +10,7 @@ Class for working with data array. This class is defined in @code{#include 1) names -- one character per column. +Имена колонки (или среза при nz>1) -- один символ на колонку. @end deftypecv @c ------------------------------------------------------------------ @node Create and delete, Fill, Public variables, mglData class -@section Create and delete +@section Создание и удаление @cindex mglData @cindex Set -@defop Constructor mglData @code{} mglData (@code{int} mx=@code{1}, @code{int} my=@code{1}, @code{int} mz=@code{1}) -Default constructor. Allocates the memory for data array and initializes it by zero. +@defop Конструктор @code{mglData} @code{} mglData (@code{int} mx=@code{1}, @code{int} my=@code{1}, @code{int} mz=@code{1}) +Конструктор по умолчанию. Выделяет память для массива данных и заполняет ее нулями. @end defop -@defop Constructor mglData @code{} mglData (@code{const char *}fname) -Initializes the data by reading from file. +@defop Конструктор @code{mglData} @code{} mglData (@code{const char *}fname) +Читает данные из файла. @end defop -@defop Constructor mglData @code{} mglData (@code{const mglData} &dat) -Initiates by other @code{mglData} instance. +@defop Конструктор @code{mglData} @code{} mglData (@code{const mglData} &dat) +Копирует данные из другого экземпляра @code{mglData}. @end defop -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Create (@code{int} mx, @code{int} my=@code{1}, @code{int} mz=@code{1}) -@deftypefnx {C function} @code{void} mgl_data_create (@code{HMDT} dat, @code{int} mx, @code{int} my, @code{int} mz) -Creates or recreates the array with specified size and fills it by zero. This function does nothing if one of parameters @var{mx}, @var{my}, @var{mz} is zero or negative. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Create (@code{int} mx, @code{int} my=@code{1}, @code{int} mz=@code{1}) +@deftypefnx {Функция С} @code{void} mgl_data_create (@code{HMDT} dat, @code{int} mx, @code{int} my, @code{int} mz) +Создает/пересоздает массив данных указанного размера и заполняет его нулями. Ничего не делает при @var{mx}, @var{my}, @var{mz} отрицательных или равных нулю. @end deftypefn -@deftypefn {Method on @code{mglData} (C++)} @code{void} Set (@code{const float *}A, @code{int} NX, @code{int} NY=@code{1}, @code{int} NZ=@code{1}) -@deftypefnx {Method on @code{mglData} (C++)} @code{void} Set (@code{const double *}A, @code{int} NX, @code{int} NY=@code{1}, @code{int} NZ=@code{1}) -@deftypefnx {C function} @code{void} mgl_data_set_float (@code{HMDT} dat, @code{const float *}A, @code{int} NX, @code{int} NY, @code{int} NZ) -@deftypefnx {C function} @code{void} mgl_data_set_double (@code{HMDT} dat, @code{const double *}A, @code{int} NX, @code{int} NY, @code{int} NZ) -Allocates memory and copies the data from the @strong{flat} @code{float*} or @code{double*} array. +@deftypefn {Метод класса @code{mglData} (C++)} @code{void} Set (@code{const float *}A, @code{int} NX, @code{int} NY=@code{1}, @code{int} NZ=@code{1}) +@deftypefnx {Метод класса @code{mglData} (C++)} @code{void} Set (@code{const double *}A, @code{int} NX, @code{int} NY=@code{1}, @code{int} NZ=@code{1}) +@deftypefnx {Функция С} @code{void} mgl_data_set_float (@code{HMDT} dat, @code{const float *}A, @code{int} NX, @code{int} NY, @code{int} NZ) +@deftypefnx {Функция С} @code{void} mgl_data_set_double (@code{HMDT} dat, @code{const double *}A, @code{int} NX, @code{int} NY, @code{int} NZ) +Выделяет память и копирует данные из массивов типа @code{float*} или @code{double*}, т.е. из массивов определенных как @code{float a[NX*NY*NZ];}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++)} @code{void} Set (@code{const float **}A, @code{int} N1, @code{int} N2) -@deftypefnx {Method on @code{mglData} (C++)} @code{void} Set (@code{const double **}A, @code{int} N1, @code{int} N2) -@deftypefnx {C function} @code{void} mgl_data_set_float2 (@code{HMDT} dat, @code{const float **}A, @code{int} N1, @code{int} N2) -@deftypefnx {C function} @code{void} mgl_data_set_double2 (@code{HMDT} dat, @code{const double **}A, @code{int} N1, @code{int} N2) -Allocates memory and copies the data from the @code{float**} or @code{double**} array with dimensions @var{N1}, @var{N2}, i.e. from array defined as @code{float a[N1][N2];}. +@deftypefn {Метод класса @code{mglData} (C++)} @code{void} Set (@code{const float **}A, @code{int} N1, @code{int} N2) +@deftypefnx {Метод класса @code{mglData} (C++)} @code{void} Set (@code{const double **}A, @code{int} N1, @code{int} N2) +@deftypefnx {Функция С} @code{void} mgl_data_set_float2 (@code{HMDT} dat, @code{const float **}A, @code{int} N1, @code{int} N2) +@deftypefnx {Функция С} @code{void} mgl_data_set_double2 (@code{HMDT} dat, @code{const double **}A, @code{int} N1, @code{int} N2) +Выделяет память и копирует данные из массивов типа @code{float**} или @code{double**} с размерностями @var{N1}, @var{N2}, т.е. из массивов определенных как @code{float a[N1][N2];}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++)} @code{void} Set (@code{const float ***}A, @code{int} N1, @code{int} N2) -@deftypefnx {Method on @code{mglData} (C++)} @code{void} Set (@code{const double ***}A, @code{int} N1, @code{int} N2) -@deftypefnx {C function} @code{void} mgl_data_set_float3 (@code{HMDT} dat, @code{const float ***}A, @code{int} N1, @code{int} N2) -@deftypefnx {C function} @code{void} mgl_data_set_double3 (@code{HMDT} dat, @code{const double ***}A, @code{int} N1, @code{int} N2) -Allocates memory and copies the data from the @code{float***} or @code{double***} array with dimensions @var{N1}, @var{N2}, @var{N3}, i.e. from array defined as @code{float a[N1][N2][N3];}. +@deftypefn {Метод класса @code{mglData} (C++)} @code{void} Set (@code{const float ***}A, @code{int} N1, @code{int} N2) +@deftypefnx {Метод класса @code{mglData} (C++)} @code{void} Set (@code{const double ***}A, @code{int} N1, @code{int} N2) +@deftypefnx {Функция С} @code{void} mgl_data_set_float3 (@code{HMDT} dat, @code{const float ***}A, @code{int} N1, @code{int} N2) +@deftypefnx {Функция С} @code{void} mgl_data_set_double3 (@code{HMDT} dat, @code{const double ***}A, @code{int} N1, @code{int} N2) +Выделяет память и копирует данные из массивов типа @code{float***} или @code{double***} с размерностями @var{N1}, @var{N2}, @var{N3}, т.е. из массивов определенных как @code{float a[N1][N2][N3];}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++)} @code{void} Set (@code{gsl_vector *}v) -@deftypefnx {C function} @code{void} mgl_data_set_vector (@code{HMDT} dat, @code{gsl_vector *}v) -Allocates memory and copies the data from the @code{gsl_vector *} structure. +@deftypefn {Метод класса @code{mglData} (C++)} @code{void} Set (@code{gsl_vector *}v) +@deftypefnx {Функция С} @code{void} mgl_data_set_vector (@code{HMDT} dat, @code{gsl_vector *}v) +Выделяет память и копирует данные из структуры типа @code{gsl_vector *}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++)} @code{void} Set (@code{gsl_matrix *}m) -@deftypefnx {C function} @code{void} mgl_data_set_matrix (@code{HMDT} dat, @code{gsl_matrix *}m) -Allocates memory and copies the data from the @code{gsl_matrix *} structure. +@deftypefn {Метод класса @code{mglData} (C++)} @code{void} Set (@code{gsl_matrix *}m) +@deftypefnx {Функция С} @code{void} mgl_data_set_matrix (@code{HMDT} dat, @code{gsl_matrix *}m) +Выделяет память и копирует данные из структуры типа @code{gsl_matrix *}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{inline void} Set (@code{const mglData &}dat) -@deftypefnx {C function} @code{void} mgl_data_set (@code{HMDT} dat, @code{const HMDT} d) -Copies the data from mglData instance @var{dat}. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{inline void} Set (@code{const mglData &}from) +@deftypefnx {Функция С} @code{void} mgl_data_set (@code{HMDT} dat, @code{const HMDT} from) +Выделяет память и копирует данные из другого экземпляра @var{from}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++)} @code{void} Set (@code{const std::vector &}d) -@deftypefnx {Method on @code{mglData} (C++)} @code{void} Set (@code{const std::vector &}d) -@deftypefnx {Method on @code{mglData} (C++)} @code{void} Set (@code{const std::vector &}d) -Allocates memory and copies the data from the @code{std::vector} array. +@deftypefn {Метод класса @code{mglData} (C++)} @code{void} Set (@code{const std::vector &}d) +@deftypefnx {Метод класса @code{mglData} (C++)} @code{void} Set (@code{const std::vector &}d) +@deftypefnx {Метод класса @code{mglData} (C++)} @code{void} Set (@code{const std::vector &}d) +Выделяет память и копирует данные из массива типа @code{std::vector}. @end deftypefn -@deftypefn {Method on @code{mglData} (C+, Python)} @code{void} Set (@code{const char *}str, @code{int} NX, @code{int} NY=@code{1}, @code{int} NZ=@code{1}) -@deftypefnx {C function} @code{void} mgl_data_set_values (@code{const char *}str, @code{int} NX, @code{int} NY, @code{int} NZ) -Allocates memory and scanf the data from the string. +@deftypefn {Метод класса @code{mglData} (C+, Python)} @code{void} Set (@code{const char *}str, @code{int} NX, @code{int} NY=@code{1}, @code{int} NZ=@code{1}) +@deftypefnx {Функция С} @code{void} mgl_data_set_values (@code{const char *}str, @code{int} NX, @code{int} NY, @code{int} NZ) +Выделяет память и сканирует (scanf) данные из строки. @end deftypefn @c ------------------------------------------------------------------ @node Fill, Rearrange, Create and delete, mglData class -@section Fill +@section Заполнение данных @cindex Fill @cindex Modify -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Fill (@code{float} x1, @code{float} x2, @code{char} dir=@code{'x'}) -@deftypefnx {C function} @code{void} mgl_data_fill (@code{HMDT} dat, @code{float} x1, @code{float} x2, @code{char} dir) -Equidistantly fills the data values to range [@var{x1}, @var{x2}] in direction @var{dir}=@{@samp{x},@samp{y},@samp{z}@}. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Fill (@code{float} x1, @code{float} x2, @code{char} dir=@code{'x'}) +@deftypefnx {Функция С} @code{void} mgl_data_fill (@code{HMDT} dat, @code{float} x1, @code{float} x2, @code{char} dir) +Заполняет значениями равно распределенными в диапазоне [@var{x1}, @var{x2}] в направлении @var{dir}=@{@samp{x},@samp{y},@samp{z}@}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Fill (@code{const char *}eq, @code{mglPoint} Min, @code{mglPoint} Max, @code{const mglData *}vdat=0, @code{const mglData *}wdat=0) -@deftypefnx {C function} @code{void} mgl_data_fill (@code{HMGL} gr, @code{HMDT} dat, @code{const char *}eq, @code{const HMDT *}vdat, @code{const HMDT *}wdat) -Fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Coordinates @samp{x}, @samp{y}, @samp{z} are supposed to be normalized in range @var{Min} x @var{Max} (in difference from @code{Modify} functions). Variable @samp{u} is the original value of the array. Variables @samp{v} and @samp{w} are values of @var{vdat}, @var{wdat} which can be @code{NULL} (i.e. can be omitted). +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Fill (@code{const char *}eq, @code{mglPoint} Min, @code{mglPoint} Max, @code{const mglData *}vdat=0, @code{const mglData *}wdat=0) +@deftypefnx {Функция С} @code{void} mgl_data_fill (@code{HMGL} gr, @code{HMDT} dat, @code{const char *}eq, @code{const HMDT *}vdat, @code{const HMDT *}wdat) +Заполняет значениями вычисленными по формуле @var{eq}. Формула представляет собой произвольное выражение, зависящее от переменных @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Координаты @samp{x}, @samp{y}, @samp{z} полагаются меняющимися в диапазоне @var{Min} x @var{Max} (в отличие от функции @code{Modify}). Переменная @samp{u} -- значения исходного массива, переменные @samp{v}, @samp{w} -- значения массивов @var{vdat}, @var{wdat}. Последние могут быть @code{NULL}, т.е. опущены. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Modify (@code{const char *}eq, @code{int} dim=@code{0}) -@deftypefnx {C function} @code{void} mgl_data_modify (@code{HMDT} dat, @code{const char *}eq, @code{int} dim) -Function fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. Variable @samp{u} is the original value of the array. Modification will be fulfilled only for slices >=@var{dim}. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Modify (@code{const char *}eq, @code{int} dim=@code{0}) +@deftypefnx {Метод класса @code{mglData} (C++, Python)} @code{void} Modify (@code{const char *}eq, @code{const mglData &}v) +@deftypefnx {Метод класса @code{mglData} (C++, Python)} @code{void} Modify (@code{const char *}eq, @code{const mglData &}v, @code{const mglData &}w) +@deftypefnx {Функция С} @code{void} mgl_data_modify (@code{HMDT} dat, @code{const char *}eq, @code{int} dim) +@deftypefnx {Функция С} @code{void} mgl_data_modify_vw (@code{HMDT} dat, @code{const char *}eq, @code{const HMDT} v, @code{const HMDT} w) +Заполняет значениями вычисленными по формуле @var{eq}. Формула представляет собой произвольное выражение, зависящее от переменных @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Координаты @samp{x}, @samp{y}, @samp{z} полагаются меняющимися в диапазоне [0,1] (в отличие от функции @code{Fill}). Переменная @samp{u} -- значения исходного массива, переменные @samp{v}, @samp{w} -- значения массивов @var{vdat}, @var{wdat}. Последние могут быть @code{NULL}, т.е. опущены. Если указан @var{dim}>0, то изменяются только слои >=@var{dim}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Modify (@code{const char *}eq, @code{const mglData &}v) -@deftypefnx {Method on @code{mglData} (C++, Python)} @code{void} Modify (@code{const char *}eq, @code{const mglData &}v, @code{const mglData &}w) -@deftypefnx {C function} @code{void} mgl_data_modify_vw (@code{HMDT} dat, @code{const char *}eq, @code{const HMDT} v, @code{const HMDT} w) -Function fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. Variable @samp{u} is the original value of the array. Variables @samp{v} and @samp{w} are values of @var{vdat}, @var{wdat}. -@end deftypefn - -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Put (@code{float} val, @code{int} i=@code{-1}, @code{int} j=@code{-1}, @code{int} k=@code{-1}) +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Put (@code{float} val, @code{int} i=@code{-1}, @code{int} j=@code{-1}, @code{int} k=@code{-1}) @deftypefnx mglData @code{void} mgl_data_put_val (@code{HMDT} a, @code{float} val, @code{int} i, @code{int} j, @code{int} k) -Function sets value(s) of array a[@var{i}, @var{j}, @var{k}] = @var{val}. Negative indexes @var{i}, @var{j}, @var{k}=-1 set the value @var{val} to whole range in corresponding direction(s). For example, @code{Put(val,-1,0,-1);} sets a[i,0,j]=@var{val} for i=0...(nx-1), j=0...(nz-1). +Присваивает значения (под-)массива @var{dat}[@var{i}, @var{j}, @var{k}] = @var{val}. Индексы @var{i}, @var{j}, @var{k} равные @samp{-1} задают значениия @var{val} для всего диапазона соответствующего направления(ий). Например, @code{Put(val,-1,0,-1);} задает a[i,0,j]=@var{val} для i=0...(nx-1), j=0...(nz-1). @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Put (@code{const mglData &}v, @code{int} i=@code{-1}, @code{int} j=@code{-1}, @code{int} k=@code{-1}) +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Put (@code{const mglData &}v, @code{int} i=@code{-1}, @code{int} j=@code{-1}, @code{int} k=@code{-1}) @deftypefnx mglData @code{void} mgl_data_put_dat (@code{HMDT} a, @code{const HMDT} v, @code{int} i, @code{int} j, @code{int} k) -Function copies value(s) from array @var{v} to the range of original array. Negative indexes @var{i}, @var{j}, @var{k}=-1 set the range in corresponding direction(s). At this minor dimensions of array @var{v} should be large than corresponding dimensions of this array. For example, @code{Put(v,-1,0,-1);} sets a[i,0,j]=v.ny>nz ? v[i,j] : v[i], where i=0...(nx-1), j=0...(nz-1) and condition v.nx>=nx is true. +Копирует значения из массива @var{v} в диапазон значений данного массива. Индексы @var{i}, @var{j}, @var{k} равные @samp{-1} задают диапазон изменения значений в соответствующих направление(ях). Младшие размерности массива @var{v} должны быть больше выбранного диапазона массива. Например, @code{Put(v,-1,0,-1);} присвоитa[i,0,j]=@var{v}.ny>nz ? @var{v}.a[i,j] : @var{v}.a[i], где i=0...(nx-1), j=0...(nz-1) и условие v.nx>=nx выполнено. @end deftypefn -@deftypefn {C function} @code{void} mgl_data_set_value (@code{HMDT} dat, @code{float} v, @code{int} i, @code{int} j, @code{int} k) -Sets the value in specified cell of the data with border checking. +@deftypefn {Функция С} @code{void} mgl_data_set_value (@code{HMDT} dat, @code{float} v, @code{int} i, @code{int} j, @code{int} k) +Присваивает значение выбранной ячейке массива данных. @end deftypefn -@deftypefn {C function} @code{float} mgl_data_get_value (@code{HMDT} dat, @code{int} i, @code{int} j, @code{int} k) -Gets the value in specified cell of the data with border checking. +@deftypefn {Функция С} @code{float} mgl_data_get_value (@code{HMDT} dat, @code{int} i, @code{int} j, @code{int} k) +Возвращает значение выбранной ячейки массива данных. @end deftypefn -@deftypefn {Method on @code{mglData} (C+, Python)} @code{void} GetNx () -@deftypefnx {C function} @code{float} mgl_data_get_nx (@code{HMDT} dat) -Gets the x-size of the data. +@deftypefn {Метод класса @code{mglData} (C+, Python)} @code{void} GetNx () +@deftypefnx {Функция С} @code{float} mgl_data_get_nx (@code{HMDT} dat) +Возвращает размер по x-направлению. @end deftypefn -@deftypefn {Method on @code{mglData} (C+, Python)} @code{void} GetNy () -@deftypefnx {C function} @code{float} mgl_data_get_ny (@code{HMDT} dat) -Gets the y-size of the data. +@deftypefn {Метод класса @code{mglData} (C+, Python)} @code{void} GetNy () +@deftypefnx {Функция С} @code{float} mgl_data_get_ny (@code{HMDT} dat) +Возвращает размер по y-направлению. @end deftypefn -@deftypefn {Method on @code{mglData} (C+, Python)} @code{void} GetNz () -@deftypefnx {C function} @code{float} mgl_data_get_nz (@code{HMDT} dat) -Gets the z-size of the data. +@deftypefn {Метод класса @code{mglData} (C+, Python)} @code{void} GetNz () +@deftypefnx {Функция С} @code{float} mgl_data_get_nz (@code{HMDT} dat) +Возвращает размер по z-направлению. @end deftypefn @c ------------------------------------------------------------------ @node Rearrange, File I/O, Fill, mglData class -@section Rearrange +@section Изменение размеров данных @cindex Rearrange @cindex Extend @cindex Transpose @@ -182,72 +178,76 @@ Gets the z-size of the data. @cindex Insert @cindex Delete -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Rearrange (@code{int} mx, @code{int} my=@code{0}, @code{int} mz=@code{0}) -@deftypefnx {C function} @code{void} mgl_data_rearrange (@code{HMDT} dat, @code{int} mx, @code{int} my, @code{int} mz) -Rearrange dimensions without changing data array so that resulting sizes should be @var{mx}*@var{my}*@var{mz} < nx*ny*nz. If some of parameter @var{my} or @var{mz} are zero then it will be selected to optimal fill of data array. For example, if @var{my}=0 then it will be change to @var{my}=nx*ny*nz/@var{mx} and @var{mz} will be 1. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Rearrange (@code{int} mx, @code{int} my=@code{0}, @code{int} mz=@code{0}) +@deftypefnx {Функция С} @code{void} mgl_data_rearrange (@code{HMDT} dat, @code{int} mx, @code{int} my, @code{int} mz) +Изменяет размерность данных без изменения самого массива данных, так что результирующий массив @var{mx}*@var{my}*@var{mz} < nx*ny*nz. Если один из параметров @var{my} или @var{mz} ноль, то он будет выбран оптимальным образом. Например, если @var{my}=0, то будет @var{my}=nx*ny*nz/@var{mx} и @var{mz}=1. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Extend (@code{int} n1, @code{int} n2=@code{0}) -@deftypefnx {C function} @code{void} mgl_data_extend (@code{HMDT} dat, @code{int} n1, @code{int} n2) -Increase the dimensions of the data by inserting new (|@var{n1}|+1)-th slices after (for @var{n1}>0) or before (for @var{n1}<0) of existed one. It is possible to insert 2 dimensions simultaneously for 1d data by using parameter @var{n2}. Data to new slices is copy from existed one. For example, for @var{n1}>0 new array will be + +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Extend (@code{int} n1, @code{int} n2=@code{0}) +@deftypefnx {Функция С} @code{void} mgl_data_extend (@code{HMDT} dat, @code{int} n1, @code{int} n2) +Увеличивает размер данных путем вставки (|@var{n1}|+1) новых срезов после (для @var{n1}>0) или перед (для @var{n1}<0) существующими данными. Можно добавить сразу 2 размерности для 1d массива, используя второй параметр @var{n2}. Данные в новые срезы будут скопированы из существующих. Например, для @var{n1}>0 новый массив будет @iftex -@math{a_{ij}^{new} = a_i^{old}} where j=0...@var{n1}. Correspondingly, for @var{n1}<0 new array will be @math{a_{ij}^{new} = a_j^{old}} where i=0...|@var{n1}|. +@math{a_{ij}^{new} = a_i^{old}} where j=0...@var{n1}. Соответственно, для @var{n1}<0 новый массив будет @math{a_{ij}^{new} = a_j^{old}}, где i=0...|@var{n1}|. @end iftex @ifnottex -a_ij^new = a_i^old where j=0...@var{n1}. Correspondingly, for @var{n1}<0 new array will be a_ij^new = a_j^old where i=0...|@var{n1}|. +a_ij^new = a_i^old where j=0...@var{n1}. Соответственно, для @var{n1}<0 новый массив будет a_ij^new = a_j^old, где i=0...|@var{n1}|. @end ifnottex @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Transpose (@code{const char *}dim=@code{"yx"}) -@deftypefnx {C function} @code{void} mgl_data_transpose (@code{const char *}dim) -Transposes (shift order of) dimensions of the data. New order of dimensions is specified int string @var{dim}. This function may be useful also for the reading of one-dimensional data. + +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Transpose (@code{const char *}dim=@code{"yx"}) +@deftypefnx {Функция С} @code{void} mgl_data_transpose (@code{const char *}dim) +Транспонирует (меняет порядок размерностей) массив данных. Новый порядок размерностей задается строкой @var{dim}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Squeeze (@code{int} rx, @code{int} ry=@code{1}, @code{int} rz=@code{1}, @code{bool} smooth=@code{false}) -@deftypefnx {C function} @code{void} mgl_data_squeeze (@code{HMDT} dat, @code{int} rx, @code{int} ry, @code{int} rz, @code{int} smooth) -Reduces the data size by excluding data elements which indexes are not divisible by @var{rx}, @var{ry}, @var{rz} correspondingly. Parameter @var{squeeze} set to use smoothing + +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Squeeze (@code{int} rx, @code{int} ry=@code{1}, @code{int} rz=@code{1}, @code{bool} smooth=@code{false}) +@deftypefnx {Функция С} @code{void} mgl_data_squeeze (@code{HMDT} dat, @code{int} rx, @code{int} ry, @code{int} rz, @code{int} smooth) +Уменьшает размер данных путем удаления элементов с индексами не кратными @var{rx}, @var{ry}, @var{rz} соответственно. Параметр @var{smooth} задает использовать сглаживания @iftex -(i.e. @math{a_{out}[i]=\sum_{j=i,i+r}a[j]/r}) or not (i.e. @math{a_{out}[i]=a[j*r]}). +(т.е. @math{a_{out}[i]=\sum_{j=i,i+r}a[j]/r}) или нет (т.е. @math{a_{out}[i]=a[j*r]}). @end iftex @ifnottex -(i.e. out[i]=\sum_@{j=i,i+r@} a[j]/r) or not (i.e. out[i]=a[j*r]). +(т.е. out[i]=\sum_@{j=i,i+r@} a[j]/r) или нет (т.е. out[i]=a[j*r]). @end ifnottex @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Crop (@code{int} n1, @code{int} n2, @code{char} dir=@code{'x'}) -@deftypefnx {C function} @code{void} mgl_data_crop (@code{HMDT} dat, @code{int} n1, @code{int} n2, @code{char} dir) -Cuts off edges of the data @var{i}<@var{n1} and @var{i}>@var{n2} if @var{n2}>0 or @var{i}>@code{n[xyz]}-@var{n2} if @var{n2}<=0 along direction @var{dir}. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Crop (@code{int} n1, @code{int} n2, @code{char} dir=@code{'x'}) +@deftypefnx {Функция С} @code{void} mgl_data_crop (@code{HMDT} dat, @code{int} n1, @code{int} n2, @code{char} dir) +Обрезает границы данных при @var{i}<@var{n1} и @var{i}>@var{n2} (при @var{n2}>0) или @var{i}>@code{n[xyz]}-@var{n2} (при @var{n2}<=0) вдоль направления @var{dir}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} InsertRows (@code{int} at, @code{int} num=@code{1}, @code{const char *}eq=@code{NULL}) -Insert @var{num} rows (slice along y-direction) at position @var{at} and fill it by formula @var{eq} (if @var{eq}!=0) or by zeros. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} InsertRows (@code{int} at, @code{int} num=@code{1}, @code{const char *}eq=@code{NULL}) +Вставляет @var{num} срезов вдоль направления 'y' (строк) с позиции @var{at} и заполняет их по формуле @var{eq} (при @var{eq}!=0) или нулями. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} InsertColumns (@code{int} at, @code{int} num=@code{1}, @code{const char *}eq=@code{NULL}) -Insert @var{num} columns (slice along x-direction) at position @var{at} and fill it by formula @var{eq} (if @var{eq}!=0) or by zeros. + +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} InsertColumns (@code{int} at, @code{int} num=@code{1}, @code{const char *}eq=@code{NULL}) +Вставляет @var{num} срезов вдоль направления 'x' (колонок) с позиции @var{at} и заполняет их по формуле @var{eq} (при @var{eq}!=0) или нулями. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} InsertSlices (@code{int} at, @code{int} num=@code{1}, @code{const char *}eq=@code{NULL}) -Insert @var{num} slices (slice along z-direction) at position @var{at} and fill it by formula @var{eq} (if @var{eq}!=0) or by zeros. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} InsertSlices (@code{int} at, @code{int} num=@code{1}, @code{const char *}eq=@code{NULL}) +Вставляет @var{num} срезов вдоль направления 'z' с позиции @var{at} и заполняет их по формуле @var{eq} (при @var{eq}!=0) или нулями. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} DeleteRows (@code{int} at, @code{int} num=@code{1}) -Delete @var{num} rows (slice along y-direction) at position @var{at}. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} DeleteRows (@code{int} at, @code{int} num=@code{1}) +Удаляет @var{num} срезов вдоль направления 'y' (строк) с позиции @var{at}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} DeleteColumns (@code{int} at, @code{int} num=@code{1}) -Delete @var{num} columns (slice along x-direction) at position @var{at}. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} DeleteColumns (@code{int} at, @code{int} num=@code{1}) +Удаляет @var{num} срезов вдоль направления 'x' (колонок) с позиции @var{at}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} DeleteSlices (@code{int} at, @code{int} num=@code{1}) -Delete @var{num} slices (slice along z-direction) at position @var{at}. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} DeleteSlices (@code{int} at, @code{int} num=@code{1}) +Удаляет @var{num} срезов вдоль направления 'z' с позиции @var{at}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Insert (@code{char} dir, @code{int} pos=@code{0}, @code{int} num=@code{1}) -@deftypefnx {C function} @code{void} mgl_data_insert (@code{HMDT} dat, @code{char} dir, @code{int} pos, @code{char} num) -Insert @var{num} slices along @var{dir}-direction at position @var{pos} and fill it by zeros. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Insert (@code{char} dir, @code{int} pos=@code{0}, @code{int} num=@code{1}) +@deftypefnx {Функция С} @code{void} mgl_data_insert (@code{HMDT} dat, @code{char} dir, @code{int} pos, @code{char} num) +Вставляет @var{num} срезов вдоль направления @var{dir} с позиции @var{pos} и заполняет их нулями. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Delete (@code{char} dir, @code{int} pos=@code{0}, @code{int} num=@code{1}) -@deftypefnx {C function} @code{void} mgl_data_delete (@code{HMDT} dat, @code{char} dir, @code{int} pos, @code{char} num) -Delete @var{num} slices along @var{dir}-direction at position @var{pos}. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Delete (@code{char} dir, @code{int} pos=@code{0}, @code{int} num=@code{1}) +@deftypefnx {Функция С} @code{void} mgl_data_delete (@code{HMDT} dat, @code{char} dir, @code{int} pos, @code{char} num) +Удаляет @var{num} срезов вдоль направления @var{dir} с позиции @var{pos}. @end deftypefn @c ------------------------------------------------------------------ @node File I/O, Make another data, Rearrange, mglData class -@section File I/O +@section Чтение/сохранение данных @cindex Read @cindex ReadMat @cindex ReadAll @@ -258,50 +258,54 @@ Delete @var{num} slices along @var{dir}-direction at position @var{pos}. @cindex Export @cindex Import -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Read (@code{const char *}fname) -@deftypefnx {C function} @code{void} mgl_data_read (@code{HMDT} dat, @code{const char *}fname) -Reads data from tab-separated text file with auto determining sizes of the data. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Read (@code{const char *}fname) +@deftypefnx {Функция С} @code{void} mgl_data_read (@code{HMDT} dat, @code{const char *}fname) +Читает данные из текстового файла с разделителями символом пробела/табуляции с автоматическим определением размера массива. Двойной перевод строки начинает новый срез данных (по направлению z). @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Read (@code{const char *}fname, @code{int} mx, @code{int} my=@code{1}, @code{int} mz=@code{1}) -@deftypefnx {C function} @code{void} mgl_data_read_dim (@code{HMDT} dat, @code{const char *}fname, @code{int} mx, @code{int} my, @code{int} mz) -Reads data from text file with specified data sizes. This function does nothing if one of parameters @var{mx}, @var{my} or @var{mz} is zero or negative. + +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Read (@code{const char *}fname, @code{int} mx, @code{int} my=@code{1}, @code{int} mz=@code{1}) +@deftypefnx {Функция С} @code{void} mgl_data_read_dim (@code{HMDT} dat, @code{const char *}fname, @code{int} mx, @code{int} my, @code{int} mz) +Читает данные из текстового файла с заданными размерами. Ничего не делается если параметры @var{mx}, @var{my} или @var{mz} равны нулю или отрицательны. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} ReadMat (@code{const char *}fname, @code{int} dim=@code{2}) -@deftypefnx {C function} @code{void} mgl_data_read_mat (@code{HMDT} dat, @code{const char *}fname, @code{int} dim) -Read data from text file with size specified at beginning of the file by first @var{dim} numbers. At this, variable @var{dim} set data dimensions. + +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} ReadMat (@code{const char *}fname, @code{int} dim=@code{2}) +@deftypefnx {Функция С} @code{void} mgl_data_read_mat (@code{HMDT} dat, @code{const char *}fname, @code{int} dim) +Читает данные из текстового файла с размерами, указанными в первых @var{dim} числах файла. При этом переменная @var{dim} задает размерность (1d, 2d, 3d) данных. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} ReadRange (@code{const char *}templ, @code{float} from, @code{float} to, @code{float} step=@code{1.f}, @code{bool} as_slice=@code{false}) -Join data arrays from several text files. The file names are determined by function call @code{sprintf(fname,templ,val);}, where @var{val} changes from @var{from} to @var{to} with step @var{step}. The data load one-by-one in the same slice if @var{as_slice}=@code{false} or as slice-by-slice if @var{as_slice}=@code{true}. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} ReadRange (@code{const char *}templ, @code{float} from, @code{float} to, @code{float} step=@code{1.f}, @code{bool} as_slice=@code{false}) +Объединяет данные из нескольких текстовых файлов. Имена файлов определяются вызовом функции @code{sprintf(fname,templ,val);}, где @var{val} меняется от @var{from} до @var{to} с шагом @var{step}. Данные загружаются один за другим в один и тот же срез данных (при @var{as_slice}=@code{false}) или срез-за-срезом (при @var{as_slice}=@code{true}). @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} ReadAll (@code{const char *}templ, @code{bool} as_slice=@code{false}) -Join data arrays from several text files which filenames satisfied the template @var{templ} (for example, @var{templ}=@code{"t_*.dat"}). The data load one-by-one in the same slice if @var{as_slice}=@code{false} or as slice-by-slice if @var{as_slice}=@code{true}. + +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} ReadAll (@code{const char *}templ, @code{bool} as_slice=@code{false}) +Объединяет данные из нескольких текстовых файлов, чьи имена удовлетворяют шаблону @var{templ} (например, @var{templ}=@code{"t_*.dat"}). Данные загружаются один за другим в один и тот же срез данных (при @var{as_slice}=@code{false}) или срез-за-срезом (при @var{as_slice}=@code{true}). @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Save (@code{const char *}fname, @code{int} ns=@code{-1}) @code{const} -@deftypefnx {C function} @code{void} mgl_data_save (@code{const HMDT} dat, @code{const char *}fname, @code{int} ns) -Saves the whole data array (for @var{ns}=@code{-1}) or only ns-th slice to text file. If @var{ns}>0 then only @var{ns}-th slice (or column for 2D array) will be saved. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Save (@code{const char *}fname, @code{int} ns=@code{-1}) @code{const} +@deftypefnx {Функция С} @code{void} mgl_data_save (@code{const HMDT} dat, @code{const char *}fname, @code{int} ns) +Сохраняет весь массив данных при @var{ns}=@code{-1} или только @var{ns}-ый срез в текстовый файл. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} ReadHDF (@code{const char *}fname, @code{const char *}dname) -Reads data array named @var{dname} from HDF file. This function does nothing if NO_HDF5 was defined during library compilation. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} ReadHDF (@code{const char *}fname, @code{const char *}dname) +Читает массив с именем @var{dname} из HDF5 или HDF4 файла @var{fname}. Функция ничего не делает если библиотека была собрана с флагами NO_HDF5|NO_HDF4. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} SaveHDF (@code{const char *}fname, @code{const char *}dname, @code{bool} rewrite=@code{false}) @code{const} -Saves data array named @var{dname} from HDF file. This function does nothing if NO_HDF5 was defined during library compilation. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} SaveHDF (@code{const char *}fname, @code{const char *}dname, @code{bool} rewrite=@code{false}) @code{const} +Сохраняет массив под именем @var{dname} в HDF5 или HDF4 файл @var{fname}. Функция ничего не делает если библиотека была собрана с флагами NO_HDF5|NO_HDF4. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Import (@code{const char *}fname, @code{const char *}scheme, @code{float} v1=@code{0}, float v2=@code{1}) -@deftypefnx {C function} @code{void} mgl_data_import (@code{HMDT} dat, @code{const char *}fname, @code{const char *}scheme, @code{float} v1, float v2) -Reads data from bitmap file (now support only PNG format). The RGB values of bitmap pixels are transformed to float values in range [@var{v1}, @var{v2}] using color scheme @var{scheme} (@pxref{Color scheme}). +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Import (@code{const char *}fname, @code{const char *}scheme, @code{float} v1=@code{0}, float v2=@code{1}) +@deftypefnx {Функция С} @code{void} mgl_data_import (@code{HMDT} dat, @code{const char *}fname, @code{const char *}scheme, @code{float} v1, float v2) +Читает данные из растрового файла. RGB значения пикселов преобразуются в число в диапазоне [@var{v1}, @var{v2}] используя цветовую схему @var{sch} (@pxref{Color scheme}). @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Export (@code{const char *}fname, @code{const char *}scheme, @code{float} v1=@code{0}, float v2=@code{0}, @code{int} ns=@code{-1}) const -@deftypefnx {C function} @code{void} mgl_data_export (@code{HMDT} dat, @code{const char *}fname, @code{const char *}scheme, @code{float} v1, float v2, @code{int} ns) const -Saves data matrix (or @code{ns}-th slice for 3d data) to bitmap file (now support only PNG format). The data values are transformed from range [@var{v1}, @var{v2}] to RGB pixels of bitmap using color scheme @var{scheme} (@pxref{Color scheme}). If @var{v1}>=@var{v2} then the values of @var{v1}, @var{v2} are automatically determined as minimal and maximal value of the data array. + +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Export (@code{const char *}fname, @code{const char *}scheme, @code{float} v1=@code{0}, float v2=@code{0}, @code{int} ns=@code{-1}) const +@deftypefnx {Функция С} @code{void} mgl_data_export (@code{HMDT} dat, @code{const char *}fname, @code{const char *}scheme, @code{float} v1, float v2, @code{int} ns) const +Сохраняет данные в растровый файл. Числовые значения, нормированные в диапазон [@var{v1}, @var{v2}], преобразуются в RGB значения пикселов, используя цветовую схему @var{sch} (@pxref{Color scheme}). Если @var{v1}>=@var{v2}, то значения @var{v1}, @var{v2} определяются автоматически как минимальное и максимальное значение данных. @end deftypefn @c ------------------------------------------------------------------ -@node Make another data, Functions on direction, File I/O, mglData class -@section Make another data +@node Make another data, Change data, File I/O, mglData class +@section Создание новых данных @cindex SubData @cindex Column @cindex SetColumnId @@ -315,150 +319,190 @@ Saves data matrix (or @code{ns}-th slice for 3d data) to bitmap file (now suppor @cindex Resize @cindex Trace -@deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} SubData (@code{int} xx, @code{int} yy=@code{-1}, @code{int} zz=@code{-1}) @code{const} -@deftypefnx {C function} @code{HMDT} mgl_data_subdata (@code{const HMDT} dat, @code{int} xx, @code{int} yy, @code{int} zz) -Extracts sub-array data from the original data array keeping fixed positive index. For example @code{SubData(-1,2)} extracts 3d row (indexes are zero based), @code{SubData(4,-1)} extracts 5th column, @code{SubData(-1,-1,3)} extracts 4th slice and so on. The most convenient way is to use this function as initialization of other @code{mglData} variable like @code{mglData a1(a.SubData(-1,-1,3))}. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} SubData (@code{int} xx, @code{int} yy=@code{-1}, @code{int} zz=@code{-1}) @code{const} +@deftypefnx {Функция С} @code{HMDT} mgl_data_subdata (@code{const HMDT} dat, @code{int} xx, @code{int} yy, @code{int} zz) +Возвращает в @var{res} подмассив массива данных @var{dat} с фиксированными значениями индексов с положительными значениями. Например, @code{SubData(-1,2)} выделяет третью строку (индексы начинаются с нуля), @code{SubData(4,-1)} выделяет 5-ую колонку, @code{SubData(-1,-1,3)} выделяет 4-ый срез и т.д. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} SubData (@code{const mglData &}xx, @code{const mglData &}yy, @code{const mglData &}zz) @code{const} -@deftypefnx {C function} @code{HMDT} mgl_data_subdata_ext (@code{const HMDT} dat, @code{const HMDT} xx, @code{const HMDT} yy, @code{const HMDT} zz) +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} SubData (@code{const mglData &}xx, @code{const mglData &}yy, @code{const mglData &}zz) @code{const} +@deftypefnx {Функция С} @code{HMDT} mgl_data_subdata_ext (@code{const HMDT} dat, @code{const HMDT} xx, @code{const HMDT} yy, @code{const HMDT} zz) Extracts sub-array data from the original data array for indexes specified by arrays @var{xx}, @var{yy}, @var{zz} (indirect access). The resulting array have the same dimensions as input arrays for 2D and 3D arguments. This function work like previous one for 1D arguments (or numbers). The dimensions of all argument must be the same if they are 2D or 3D arrays. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Column (@code{const char *}eq) @code{const} -@deftypefnx {C function} @code{HMDT} mgl_data_column (@code{const HMDT} dat, @code{const char *}eq) -Get column (or slice) of the data filled by formula @var{eq} of other named columns. For example, @code{Column("n*w^2/exp(t)");}. The column ids must be defined first by @code{SetColumnId()} function. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} Column (@code{const char *}eq) @code{const} +@deftypefnx {Функция С} @code{HMDT} mgl_data_column (@code{const HMDT} dat, @code{const char *}eq) +Возвращает массив данных заполненный по формуле @var{eq}, вычисленной для именованных колонок (или срезов). Например, @code{Column("n*w^2/exp(t)");}. Имена колонок задается функцией @code{SetColumnId()} или при чтении файлов данных. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} SetColumnId (@code{const char *}ids) -@deftypefnx {C function} @code{void} mgl_data_set_id (@code{HMDT} dat, @code{const char *}ids) -Set the symbol id for data columns. The string must contain one symbol 'a'...'z' per column (without spaces). +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} SetColumnId (@code{const char *}ids) +@deftypefnx {Функция С} @code{void} mgl_data_set_id (@code{HMDT} dat, @code{const char *}ids) +Устанавливает символьные обозначения для колонок данных. Строка должна содержать символы 'a'...'z' один на колонку (без пробелов). @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Trace () @code{const} -Gets array of diagonal elements a[i,i] (for 2D case) or a[i,i,i] (for 3D case) where i=0...nx-1. Function return copy of itself for 1D case. Data array must have dimensions ny,nz >= nx or ny,nz = 1. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} Trace () @code{const} +Возвращает массив диагональных элементов a[i,i] (для 2D данных) или a[i,i,i] (для 3D данных) где i=0...nx-1. В 1D случае возвращается сам массив данных. Размеры массива данных должен быть ny,nz >= nx или ny,nz = 1. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Hist (@code{int} n, @code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{int} nsub=@code{0}) @code{const} -@deftypefnx {C function} @code{HMDT} mgl_data_hist (@code{const HMDT} dat, @code{int} n, @code{float} v1, @code{float} v2, @code{int} nsub) -Creates @var{n}-th points distribution of the data values in range [@var{v1}, @var{v2}]. Parameter @var{nsub} define the number of additional interpolated points (for smoothness of histogram). +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} Hist (@code{int} n, @code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{int} nsub=@code{0}) @code{const} +@deftypefnx {Функция С} @code{HMDT} mgl_data_hist (@code{const HMDT} dat, @code{int} n, @code{float} v1, @code{float} v2, @code{int} nsub) +Возвращает распределение (гистограмму) из @var{n} точек от значений массива в диапазоне [@var{v1}, @var{v2}]. Параметр @var{nsub} задает число дополнительных точек интерполяции (для сглаживания получившейся гистограммы). @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Hist (@code{const mglData &}w, @code{int} n, @code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{int} nsub=@code{0}) @code{const} -@deftypefnx {C function} @code{HMDT} mgl_data_hist_w (@code{const HMDT} dat, @code{const HMDT} w, @code{int} n, @code{float} v1, @code{float} v2, @code{int} nsub) -Creates @var{n}-th points distribution of the data values in range [@var{v1}, @var{v2}]. Array @var{w} specifies weights of the data elements. Parameter @var{nsub} define the number of additional interpolated points (for smoothness of histogram). + +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} Hist (@code{const mglData &}w, @code{int} n, @code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{int} nsub=@code{0}) @code{const} +@deftypefnx {Функция С} @code{HMDT} mgl_data_hist_w (@code{const HMDT} dat, @code{const HMDT} w, @code{int} n, @code{float} v1, @code{float} v2, @code{int} nsub) +Возвращает распределение (гистограмму) из @var{n} точек от значений массива в диапазоне [@var{v1}, @var{v2}]. Массив @var{w} задает веса элементов. Параметр @var{nsub} задает число дополнительных точек интерполяции (для сглаживания получившейся гистограммы). @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Momentum (@code{char} dir, @code{const char *}how) @code{const} -@deftypefnx {C function} @code{HMDT} mgl_data_momentum (@code{const HMDT} dat, @code{char} dir, @code{const char *}how) -Get momentum (1D-array) of the data along direction @var{dir}. String @var{how} contain kind of momentum. The momentum is defined like as + +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} Momentum (@code{char} dir, @code{const char *}how) @code{const} +@deftypefnx {Функция С} @code{HMDT} mgl_data_momentum (@code{const HMDT} dat, @code{char} dir, @code{const char *}how) +Возвращает момент (1d массив) данных вдоль направления @var{dir}. Строка @var{how} определяет тип момента. Момент определяется как @iftex @math{res_k = \sum_{ij} how(x_i,y_j,z_k) a_{ij}/\sum_{ij} a_{ij}} @end iftex @ifnottex res_k = \sum_ij how(x_i,y_j,z_k) a_ij/ \sum_ij a_ij @end ifnottex -if @var{var}=@samp{z} and so on. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. +если @var{dir}=@samp{z} и т.д. Координаты @samp{x}, @samp{y}, @samp{z} -- индексы массива в диапазоне [0,1]. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Sum (@code{const char *}dir) @code{const} -@deftypefnx {C function} @code{HMDT} mgl_data_sum (@code{const HMDT} dat, @code{const char *}dir) -Gets array which is the result of summation in given direction or direction(s). +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} Sum (@code{const char *}dir) @code{const} +@deftypefnx {Функция С} @code{HMDT} mgl_data_sum (@code{const HMDT} dat, @code{const char *}dir) +Возвращает результат суммирования данных вдоль направления(ий) @var{dir}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Max (@code{const char *}dir) @code{const} -@deftypefnx {C function} @code{HMDT} mgl_data_max_dir (@code{const HMDT} dat, @code{const char *}dir) -Gets array which is the maximal data values in given direction or direction(s). + +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} Max (@code{const char *}dir) @code{const} +@deftypefnx {Функция С} @code{HMDT} mgl_data_max_dir (@code{const HMDT} dat, @code{const char *}dir) +Возвращает максимальное значение данных вдоль направления(ий) @var{dir}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Min (@code{const char *}dir) @code{const} -@deftypefnx {C function} @code{HMDT} mgl_data_min_dir (@code{const HMDT} dat, @code{const char *}dir) -Gets array which is the maximal data values in given direction or direction(s). + +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} Min (@code{const char *}dir) @code{const} +@deftypefnx {Функция С} @code{HMDT} mgl_data_min_dir (@code{const HMDT} dat, @code{const char *}dir) +Возвращает минимальное значение данных вдоль направления(ий) @var{dir}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Combine (@code{const mglData &}a) @code{const} -@deftypefnx {C function} @code{HMDT} mgl_data_combine (@code{const HMDT} dat, @code{const HMDT} a) -Return direct multiplication of arrays (like, res[i,j] = this[i]*a[j] and so on). +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} Combine (@code{const mglData &}a) @code{const} +@deftypefnx {Функция С} @code{HMDT} mgl_data_combine (@code{const HMDT} dat, @code{const HMDT} a) +Возвращает прямое произведение массивов (наподобие, res[i,j] = adat[i]*bdat[j] и т.д.). @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Evaluate (@code{const mglData &}idat, @code{bool} norm=@code{true}) @code{const} -@deftypefnx {Method on @code{mglData} (C++, Python)} @code{mglData} Evaluate (@code{const mglData &}idat, @code{const mglData &}jdat, @code{bool} norm=@code{true}) @code{const} -@deftypefnx {Method on @code{mglData} (C++, Python)} @code{mglData} Evaluate (@code{const mglData &}idat, @code{const mglData &}jdat, @code{const mglData &}kdat, @code{bool} norm=@code{true}) @code{const} -@deftypefnx {C function} @code{HMDT} mgl_data_evaluate_i (@code{const HMDT} dat, @code{const HMDT} idat, @code{int} norm) -@deftypefnx {C function} @code{HMDT} mgl_data_evaluate_ij (@code{const HMDT} dat, @code{const HMDT} idat, @code{const HMDT} jdat, @code{int} norm) -@deftypefnx {C function} @code{HMDT} mgl_data_evaluate_ijk (@code{const HMDT} dat, @code{const HMDT} idat, @code{const HMDT} jdat, @code{const HMDT} kdat, @code{int} norm) -Get array which values is result of interpolation of original array for coordinates from other arrays. All dimensions must be the same for data @var{idat}, @var{jdat}, @var{kdat}. Coordinates from @var{idat}, @var{jdat}, @var{kdat} are supposed to be normalized in range [0,1] (if @var{norm}=@code{true}) or in range [0,nx], [0,ny], [0,nz] correspondingly. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} Evaluate (@code{const mglData &}idat, @code{bool} norm=@code{true}) @code{const} +@deftypefnx {Метод класса @code{mglData} (C++, Python)} @code{mglData} Evaluate (@code{const mglData &}idat, @code{const mglData &}jdat, @code{bool} norm=@code{true}) @code{const} +@deftypefnx {Метод класса @code{mglData} (C++, Python)} @code{mglData} Evaluate (@code{const mglData &}idat, @code{const mglData &}jdat, @code{const mglData &}kdat, @code{bool} norm=@code{true}) @code{const} +@deftypefnx {Функция С} @code{HMDT} mgl_data_evaluate_i (@code{const HMDT} dat, @code{const HMDT} idat, @code{int} norm) +@deftypefnx {Функция С} @code{HMDT} mgl_data_evaluate_ij (@code{const HMDT} dat, @code{const HMDT} idat, @code{const HMDT} jdat, @code{int} norm) +@deftypefnx {Функция С} @code{HMDT} mgl_data_evaluate_ijk (@code{const HMDT} dat, @code{const HMDT} idat, @code{const HMDT} jdat, @code{const HMDT} kdat, @code{int} norm) +Возвращает массив данных, полученный в результате интерполяции исходного массива в точках других массивов (например, res[i,j]=dat[idat[i,j],jdat[i,j]]). Размеры массивов @var{idat}, @var{jdat}, @var{kdat} должны совпадать. Координаты в @var{idat}, @var{jdat}, @var{kdat} полагаются нормированными в диапазон [0,1] (при @var{norm}=@code{true}) или в диапазоны [0,nx], [0,ny], [0,nz] соответственно. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{mglData} Resize (@code{int} mx, @code{int} my=@code{1}, @code{int} mz=@code{1}, @code{float} x1=@code{0}, @code{float} x2=@code{1}, @code{float} y1=@code{0}, @code{float} y2=@code{1}, @code{float} z1=@code{0}, @code{float} z2=@code{1}) @code{const} -@deftypefnx {C function} @code{HMDT} mgl_data_resize (@code{const HMDT} dat, @code{int} mx, @code{int} my, @code{int} mz) -@deftypefnx {C function} @code{HMDT} mgl_data_resize_box (@code{const HMDT} dat, @code{int} mx, @code{int} my, @code{int} mz, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2, @code{float} z1, @code{float} z2) -Resizes the data to new size @var{mx}, @var{my}, @var{mz} from box (part) [@var{x1},@var{x2}] x [@var{y1},@var{y2}] x [@var{z1},@var{z2}] of original array. Initially x,y,z coordinates are supposed to be in [0,1]. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{mglData} Resize (@code{int} mx, @code{int} my=@code{1}, @code{int} mz=@code{1}, @code{float} x1=@code{0}, @code{float} x2=@code{1}, @code{float} y1=@code{0}, @code{float} y2=@code{1}, @code{float} z1=@code{0}, @code{float} z2=@code{1}) @code{const} +@deftypefnx {Функция С} @code{HMDT} mgl_data_resize (@code{const HMDT} dat, @code{int} mx, @code{int} my, @code{int} mz) +@deftypefnx {Функция С} @code{HMDT} mgl_data_resize_box (@code{const HMDT} dat, @code{int} mx, @code{int} my, @code{int} mz, @code{float} x1, @code{float} x2, @code{float} y1, @code{float} y2, @code{float} z1, @code{float} z2) +Возвращает массив данных размером @var{mx}, @var{my}, @var{mz} со значениями полученными интерполяцией значений из части [@var{x1},@var{x2}] x [@var{y1},@var{y2}] x [@var{z1},@var{z2}] исходного массива. Величины x,y,z полагаются нормированными в диапазоне [0,1]. @end deftypefn @c ------------------------------------------------------------------ -@node Functions on direction, Interpolation, Make another data, mglData class -@section Functions on direction +@node Change data, Interpolation, Make another data, mglData class +@section Изменение данных + +Эти функции изменяют данные вдоль заданного направления(ий) типа например дифференцирования, интегрирования и т.д. Направление указывается строкой @var{dir}, которая может содержать символы @samp{x}, @samp{y} и/или @samp{z}, вдоль которых изменения будут применены. + @cindex CumSum +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} CumSum (@code{const char *}dir) +@deftypefnx {Функция С} @code{void} mgl_data_cumsum (@code{HMDT} dat, @code{const char *}dir) +Суммирует с накоплением в выбранном направлении(ях). +@end deftypefn + @cindex Integral +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Integral (@code{const char *}dir) +@deftypefnx {Функция С} @code{void} mgl_data_integral (@code{HMDT} dat, @code{const char *}dir) +Выполняет интегрирование (подобно суммированию с накоплением) в выбранном направлении(ях). +@end deftypefn + @cindex Diff -@cindex Diff2 -@cindex Swap -@cindex Mirror -@cindex Sew -@cindex Smooth -@cindex Envelop -@cindex Norm -@cindex NormSl +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Diff (@code{const char *}dir) +@deftypefnx {Функция С} @code{void} mgl_data_diff (@code{HMDT} dat, @code{const char *}dir) +Выполняет дифференцирование в выбранном направлении(ях). +@end deftypefn -These functions change the data in some direction like differentiations, integrations and so on. The direction in which the change will applied is specified by the string parameter, which may contain @samp{x}, @samp{y} or @samp{z} characters for 1-st, 2-nd and 3-d dimension correspondengly. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Diff (@code{const mglData &}x, @code{const mglData &}y) +@deftypefnx {Метод класса @code{mglData} (C++, Python)} @code{void} Diff (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z) +@deftypefnx {Функция С} @code{void} mgl_data_diff_par (@code{HMDT} dat, @code{const HMDT} x, @code{const HMDT}y, @code{const HMDT}z) +Выполняет дифференцирование данных, параметрически зависящих от координат, в направлении @var{x} с @var{y}, @var{z}=constant. Параметр @var{z} может быть опущен, что соответствует 2D случаю. Используются следующие формулы (2D случай): @math{da/dx = (a_j*y_i-a_i*y_j)/(x_j*y_i-x_i*y_j)}, где @math{a_i=da/di, a_j=da/dj} обозначает дифференцирование вдоль 1-ой и 2-ой размерности. Похожие формулы используются и в 3D случае. Порядок аргументов можно менять -- например, если данные a(i,j) зависят от координат @{x(i,j), y(i,j)@}, то обычная производная по @samp{x} будет равна @code{Diff(x,y);}, а обычная производная по @samp{y} будет равна @code{Diff(y,x);}. +@end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} CumSum (@code{const char *}dir) -@deftypefnx {C function} @code{void} mgl_data_cumsum (@code{HMDT} dat, @code{const char *}dir) -CCumulative summation of the data in given direction or directions. + +@cindex Diff2 +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Diff2 (@code{const char *}dir) +@deftypefnx {Функция С} @code{void} mgl_data_diff2 (@code{const char *}dir) +Выполняет двойное дифференцирование (как в операторе Лапласа) в выбранном направлении(ях). @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Integral (@code{const char *}dir) -@deftypefnx {C function} @code{void} mgl_data_integral (@code{HMDT} dat, @code{const char *}dir) -Integrates (like cumulative summation) the data in given direction or directions. + +@cindex SinFFT +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} SinFFT (@code{const char *}dir) +@deftypefnx {Функция С} @code{void} mgl_data_sinfft (@code{HMDT} dat, @code{const char *}dir) +Выполняет синус преобразование в выбранном направлении(ях). Синус преобразование есть @math{\sum a_i \sin(k i)}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Diff (@code{const char *}dir) -@deftypefnx {C function} @code{void} mgl_data_diff (@code{HMDT} dat, @code{const char *}dir) -Differentiates the data in given direction or directions. + +@cindex CosFFT +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} CosFFT (@code{const char *}dir) +@deftypefnx {Функция С} @code{void} mgl_data_cosfft (@code{HMDT} dat, @code{const char *}dir) +Выполняет косинус преобразование в выбранном направлении(ях). Синус преобразование есть @math{\sum a_i \cos(k i)}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Diff (@code{const mglData &}x, @code{const mglData &}y) -@deftypefnx {Method on @code{mglData} (C++, Python)} @code{void} Diff (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z) -@deftypefnx {C function} @code{void} mgl_data_diff_par (@code{HMDT} dat, @code{const HMDT} x, @code{const HMDT}y, @code{const HMDT}z) -Differentiates the data specified parametrically in direction @var{x} with @var{y}, @var{z}=constant. Parametrical differentiation uses the formula (for 2D case): @math{da/dx = (a_j*y_i-a_i*y_j)/(x_j*y_i-x_i*y_j)} where @math{a_i=da/di, a_j=da/dj} denotes usual differentiation along 1st and 2nd dimensions. The similar formula is used for 3D case. Note, that you may change the order of arguments -- for example, if you have 2D data a(i,j) which depend on coordinates @{x(i,j), y(i,j)@} then usual derivative along @samp{x} will be @code{Diff(x,y);} and usual derivative along @samp{y} will be @code{Diff(y,x);}. +@cindex Hankel +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Hankel (@code{const char *}dir) +@deftypefnx {Функция С} @code{void} mgl_data_hankel (@code{HMDT} dat, @code{const char *}dir) +Выполняет преобразование Ханкеля в выбранном направлении(ях). Преобразование Ханкеля есть @math{\sum a_i J_0(k i)}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Diff2 (@code{const char *}dir) -@deftypefnx {C function} @code{void} mgl_data_diff2 (@code{const char *}dir) -Double-differentiates (like Laplace operator) the data in given direction. +@cindex Swap +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Swap (@code{const char *}dir) +@deftypefnx {Функция С} @code{void} mgl_data_swap (@code{HMDT} dat, @code{const char *}dir) +Меняет местами левую и правую части данных в выбранном направлении(ях). Полезно для отображения результата FFT. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Swap (@code{const char *}dir) -@deftypefnx {C function} @code{void} mgl_data_swap (@code{HMDT} dat, @code{const char *}dir) -Swaps the left and right part of the data in given direction (useful for Fourier spectrum). + +@cindex Roll +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Roll (@code{char} dir, @code{num}) +@deftypefnx {Функция С} @code{void} mgl_data_roll (@code{HMDT} dat, @code{char} dir, @code{num}) +Сдвигает данные на @var{num} ячеек в выбранном направлении(ях). Соответствует замене индекса на @var{i}->(@var{i}+@var{num})%@var{n}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Mirror (@code{const char *}dir) -@deftypefnx {C function} @code{void} mgl_data_mirror (@code{HMDT} dat, @code{const char *}dir) -Mirror the left-to-right part of the data in given direction. Looks like change the value index @var{i}->@var{n-i}. + +@cindex Mirror +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Mirror (@code{const char *}dir) +@deftypefnx {Функция С} @code{void} mgl_data_mirror (@code{HMDT} dat, @code{const char *}dir) +Отражает данные в выбранном направлении(ях). Соответствует замене индекса на @var{i}->@var{n}-@var{i}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Sew (@code{const char *}dir, @code{float} da=@code{2*M_PI}) -@deftypefnx {C function} @code{void} mgl_data_sew (@code{HMDT} dat, @code{const char *}dir, @code{float} da) -Remove value steps (like phase jumps after inverse trigonometric functions) with period @var{da} in given direction. + +@cindex Sew +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Sew (@code{const char *}dir, @code{float} da=@code{2*M_PI}) +@deftypefnx {Функция С} @code{void} mgl_data_sew (@code{HMDT} dat, @code{const char *}dir, @code{float} da) +Удаляет скачки данных (например, скачки фазы после обратных тригонометрических функций) с периодом @var{da} в выбранном направлении(ях). @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Smooth (@code{int} Type, @code{const char *}dir, @code{float} delta=@code{0}) -@deftypefnx {C function} @code{void} mgl_data_smooth (@code{HMDT} dat, @code{int} Type, @code{float} delt, @code{const char *}dirs) -Smooths the data on specified direction or directions by method @var{Type}. Now 4 methods are supported: @code{SMOOTH_NONE} does nothing for @var{delta}=0 or approaches data to zero with the step @var{delta}, @code{SMOOTH_LINE_3} linear averaging by 3 points, @code{SMOOTH_LINE_5} linear averaging by 5 points, @code{SMOOTH_QUAD_5} quadratic averaging by 5 points. Parameter @var{delta} forbids to change values of array more than @var{delta} from the original ones. String @var{dirs} specifies the dimensions which will be smoothed. It may contain characters: 'x' for 1st dimension, 'y' for 2nd dimension, 'z' for 3d dimension. + +@cindex Smooth +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Smooth (@code{int} Type, @code{const char *}dir, @code{float} delta=@code{0}) +@deftypefnx {Функция С} @code{void} mgl_data_smooth (@code{HMDT} dat, @code{int} Type, @code{float} delt, @code{const char *}dirs) +Сглаживает данные в выбранном направлении(ях) @var{dir} методом @var{Type}. Сейчас поддерживаются 4 метода: @code{SMOOTH_NONE=0} ничего не делает при @var{delta}=0 или сдвигает данные к нулю на шагом @var{delta}, @code{SMOOTH_LINE_3=1} линейное усреднение по 3 точкам, @code{SMOOTH_LINE_5=2} линейное усреднение по 5 точкам, @code{SMOOTH_QUAD_5=3} квадратичное усреднение по 5 точкам. Параметр @var{delta} запрещает изменение значений на величину большую @var{delta}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Smooth (@code{const char *}dir) +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Smooth (@code{const char *}dir) Smooths the data on specified direction(s). This is the same as @code{Smooth()} but argument @var{Type} is specified in string as @samp{0} for @code{SMOOTH_NONE}, @samp{3} for @code{SMOOTH_LINE_3}, @samp{5} for @code{SMOOTH_LINE_5}. If string @var{dir} don't contain digits @samp{035} then @var{Type}=@code{SMOOTH_QUAD_5} is used. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Envelop (@code{char} dir=@code{'x'}) -@deftypefnx {C function} @code{void} mgl_data_envelop (@code{HMDT} dat, @code{char} dir) -Find envelop for data values along direction @var{dir}. + +@cindex Envelop +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Envelop (@code{char} dir=@code{'x'}) +@deftypefnx {Функция С} @code{void} mgl_data_envelop (@code{HMDT} dat, @code{char} dir) +Находит огибающую данных в выбранном направлении @var{dir}. +@end deftypefn + +@cindex Norm +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} Norm (@code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{bool} sym=@code{false}, @code{int} dim=@code{0}) +Нормирует данные в интервал [@var{v1},@var{v2}]. Если @var{sym}=@code{true}, то используется симметричный интервал [-max(|v1|,|v2|), max(|v1|,|v2|)]. Изменения применяются только к срезам >=@var{dim}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} NormSl (@code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{char} dir=@code{'z'}, @code{bool} keep_en=@code{true}, @code{bool} sym=@code{false}) -@deftypefnx {C function} @code{void} mgl_data_norm_slice (@code{HMDT} dat, @code{float} v1, @code{float} v2, @code{char} dir, @code{int} keep_en, @code{int} sym) -Normalizes data slice-by-slice along direction @var{dir} the data in slices to range [@var{v1},@var{v2}]. If flag @var{sym}=@code{true} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. If @var{keep_en} is set then maximal value of k-th slice will be limited by +@cindex NormSl +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} NormSl (@code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{char} dir=@code{'z'}, @code{bool} keep_en=@code{true}, @code{bool} sym=@code{false}) +@deftypefnx {Функция С} @code{void} mgl_data_norm_slice (@code{HMDT} dat, @code{float} v1, @code{float} v2, @code{char} dir, @code{int} keep_en, @code{int} sym) +Нормирует данные срез-за-срезом в выбранном направлении @var{dir} в интервал [@var{v1},@var{v2}]. Если @var{sym}=@code{true}, то используется симметричный интервал [-max(|v1|,|v2|), max(|v1|,|v2|)]. Если @var{keep}=@code{true}, то максимальное значение k-го среза ограничено величиной @iftex @math{\sqrt{\sum a_{ij}(k)/\sum a_{ij}(0)}}. @end iftex @@ -466,238 +510,228 @@ Normalizes data slice-by-slice along direction @var{dir} the data in slices to r @math{\sqrt@{\sum a_ij(k)/\sum a_ij(0)@}}. @end ifnottex @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} Norm (@code{float} v1=@code{0}, @code{float} v2=@code{1}, @code{bool} sym=@code{false}, @code{int} dim=@code{0}) -Normalizes the data to range [@var{v1},@var{v2}]. If flag @var{sym}=@code{true} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. Modification will be applied only for slices >=@var{dim}. -@end deftypefn @c ------------------------------------------------------------------ -@node Interpolation, Informational functions, Functions on direction, mglData class -@section Interpolation +@node Interpolation, Informational functions, Change data, mglData class +@section Интерполяция @cindex Spline -@cindex Spline1 -@cindex Linear -@cindex Linear1 -@cindex Spline5 -@cindex v - @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Spline (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}) @code{const} @deftypefnx {C function} @code{float} mgl_data_spline (@code{const HMDT} dat, @code{float} x, @code{float} y, @code{float} z) -Interpolates data by cubic spline to the given point @var{x} in [0...nx-1], @var{y} in [0...ny-1], @var{z} in [0...nz-1]. +Интерполирует данные кубическим сплайном в точке @var{x} в [0...nx-1], @var{y} в [0...ny-1], @var{z} в [0...nz-1]. @end deftypefn +@cindex Spline1 @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Spline1 (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}) @code{const} @deftypefnx {C function} @code{float} mgl_data_spline1 (@code{const HMDT} dat, @code{float} x, @code{float} y, @code{float} z) -Interpolates data by cubic spline to the given point @var{x}, @var{y}, @var{z} which assumed to be normalized in range [0, 1]. +Интерполирует данные кубическим сплайном в точке @var{x}, @var{y}, @var{z}, где координаты полагаются в интервале [0, 1]. @end deftypefn +@cindex Linear @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Linear (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}) @code{const} @deftypefnx {C function} @code{float} mgl_data_linear (@code{const HMDT} dat, @code{float} x, @code{float} y, @code{float} z) -Interpolates data by linear function to the given point @var{x} in [0...nx-1], @var{y} in [0...ny-1], @var{z} in [0...nz-1]. +Интерполирует данные линейной функцией в точке @var{x} в [0...nx-1], @var{y} в [0...ny-1], @var{z} в [0...nz-1]. @end deftypefn +@cindex Linear1 @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Linear1 (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}) @code{const} @deftypefnx {C function} @code{float} mgl_data_linear1 (@code{const HMDT} dat, @code{float} x, @code{float} y, @code{float} z) -Interpolates data by linear function to the given point @var{x}, @var{y}, @var{z} which assumed to be normalized in range [0, 1]. +Интерполирует данные линейной функцией в точке @var{x}, @var{y}, @var{z}, где координаты полагаются в интервале [0, 1]. @end deftypefn +@cindex v @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} v (@code{int} i, @code{int} j=@code{0}, @code{int} k=@code{0}) @code{const} @deftypefnx {C function} @code{float} mgl_data_get_value (@code{const HMDT} dat, @code{int} i, @code{int} j, @code{int} k) -Gets the value in specified cell of the data with border checking. +Возвращает значение ячейки с проверкой на границы массива данных. @end deftypefn +@cindex Spline5 @deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Spline5 (@code{float} x, @code{float} y, @code{float} z, @code{float} &dx, @code{float} &dy, @code{float} &dz) @code{const} -Interpolate by 5-th order splain the data to given point @var{x}, @var{y}, @var{z} which normalized in range [0, 1] and evaluate its derivatives. +Интерполирует данные сплайном 5-го порядка в точке @var{x}, @var{y}, @var{z}, где координаты полагаются в интервале [0, 1]. @end deftypefn @deftypefn {C function} @code{float *} mgl_data_value (@code{HMDT} dat, @code{int} i, @code{int} j, @code{int} k) -Gets the pointer to data element. +Возвращает указатель на ячейку данных. Может быть не действителен после вызова любой функции изменяющей данные. @end deftypefn @deftypefn {C function} @code{const float *} mgl_data_data (@code{const HMDT} dat) -Gets the pointer to internal data array. +Возвращает указатель на весь массив данных. Может быть не действителен после вызова любой функции изменяющей данные. @end deftypefn @c ------------------------------------------------------------------ @node Informational functions, Operators, Interpolation, mglData class -@section Informational functions +@section Информационные функции @cindex PrintInfo -@cindex Maximal -@cindex Minimal -@cindex Momentum -@cindex Find -@cindex Last -@cindex FindAny - -@deftypefn {Method on @code{mglData} (C++)} @code{void} PrintInfo (@code{char *}buf, @code{bool} all=@code{false}) @code{const} -Print information about the data (sizes and momentum) to string @var{buf}. Parameter @var{all} set to print most of information (if @code{true}) or just basic one like dimensions, maximal an minimal values. +@deftypefn {Метод класса @code{mglData} (C++)} @code{void} PrintInfo (@code{char *}buf, @code{bool} all=@code{false}) @code{const} +Печатает информацию о данных (размеры, моменты и пр.) в строку @var{buf}. Параметр @var{all} устанавливает печатать ли подробную информацию (если @code{true}) или только базовую информацию. @end deftypefn -@deftypefn {Method on @code{mglData} (C++)} @code{void} PrintInfo (@code{FILE *}fp) @code{const} -Print information about the data (sizes and momentum) to FILE (for example, stdout) +@deftypefn {Метод класса @code{mglData} (C++)} @code{void} PrintInfo (@code{FILE *}fp) @code{const} +Аналогично, но выводит в файл (или, например, в stdout). @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Maximal () @code{const} -@deftypefnx {C function} @code{float} mgl_data_max (@code{const HMDT} dat) -Gets maximal value of the data. +@cindex Maximal +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Maximal () @code{const} +@deftypefnx {Функция С} @code{float} mgl_data_max (@code{const HMDT} dat) +Возвращает максимальное значение массива данных. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Minimal () @code{const} -@deftypefnx {C function} @code{float} mgl_data_min (@code{HMDT} dat) @code{const} -Gets minimal value of the data. +@cindex Minimal +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Minimal () @code{const} +@deftypefnx {Функция С} @code{float} mgl_data_min (@code{HMDT} dat) @code{const} +Возвращает минимальное значение массива данных. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Maximal (@code{int} &i, @code{int} &j, @code{int} &k) @code{const} -@deftypefnx {C function} @code{float} mgl_data_max_int (@code{const HMDT} dat, @code{int} *i, @code{int} *j, @code{int} *k) -Gets maximal value of the data and its position in the array to variables @var{i}, @var{j}, @var{k}. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Maximal (@code{int} &i, @code{int} &j, @code{int} &k) @code{const} +@deftypefnx {Функция С} @code{float} mgl_data_max_int (@code{const HMDT} dat, @code{int} *i, @code{int} *j, @code{int} *k) +Возвращает максимальное значение массива данных и его положение в переменные @var{i}, @var{j}, @var{k}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Minimal (@code{int} &i, @code{int} &j, @code{int} &k) @code{const} -@deftypefnx {C function} @code{float} mgl_data_min_int (@code{const HMDT} dat, @code{int} *i, @code{int} *j, @code{int} *k) -Gets minimal value of the data and its position in the array to variables @var{i}, @var{j}, @var{k}. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Minimal (@code{int} &i, @code{int} &j, @code{int} &k) @code{const} +@deftypefnx {Функция С} @code{float} mgl_data_min_int (@code{const HMDT} dat, @code{int} *i, @code{int} *j, @code{int} *k) +Возвращает минимальное значение массива данных и его положение в переменные @var{i}, @var{j}, @var{k}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Maximal (@code{float} &i, @code{float} &j, @code{float} &k) @code{const} -@deftypefnx {C function} @code{float} mgl_data_max_real (@code{const HMDT} dat, @code{float} *x, @code{float} *y, @code{float} *z) -Gets maximal value of the data and its approximated (interpolated) position to variables @var{i}, @var{j}, @var{k}. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Maximal (@code{float} &i, @code{float} &j, @code{float} &k) @code{const} +@deftypefnx {Функция С} @code{float} mgl_data_max_real (@code{const HMDT} dat, @code{float} *x, @code{float} *y, @code{float} *z) +Возвращает максимальное значение массива данных и его приближенное (интерполированное) положение в переменные @var{i}, @var{j}, @var{k}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Minimal (@code{float} &i, @code{float} &j, @code{float} &k) @code{const} -@deftypefnx {C function} @code{float} mgl_data_min_real (@code{const HMDT} dat, @code{float} *x, @code{float} *y, @code{float} *z) -Gets minimal value of the data and its approximated (interpolated) position to variables @var{i}, @var{j}, @var{k}. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Minimal (@code{float} &i, @code{float} &j, @code{float} &k) @code{const} +@deftypefnx {Функция С} @code{float} mgl_data_min_real (@code{const HMDT} dat, @code{float} *x, @code{float} *y, @code{float} *z) +Возвращает минимальное значение массива данных и его приближенное (интерполированное) положение в переменные @var{i}, @var{j}, @var{k}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Momentum (@code{char} dir, @code{float} &m, @code{float} &w) @code{const} -@deftypefnx {C function} @code{float} mgl_data_momentum_mw (@code{const HMDT} dat, @code{char} dir, @code{float} *m, @code{float} *w) -Gets zero-momentum (energy, @math{I=\sum a_i}) and write first momentum (median, @math{m = \sum \xi_i a_i/I}) and second momentum (width, @math{w^2 = \sum (\xi_i-m)^2 a_i/I}) to variables. Here @math{\xi} is corresponding coordinate if @var{dir} is @samp{'x'}, @samp{'y'} or @samp{'z'}. Otherwise median is @math{m = \sum a_i/N}, width is @math{w^2 = \sum (a_i-m)^2/N}. +@cindex Momentum +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Momentum (@code{char} dir, @code{float} &m, @code{float} &w) @code{const} +@deftypefnx {Функция С} @code{float} mgl_data_momentum_mw (@code{const HMDT} dat, @code{char} dir, @code{float} *m, @code{float} *w) +Возвращает нулевой момент (энергию, @math{I=\sum a_i}) и записывает первый (среднее, @math{m = \sum \xi_i a_i/I}) и второй момент (ширину, @math{w^2 = \sum (\xi_i-m)^2 a_i/I}). Здесь @math{\xi} -- соответствующая кордината если @var{dir} равно @samp{'x'}, @samp{'y'}, @samp{'z'}. В противном случае среднее и ширина равны @math{m = \sum a_i/N}, @math{w^2 = \sum (a_i-m)^2/N}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++)} @code{float} Momentum (@code{char} dir, @code{float} &m, @code{float} &w, @code{float} &s, @code{float} &k) @code{const} -Gets zero-momentum (energy, @math{I=\sum a_i}) and write first momentum (median, @math{m = \sum \xi_i a_i/I}), second momentum (width, @math{w^2 = \sum (\xi_i-m)^2 a_i/I}, third momentum (skewness, @math{s = \sum (\xi_i-m)^3 a_i/ I w^3}) and fourth momentum (kurtosis, @math{k = \sum (\xi_i-m)^4 a_i / 3 I w^4})) to variables. Here @math{\xi} is corresponding coordinate if @var{dir} is @samp{'x'}, @samp{'y'} or @samp{'z'}. Otherwise median is @math{m = \sum a_i/N}, width is @math{w^2 = \sum (a_i-m)^2/N} and so on. +@deftypefn {Метод класса @code{mglData} (C++)} @code{float} Momentum (@code{char} dir, @code{float} &m, @code{float} &w, @code{float} &s, @code{float} &k) @code{const} +Возвращает нулевой момент (энергию, @math{I=\sum a_i}) и записывает первый (среднее, @math{m = \sum \xi_i a_i/I}), второй (ширину, @math{w^2 = \sum (\xi_i-m)^2 a_i/I}), третий (асимметрия, @math{s = \sum (\xi_i-m)^3 a_i/ I w^3}) и четвертый моменты (эксцесс, @math{k = \sum (\xi_i-m)^4 a_i / 3 I w^4})). Здесь @math{\xi} -- соответствующая кордината если @var{dir} равно @samp{'x'}, @samp{'y'}, @samp{'z'}. В противном случае среднее, ширина, асимметрия, эксцесс равны @math{m = \sum a_i/N}, @math{w^2 = \sum (a_i-m)^2/N} и т.д. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Find (@code{const char *}cond, @code{int} &i, @code{int} &j, @code{int} &k) @code{const} -@deftypefnx {C function} @code{float} mgl_data_first (@code{const HMDT} dat, @code{const char *}cond, @code{int} *i, @code{int} *j, @code{int} *k) -Find position (after specified in @var{i}, @var{j}, @var{k}) of first nonzero value of formula @var{cond}. Function return the data value at found position. +@cindex Find +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Find (@code{const char *}cond, @code{int} &i, @code{int} &j, @code{int} &k) @code{const} +@deftypefnx {Функция С} @code{float} mgl_data_first (@code{const HMDT} dat, @code{const char *}cond, @code{int} *i, @code{int} *j, @code{int} *k) +Находит положение (после заданного в @var{i}, @var{j}, @var{k}) первого не нулевого значения формулы @var{cond}. Функция возвращает найденное значение и записывает его положение в @var{i}, @var{j}, @var{k}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{float} Last (@code{const char *}cond, @code{int} &i, @code{int} &j, @code{int} &k) @code{const} -@deftypefnx {C function} @code{float} mgl_data_last (@code{const HMDT} dat, @code{const char *}cond, @code{int} *i, @code{int} *j, @code{int} *k) -Find position (before specified in @var{i}, @var{j}, @var{k}) of last nonzero value of formula @var{cond}. Function return the data value at found position. +@cindex Last +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{float} Last (@code{const char *}cond, @code{int} &i, @code{int} &j, @code{int} &k) @code{const} +@deftypefnx {Функция С} @code{float} mgl_data_last (@code{const HMDT} dat, @code{const char *}cond, @code{int} *i, @code{int} *j, @code{int} *k) +Находит положение (перед заданного в @var{i}, @var{j}, @var{k}) последнего не нулевого значения формулы @var{cond}. Функция возвращает найденное значение и записывает его положение в @var{i}, @var{j}, @var{k}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{int} Find (@code{const char *}cond, @code{char} dir, @code{int} i=@code{0}, @code{int} j=@code{0}, @code{int} k=@code{0}) @code{const} -@deftypefnx {C function} @code{float} mgl_data_find (@code{const HMDT} dat, @code{const char *}cond, @code{int} i, @code{int} j, @code{int} k) -Return position of first in direction @var{dir} nonzero value of formula @var{cond}. The search is started from point @{i,j,k@}. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{int} Find (@code{const char *}cond, @code{char} dir, @code{int} i=@code{0}, @code{int} j=@code{0}, @code{int} k=@code{0}) @code{const} +@deftypefnx {Функция С} @code{float} mgl_data_find (@code{const HMDT} dat, @code{const char *}cond, @code{int} i, @code{int} j, @code{int} k) +Возвращает положение первого в направлении @var{dir} не нулевого значения формулы @var{cond}. Поиск начинается с точки @{i,j,k@}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{bool} FindAny (@code{const char *}cond) @code{const} -@deftypefnx {C function} @code{float} mgl_data_find_any (@code{const HMDT} dat, @code{const char *}cond) -Determines if any nonzero value of formula in the data array. +@cindex FindAny +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{bool} FindAny (@code{const char *}cond) @code{const} +@deftypefnx {Функция С} @code{float} mgl_data_find_any (@code{const HMDT} dat, @code{const char *}cond) +Определяет есть ли хоть одно значение массива, удовлетворяющее условию @var{cond}. @end deftypefn @c ------------------------------------------------------------------ @node Operators, Global functions, Informational functions, mglData class -@section Operators +@section Операторы -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} operator= (@code{const mglData &}d) -Copies data from other variable. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} operator= (@code{const mglData &}d) +Копирует данные из другого экземпляра. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} operator*= (@code{const mglData &}d) -@deftypefnx {C function} @code{void} mgl_data_mul_dat (@code{HMDT} dat, @code{const HMDT} d) -Multiplies the data by the other one for each element. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} operator*= (@code{const mglData &}d) +@deftypefnx {Функция С} @code{void} mgl_data_mul_dat (@code{HMDT} dat, @code{const HMDT} d) +Поэлементно умножает массив @var{d}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} operator/= (@code{const mglData &}d) -@deftypefnx {C function} @code{void} mgl_data_div_dat (@code{HMDT} dat, @code{const HMDT} d) -Divides the data by the other one for each element. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} operator/= (@code{const mglData &}d) +@deftypefnx {Функция С} @code{void} mgl_data_div_dat (@code{HMDT} dat, @code{const HMDT} d) +Поэлементно делит массив @var{d}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} operator+= (@code{const mglData &}d) -@deftypefnx {C function} @code{void} mgl_data_add_dat (@code{HMDT} dat, @code{const HMDT} d) +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} operator+= (@code{const mglData &}d) +@deftypefnx {Функция С} @code{void} mgl_data_add_dat (@code{HMDT} dat, @code{const HMDT} d) +Поэлементно прибавляет @var{d}. Adds the other data. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} operator-= (@code{const mglData &}d) -@deftypefnx {C function} @code{void} mgl_data_sub_dat (@code{HMDT} dat, @code{const HMDT} d) -Subtracts the other data. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} operator-= (@code{const mglData &}d) +@deftypefnx {Функция С} @code{void} mgl_data_sub_dat (@code{HMDT} dat, @code{const HMDT} d) +Поэлементно вычитает @var{d}. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} operator*= (@code{float} d) -@deftypefnx {C function} @code{void} mgl_data_mul_num (@code{HMDT} dat, @code{float} d) -Multiplies each element by the number. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} operator*= (@code{float} d) +@deftypefnx {Функция С} @code{void} mgl_data_mul_num (@code{HMDT} dat, @code{float} d) +Умножает каждый элемент на число. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} operator/= (@code{float} d) -@deftypefnx {C function} @code{void} mgl_data_div_num (@code{HMDT} dat, @code{float} d) -Divides each element by the number. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} operator/= (@code{float} d) +@deftypefnx {Функция С} @code{void} mgl_data_div_num (@code{HMDT} dat, @code{float} d) +Делит каждый элемент на число. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} operator+= (@code{float} d) -@deftypefnx {C function} @code{void} mgl_data_add_num (@code{HMDT} dat, @code{float} d) -Adds the number to each element. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} operator+= (@code{float} d) +@deftypefnx {Функция С} @code{void} mgl_data_add_num (@code{HMDT} dat, @code{float} d) +Прибавляет число к каждому элементу. @end deftypefn -@deftypefn {Method on @code{mglData} (C++, Python)} @code{void} operator-= (@code{float} d) -@deftypefnx {C function} @code{void} mgl_data_sub_num (@code{HMDT} dat, @code{float} d) -Subtracts the number to each element. +@deftypefn {Метод класса @code{mglData} (C++, Python)} @code{void} operator-= (@code{float} d) +@deftypefnx {Функция С} @code{void} mgl_data_sub_num (@code{HMDT} dat, @code{float} d) +Вычитает число из каждого элемента. @end deftypefn -@deftypefn {Library Function} mglData operator+ (@code{const mglData &}a, @code{const mglData &}b) -Adds the other data. -@end deftypefn -@deftypefn {Library Function} mglData operator+ (@code{float} a, @code{const mglData &}b) -Adds the number. +@deftypefn {Функция библиотеки} mglData operator+ (@code{const mglData &}a, @code{const mglData &}b) +Возвращает поэлементную сумму данных. @end deftypefn -@deftypefn {Library Function} mglData operator+ (@code{const mglData &}a, @code{float} b) -Adds the number. +@deftypefn {Функция библиотеки} mglData operator+ (@code{float} a, @code{const mglData &}b) +@deftypefnx {Функция библиотеки} mglData operator+ (@code{const mglData &}a, @code{float} b) +Возвращает поэлементную сумму данных и числа. @end deftypefn -@deftypefn {Library Function} mglData operator- (@code{const mglData &}a, @code{const mglData &}b) -Subtracts the other data. +@deftypefn {Функция библиотеки} mglData operator- (@code{const mglData &}a, @code{const mglData &}b) +Возвращает поэлементную разность данных. @end deftypefn -@deftypefn {Library Function} mglData operator- (@code{float} a, @code{const mglData &}b) -Subtracts from the number. -@end deftypefn -@deftypefn {Library Function} mglData operator- (@code{const mglData &}a, @code{float} b) -Subtracts the number. +@deftypefn {Функция библиотеки} mglData operator- (@code{float} a, @code{const mglData &}b) +@deftypefnx {Функция библиотеки} mglData operator- (@code{const mglData &}a, @code{float} b) +Возвращает поэлементную разность числа и данных. @end deftypefn -@deftypefn {Library Function} mglData operator* (@code{const mglData &}a, @code{const mglData &}b) -Multiplies by the other data. -@end deftypefn -@deftypefn {Library Function} mglData operator* (@code{float} a, @code{const mglData &}b) -Multiplies by the number. +@deftypefn {Функция библиотеки} mglData operator* (@code{const mglData &}a, @code{const mglData &}b) +Возвращает поэлементное произведение данных. @end deftypefn -@deftypefn {Library Function} mglData operator* (@code{const mglData &}a, @code{float} b) -Multiplies by the number. +@deftypefn {Функция библиотеки} mglData operator* (@code{float} a, @code{const mglData &}b) +@deftypefnx {Функция библиотеки} mglData operator* (@code{const mglData &}a, @code{float} b) +Возвращает поэлементное произведение данных на число. @end deftypefn -@deftypefn {Library Function} mglData operator/ (@code{const mglData &}a, @code{const mglData &}b) -Divides by the other data. +@deftypefn {Функция библиотеки} mglData operator/ (@code{const mglData &}a, @code{const mglData &}b) +Возвращает поэлементное деление данных. @end deftypefn -@deftypefn {Library Function} mglData operator/ (@code{const mglData &}a, @code{float} b) -Divides by the number. +@deftypefn {Функция библиотеки} mglData operator/ (@code{const mglData &}a, @code{float} b) +Возвращает поэлементное деление данных на число. @end deftypefn @c ------------------------------------------------------------------ @node Global functions, , Operators, mglData class -@section Global functions +@section Глобальные функции -These functions are not methods of @code{mglData} class. However it have additional functionality to handle data. So I put it in this chapter. +Эти функции не методы класса @code{mglData}, но они дают дополнительные возможности по обработке данных. Поэтому я поместил их в эту главу. -@deftypefn {Global function} @code{mglData} mglTransform (@code{const mglData &}real, @code{const mglData &}imag, @code{const char *}type) -@deftypefnx {C function} @code{HMDT} mgl_transform (@code{const HMDT} real, @code{const HMDT} imag, @code{const char *}type) -Do integral transformation of complex data @var{real}, @var{imag} on specified direction. Now only Fourier transformation is supported. The order of transformations is specified in string @var{type}: first character for x-dimension, second one for y-dimension, third one for z-dimension. The possible character are: @samp{f} is forward Fourier transformation, @samp{i} is inverse Fourier transformation, @samp{n} or @samp{ } is no transformation. +@deftypefn {Функция библиотеки} @code{mglData} mglTransform (@code{const mglData &}real, @code{const mglData &}imag, @code{const char *}type) +@deftypefnx {Функция С} @code{HMDT} mgl_transform (@code{const HMDT} real, @code{const HMDT} imag, @code{const char *}type) +Выполняет интегральное преобразование комплексных данных @var{real}, @var{imag} в выбранном направлении и возвращает модуль результата. Порядок и тип преобразований задается строкой @var{type}: первый символ для x-направления, второй для y-направления, третий для z-направления. Возможные символы: @samp{f} -- прямое преобразование Фурье, @samp{i} -- обратное преобразование Фурье, @samp{s} -- синус преобразование, @samp{c} -- косинус преобразование, @samp{h} -- преобразование Ханкеля, @samp{n} или @samp{ } -- нет преобразования. @end deftypefn -@deftypefn {Global function} @code{mglData} mglTransformA @code{const mglData &}ampl, @code{const mglData &}phase, @code{const char *}type) -@deftypefnx {C function} @code{HMDT} mgl_transform_a @code{const HMDT} ampl, @code{const HMDT} phase, @code{const char *}type) -Do integral transformation of complex data @var{ampl}, @var{phase} on specified direction. Now only Fourier transformation is supported. The order of transformations is specified in string @var{type}: first character for x-dimension, second one for y-dimension, third one for z-dimension. The possible character are: @samp{f} is forward Fourier transformation, @samp{i} is inverse Fourier transformation, @samp{n} or @samp{ } is no transformation. +@deftypefn {Функция библиотеки} @code{mglData} mglTransformA @code{const mglData &}ampl, @code{const mglData &}phase, @code{const char *}type) +@deftypefnx {Функция С} @code{HMDT} mgl_transform_a @code{const HMDT} ampl, @code{const HMDT} phase, @code{const char *}type) +Аналогично предыдущему с заданными амплитудой @var{ampl} и фазой @var{phase} комплексных чисел. @end deftypefn -@deftypefn {Global function} @code{mglData} mglSTFA (@code{const mglData &}real, @code{const mglData &}imag, @code{int} dn, @code{char} dir=@code{'x'}) -@deftypefnx {C function} @code{HMDT} mgl_data_stfa (@code{const HMDT} real, @code{const HMDT} imag, @code{int} dn,@code{char} dir) -Short time Fourier analysis for real and imaginary parts. Output is amplitude of partial Fourier of length @var{dn}. For example if @var{dir}=@samp{x}, result will have size @{int(nx/dn), dn, ny@} and it will contain @math{res[i,j,k]=|\sum_d^dn exp(I*j*d)*(real[i*dn+d,k]+I*imag[i*dn+d,k])|/dn}. +@deftypefn {Функция библиотеки} @code{mglData} mglSTFA (@code{const mglData &}real, @code{const mglData &}imag, @code{int} dn, @code{char} dir=@code{'x'}) +@deftypefnx {Функция С} @code{HMDT} mgl_data_stfa (@code{const HMDT} real, @code{const HMDT} imag, @code{int} dn,@code{char} dir) +Выполняет оконное преобразование Фурье длиной @var{dn} для комплексных данных @var{real}, @var{imag} и возвращает модуль результата. Например, для @var{dir}=@samp{x} результат будет иметь размер @{int(nx/dn), dn, ny@} и будет равен @math{res[i,j,k]=|\sum_d^dn exp(I*j*d)*(real[i*dn+d,k]+I*imag[i*dn+d,k])|/dn}. @end deftypefn -@deftypefn {Global function} @code{mglData} mglPDE (@code{const char *}ham, @code{const mglData &}ini_re, @code{const mglData &}ini_im, @code{mglPoint} Min, @code{mglPoint} Max, @code{float} dz=@code{0.1}, @code{float} k0=@code{100}) -@deftypefnx {C function} @code{HMDT} mgl_pde_solve (@code{HMGL} gr, @code{const char *}ham, @code{const HMDT} ini_re, @code{const HMDT} ini_im, @code{float} dz, @code{float} k0) -Solves equation du/dz = i*k0*@var{ham}(p,q,x,y,z,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators. Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Parameters @var{Min}, @var{Max} set the bounding box for the solution. Note, that really this ranges are increased by factor 3/2 for purpose of reducing reflection from boundaries. Parameter @var{dz} set the step along evolutionary coordinate z. At this moment, simplified form of function @var{ham} is supported -- all ``mixed'' terms (like @samp{x*p}->x*d/dx) are excluded. For example, in 2D case this function is effectively @math{ham = f(p,z) + g(x,z,u)}. However commutable combinations (like @samp{x*q}->x*d/dy) are allowed. Here variable @samp{u} is used for field amplitude |u|. This allow one solve nonlinear problems -- for example, for nonlinear Shrodinger equation you may set @code{ham="p^2 + q^2 - u^2"}. You may specify imaginary part for wave absorption, like @code{ham = "p^2 + i*x*(x>0)"}, but only if dependence on variable @samp{i} is linear (i.e. @math{ham = hre+i*him}). @sref{PDE sample} +@deftypefn {Функция библиотеки} @code{mglData} mglPDE (@code{const char *}ham, @code{const mglData &}ini_re, @code{const mglData &}ini_im, @code{mglPoint} Min, @code{mglPoint} Max, @code{float} dz=@code{0.1}, @code{float} k0=@code{100}) +@deftypefnx {Функция С} @code{HMDT} mgl_pde_solve (@code{HMGL} gr, @code{const char *}ham, @code{const HMDT} ini_re, @code{const HMDT} ini_im, @code{float} dz, @code{float} k0) +Решает уравнение в частных производных du/dz = i*k0*@var{ham}(p,q,x,y,z,|u|)[u], где p=-i/k0*d/dx, q=-i/k0*d/dy -- псевдо-дифференциальные операторы. Параметры @var{ini_re}, @var{ini_im} задают начальное распределение поля. Координаты в уравнении и в решении полагаются в диапазоне осей координат. Замечу, что внутри этот диапазон увеличивается в 3/2 раза для уменьшения отражения от границ расчетного интервала. Параметр @var{dz} задает шаг по эволюционной координате z. В данный момент использован упрощенный алгоритм, когда все ``смешанные'' члена (типа @samp{x*p}->x*d/dx) исключаются. Например, в 2D случае это функции типа @math{ham = f(p,z) + g(x,z,u)}. При этом допускаются коммутирующие комбинации (типа @samp{x*q}->x*d/dy). Переменная @samp{u} используется для обозначения амплитуды поля |u|. Это позволяет решать нелинейные задачи -- например, нелинейное уравнение Шредингера @code{ham='p^2+q^2-u^2'}. Также можно указать мнимую часть для поглощения (типа @code{ham = 'p^2+i*x*(x>0)'}), но только если зависимость от @samp{i} линейная, т.е. @math{ham = hre+i*him}. @sref{PDE sample} @end deftypefn -@deftypefn {Global function} @code{mglData} mglRay (@code{const char *}ham, @code{mglPoint} r0, @code{mglPoint} p0, @code{float} dt=@code{0.1}, @code{float} tmax=@code{10}) -@deftypefnx {C function} @code{HMDT} mgl_ray_trace (@code{const char *}ham, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} px, @code{float} py, @code{float} pz, @code{float} dt, @code{float} tmax) -Solves GO ray equation like dr/dt = d @var{ham}/dp, dp/dt = -d @var{ham}/dr. This is Hamiltonian equations for particle trajectory in 3D case. Here @var{ham} is Hamiltonian which may depend on coordinates @samp{x}, @samp{y}, @samp{z}, momentums @samp{p}=px, @samp{q}=py, @samp{v}=pz and time @samp{t}: @math{ham = H(x,y,z,p,q,v,t)}. The starting point (at @code{t=0}) is defined by variables @var{r0}, @var{p0}. Parameters @var{dt} and @var{tmax} specify the integration step and maximal time for ray tracing. Result is array of @{x,y,z,p,q,v,t@} with dimensions @{7 * int(@var{tmax}/@var{dt}+1) @}. +@deftypefn {Функция библиотеки} @code{mglData} mglRay (@code{const char *}ham, @code{mglPoint} r0, @code{mglPoint} p0, @code{float} dt=@code{0.1}, @code{float} tmax=@code{10}) +@deftypefnx {Функция С} @code{HMDT} mgl_ray_trace (@code{const char *}ham, @code{float} x0, @code{float} y0, @code{float} z0, @code{float} px, @code{float} py, @code{float} pz, @code{float} dt, @code{float} tmax) +Решает систему геометрооптических уравнений d@emph{r}/dt = d @var{ham}/d@emph{p}, d@emph{p}/dt = -d @var{ham}/d@emph{r}. Это гамильтоновы уравнения для траектории частицы в 3D случае. Гамильтониан @var{ham} может зависеть от координат @samp{x}, @samp{y}, @samp{z}, импульсов @samp{p}=px, @samp{q}=py, @samp{v}=pz и времени @samp{t}: @math{ham = H(x,y,z,p,q,v,t)}. Начальная точка (при @code{t=0}) задается переменными @{@var{x0}, @var{y0}, @var{z0}, @var{p0}, @var{q0}, @var{v0}@}. Параметры @var{dt} и @var{tmax} задают шаг и максимальное время интегрирования. Результат -- массив @{x,y,z,p,q,v,t@} с размером @{7 * int(@var{tmax}/@var{dt}+1) @}. @sref{Beam tracing sample} @end deftypefn -@deftypefn {Global function} @code{mglData} mglQO2d (@code{const char *}ham, @code{const mglData &}ini_re, @code{const mglData &}ini_im, @code{const mglData &}ray, @code{float} r=@code{1}, @code{float} k0=@code{100}, @code{mglData *}xx=@code{0}, @code{mglData *}yy=@code{0}, @code{bool} UseR=@code{true}) -@deftypefnx {C function} @code{HMDT} mgl_qo2d_solve (@code{const char *}ham, @code{const HMDT} ini_re, @code{const HMDT} ini_im, @code{const HMDT} ray, @code{float} r, @code{float} k0, @code{HMDT} xx, @code{HMDT} yy) -Solves equation du/dt = i*k0*@var{ham}(p,q,x,y,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators (see @code{mglPDE()} for details). Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Parameters @var{ray} set the reference ray, i.e. the ray around which the accompanied coordinate system will be maked. You may use, for example, the array created by @code{mglRay()} function. Note, that the reference ray @strong{must be} smooth enough to make accompanied coodrinates unambiguity. Otherwise errors in the solution may appear. If @var{xx} and @var{yy} are non-zero then Cartesian coordinates for each point will be written into them. @sref{Beam tracing sample} +@deftypefn {Функция библиотеки} @code{mglData} mglQO2d (@code{const char *}ham, @code{const mglData &}ini_re, @code{const mglData &}ini_im, @code{const mglData &}ray, @code{float} r=@code{1}, @code{float} k0=@code{100}, @code{mglData *}xx=@code{0}, @code{mglData *}yy=@code{0}, @code{bool} UseR=@code{true}) +@deftypefnx {Функция С} @code{HMDT} mgl_qo2d_solve (@code{const char *}ham, @code{const HMDT} ini_re, @code{const HMDT} ini_im, @code{const HMDT} ray, @code{float} r, @code{float} k0, @code{HMDT} xx, @code{HMDT} yy) +Решает уравнение в частных производных du/dt = i*k0*@var{ham}(p,q,x,y,|u|)[u] в сопровождающей системе координат, где p=-i/k0*d/dx, q=-i/k0*d/dy -- псевдо-дифференциальные операторы. Параметры @var{ini_re}, @var{ini_im} задают начальное распределение поля. Параметр @var{ray} задает опорный луч для сопровождающей системы координат. Можно использовать луч найденный с помощью @code{mglRay()}. Опорный луч должен быть достаточно гладкий, чтобы система координат была однозначной и для исключения ошибок интегрирования. Если массивы @var{xx} и @var{yy} указаны, то в них записываются декартовы координаты для каждой точки найденного решения. См. также @code{mglPDE()}. @sref{Beam tracing sample} @end deftypefn -@deftypefn {Global function} @code{mglData} mglJacobian (@code{const mglData &}x, @code{const mglData &}y) -@deftypefnx {Global function} @code{mglData} mglJacobian (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z) -@deftypefnx {C function} @code{HMDT} mgl_jacobian_2d (@code{const HMDT} x, @code{const HMDT} y) -@deftypefnx {C function} @code{HMDT} mgl_jacobian_3d (@code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z) -Computates the Jacobian for transformation @{i,j,k@} to @{@var{x},@var{y},@var{z}@} where initial coordinates @{i,j,k@} are data indexes normalized in range [0,1]. The Jacobian is determined by formula det||@math{dr_\alpha/d\xi_\beta}|| where @math{r}=@{@var{x},@var{y},@var{z}@} and @math{\xi}=@{i,j,k@}. All dimensions must be the same for all data arrays. Data must be 3D if all 3 arrays @{@var{x},@var{y},@var{z}@} are specified or 2D if only 2 arrays @{@var{x},@var{y}@} are specified. +@deftypefn {Функция библиотеки} @code{mglData} mglJacobian (@code{const mglData &}x, @code{const mglData &}y) +@deftypefnx {Функция библиотеки} @code{mglData} mglJacobian (@code{const mglData &}x, @code{const mglData &}y, @code{const mglData &}z) +@deftypefnx {Функция С} @code{HMDT} mgl_jacobian_2d (@code{const HMDT} x, @code{const HMDT} y) +@deftypefnx {Функция С} @code{HMDT} mgl_jacobian_3d (@code{const HMDT} x, @code{const HMDT} y, @code{const HMDT} z) +Вычисляет якобиан преобразования @{i,j,k@} в @{@var{x},@var{y},@var{z}@}, где координаты @{i,j,k@} полагаются нормированными в интервал [0,1]. Якобиан находится по формуле det||@math{dr_\alpha/d\xi_\beta}||, где @math{r}=@{@var{x},@var{y},@var{z}@} и @math{\xi}=@{i,j,k@}. Все размерности всех массивов должны быть одинаковы. Данные должны быть трехмерными если указаны все 3 массива @{@var{x},@var{y},@var{z}@} или двумерными если только 2 массива @{@var{x},@var{y}@}. @end deftypefn diff --git a/texinfo/ex_mgl_en.texi b/texinfo/ex_mgl_en.texi new file mode 100644 index 0000000..5dab290 --- /dev/null +++ b/texinfo/ex_mgl_en.texi @@ -0,0 +1,774 @@ +@c ------------------------------------------------------------------ +@chapter MathGL examples + +This chapter contain information about basic and advanced MathGL, hints and samples for all types of graphics. I recommend you read first 2 sections one after another and at least look on ``Hints'' section. Also I recommend you to look at @ref{General concepts}. Sample code for some of these examples can be found in @uref{http://mathgl.sf.net/pictures.html} and in @ref{Samples}. + +@menu +* Basic usage:: +* Advanced usage:: +* Data handling:: +* Data plotting:: +* Hints:: +@end menu + +@c ------------------------------------------------------------------ +@node Basic usage, Advanced usage, , Examples +@section Basic usage + +MGL script can be used by several manners. Each has positive and negative sides: +@itemize @bullet +@item +@emph{The using of MGL in UDAV.} + +Positive side is the possibility to view the plot at once and to modify it, rotate, zoom or switch on transparency or lighting) by hand or by mouse. Negative sides are: the need of X-terminal. + +@item +@emph{Direct writing to file in bitmap or vector format without creation of graphical window.} + +Positive aspects are: batch processing of similar data set, for example, a set of resulting data files for different calculation parameters), running from the console program, including the cluster calculation), fast and automated drawing, saving pictures for further analysis, or demonstration). Negative sides are: the usage of the external program for picture viewing. Also, the data plotting is non-visual. So, you have to imagine the picture, view angles, lighting and so on) before the plotting. I recommend to use graphical window for determining the optimal parameters of plotting on the base of some typical data set. And later use these parameters for batch processing in console program. + +In this case you can use a set of programs: @code{mgl2png}, @code{mgl2gif}, @code{mgl2eps}, @code{mgl2svg} or @code{mglview} for viewing. +@end itemize + +The simplest script is +@verbatim +box # draw bounding box +axis # draw axis +fplot 'x^3' # draw some function +@end verbatim + +Just type it in UDAV and press F5. Also you can save it in text file @samp{test.mgl} and type in the console @code{mgl2png test.mgl} what produce file @samp{test.mgl.png} with resulting picture. + +@c ------------------------------------------------------------------ +@node Advanced usage, Data handling, Basic usage, Examples +@section Advanced usage + +Now I show several non-obvious features of MGL: several subplots in a single picture, curvilinear coordinates, text printing and so on. Generally you may miss this section at first reading, but I don't recommend it. + +@menu +* Subplots:: +* Axis and grids:: +* Curvilinear coordinates:: +* Text printing example:: +@end menu + +@c ------------------------------------------------------------------ +@node Subplots, Axis and grids, , Advanced usage +@subsection Subplots + +Let me demonstrate possibilities of axes transformation. MathGL has the following functions: @code{SubPlot}, @code{InPlot}, @code{Aspect} and @code{Rotate}, @pxref{Transformation matrix}). The order of their calling is strictly determined. First, one changes the position of axes in image area, functions @code{SubPlot} and @code{InPlot}). After that one may rotate the plot, function @code{Rotate}). Finally, one may change aspects of axes, function @code{Aspect}). The following code illustrates the aforesaid it: +@verbatim +subplot 2 2 0:box +text -1 1.1 'Just box' 'L' +inplot 0.2 0.5 0.7 1:box +text 0 1.2 'Inplot example' + +subplot 2 2 1 +rotate 60 40:aspect 1 1 1 +box:text 1 1 1.5 'rotate only' 'R' + +subplot 2 2 2 +rotate 60 40:aspect 1 1 2 +box:text 0 0 2 'aspect and rotate' + +subplot 2 2 3 +rotate 60 40:aspect 1 2 2 +box:text 0 0 1.5 'Aspect in other direction' +@end verbatim +Here I used function @code{text} for printing the text in arbitrary position of picture, @pxref{Text printing}). Text coordinates and size are connected with axes. However, text coordinates may be everywhere, including the outside the bounding box. I shall show its features later in @xref{Text printing example}. + +Note that several commands can be placed in a string if they are separated by @samp{:} symbol. + +@float +@image{../png/sample1, 7cm} +@caption{Example of several subplots on the single picture.} +@end float + +@c ------------------------------------------------------------------ +@node Axis and grids, Curvilinear coordinates, Subplots, Advanced usage +@subsection Axis and grids + +MathGL library can draw not only the bounding box but also the axes, grids, labels and so on. The limits of axes and their origin (the point of intersection) are determined by function @code{axis}. Also you can use @code{xrange, yrange, zrange} functions (@pxref{Axis settings}). Ticks on axis are specified by functions @code{xtick, ytick, ztick, ttick}. First argument the direction for each change will be applied. Second argument gives the step between ticks (if positive) or gives the number of ticks on the axis (if negative) or set to use logarithmic ticks (if zero). Third argument gives numbers of sub-ticks between ticks (default is zero). Last argument define the initial ticks position. + +Function @code{Axis} draws axes. Its textual string shows in which directions the axis or axes will be drawn (by default @code{'xyz'}, function draws axes in all directions). Function @code{Grid} draws grid perpendicularly to specified directions. Example of axes and grid drawing is: +@verbatim +subplot 2 2 0 +xtick 0.4 3 # sets tick step to 0.5 +ytick 0.4 3 # and draws 3 subticks +box # should be after the ticks change +axis 'xy': grid +text 0 1.3 1 'axis and grid' + +xtick -5: ytick -5 # restore back +subplot 2 2 1:rotate 60 40 +origin 0 0 0 +axis +xlabel 'x' 1 +ylabel 'y' 1 +zlabel 'z' 1 +text 0 0 1.5 'axis and labels' + +subplot 2 2 2:rotate 60 40 +xtick 0.2: ytick 0.2: ztick 0.2 # too low step of ticks +origin -1 -1 -1 +axis:grid +text 0 0 1.5 'shift origin and add grid' +text 0 0 1.2 '(note, too many ticks)' + +subplot 2 2 3:rotate 60 40 +xtick -6: ytick -6 # decrease the number of ticks +axis 'yz' +ylabel 'y axis' +zlabel 'z axis' +text 0 0 1.5 'remove x axis, and' +text 0 0 1.2 'decrease number of ticks' +@end verbatim + +This example shows the importance of the correct choosing of the number of ticks on axis. If tick step is too small then its text may overlap and becomes unreadable. This code has the example of @code{Label} function. It draws label for axis in specified direction. The text position on axis is specified by third argument of @code{Label} function. If it is positive then then text is drawn near the axis maximum, if negative then the same takes place near the minimum of axis, if zero - then at the center of axis. + +@float +@image{../png/sample2, 7cm} +@caption{Example of setting up axis range and axis ticks.} +@end float + +@c ------------------------------------------------------------------ +@node Curvilinear coordinates, Text printing example, Axis and grids, Advanced usage +@subsection Curvilinear coordinates + + +Now let use curvilinear coordinates. In difference from other systems of plot creation, MathGL uses textual formulas for connection of the old (data) and new (output) coordinates. This allows one to plot in arbitrary coordinates. The following code plots the line @var{y}=0, @var{z}=0 in Cartesian, polar, parabolic and spiral coordinates: +@verbatim +new x 50: new y 50: new z 50 +fill y 0.5 0.5: fill x -1 1 # creates data arrays +origin -1 1 -1 + +subplot 2 2 0:rotate 60 40 +plot x y z 'r2' +axis: grid +text 0 1.3 1 'cartesian' + +subplot 2 2 1:rotate 60 40 +axis 'y*sin(pi*x)' 'y*cos(pi*x)' '' +plot x y z 'r2' +axis: grid +text 0 1.3 1 'cylindrical' + +subplot 2 2 2:rotate 60 40 +axis '2*y*x' 'y*y - x*x' '' +plot x y z 'r2' +axis: grid +text 0 1.3 1 'parabolic' + +subplot 2 2 3:rotate 60 40 +axis 'y*sin(pi*x)' 'y*cos(pi*x)' 'x+z' +plot x y z 'r2' +axis: grid +text 0 1.3 1 'spiral' +@end verbatim + +@float +@image{../png/sample3, 7cm} +@caption{Example of curvilinear coordinates} +@end float + + +@c ------------------------------------------------------------------ +@node Text printing example, , Curvilinear coordinates, Advanced usage +@subsection Text printing example + +MathGL prints text by vector font. There are functions for manual specifying of text position (like @code{Puts}) and for its automatic selection (like @code{Label}, @code{legend} and so on). MathGL prints text always in specified position even if it lies outside the bounding box. The default size of font is specified by command @var{fontsize}. However, the actual size of output string depends on position of axes (depends on functions @code{SubPlot}, @code{InPlot}). The switching of the font style (italic, bold, wire and so on) can be done for the whole string (by function parameter) or inside the string. By default MathGL parses TeX-like commands for symbols and indexes (see @pxref{Font styles}). Example of MathGL font drawing is: +@verbatim +text 0 1 'Text can be in ASCII and in Unicode' +text 0 0.6 'It can be \wire{wire}, \big{big} or #r{colored}' +text 0 0.2 'One can change style in string: \b{bold}, \i{italic, \b{both}}' +text 0 -0.2 'Easy to \a{overline} or \u{underline}' +text 0 -0.6 'Easy to change indexes ^{up} _{down} @{center}' +text 0 -1 'It parse TeX: \int \alpha \cdot \sqrt3{sin(\pi x)^2 + \gamma_{i_k}} dx' +@end verbatim + +@float +@image{../png/sample4, 7cm} +@caption{Example of text printing with different font effects} +@end float + +Another example demonstrate the features of TeX formula parsing. +@verbatim +text 0 0 '\sqrt{\frac{\alpha^{\gamma^2}+\overset 1{\big\infty}}{\sqrt3{2+b}}}', 0, -4 +@end verbatim + +@float +@image{../png/samplee, 7cm} +@caption{Example of TeX formula parsing} +@end float + + +@c ------------------------------------------------------------------ +@node Data handling, Data plotting, Advanced usage, Examples +@section Data handling + +@c Class @code{mglData} contains all functions for the data handling in MathGL (@pxref{mglData class}). There are several matters why I use class @code{mglData} but not a single array: it does not depend on type of data (float or double), sizes of data arrays are kept with data, memory working is simpler and safer. + +@menu +* Array creation:: +* Data changing:: +@end menu + +@c ------------------------------------------------------------------ +@node Array creation, Data changing, , Data handling +@subsection Array creation + +One can put numbers into the data instance by several ways. Let us do it for sinus function: +@itemize @bullet +@item +one can create array by @code{list} command +@verbatim +list a 0 0.04 0.16 0.36 0.64 1 +@end verbatim + +@item +another way is to copy from ``inline'' array +@verbatim +copy a [0,0.04,0.16,0.36,0.64,1] +@end verbatim + +@item +next way is to fill the data by textual formula with the help of @code{modify} function +@verbatim +new a 6 +modify a 'x^2' +@end verbatim + +@item +or one may fill the array in some interval and modify it later +@verbatim +new a 6 +fill a 0 1 +modify a 'u^2' +@end verbatim + +@item +or fill the array using current axis range +@verbatim +new a 6 +fill a '(x+1)^2/4' +@end verbatim + +@item +finally it can be loaded from file +@verbatim +new s 6: modify s 'x^2' +save s 'sqr.dat' # create file first +read a 'sqr.dat' # load it +@end verbatim + +@item +at this one can read only part of data +@verbatim +new s 6: modify s 'x^2' +save s 'sqr.dat' # create file first +read a 'sqr.dat' 5 # load it +@end verbatim +@end itemize + +Creation of 2d- and 3d-arrays is mostly the same. One can use direct data filling by @code{list} command +@verbatim +list a 11 12 13 | 21 22 23 | 31 32 33 +@end verbatim +or by inline arrays +@verbatim +copy a [[11,12,13],[21,22,23],[31,32,33]] +@end verbatim +Also data can be filled by formula +@verbatim +new z 30 40 +fill z 'sin(pi*x)*cos(pi*y)' +@end verbatim +or loaded from file. + +The only non-obvious thing here is using multidimensional arrays in C/C++, i.e. arrays defined like @code{float dat[40][30];}. Since, formaly this arrays element @code{dat[i]} can address the memory in arbitrary place you should use the proper function to convert such arrays to @code{mglData} object. For C++ this is functions like @code{mglData::Set(float **dat, int N1, int N2}. For C this is functions like @code{mgl_data_set_float2(HMDT d, const float **dat, int N1, int N2}. At this, you should keep in mind that @code{nx=N2} and @code{ny=N1} after conversion. + +@c ------------------------------------------------------------------ +@node Data changing, , Array creation, Data handling +@subsection Data changing + +MathGL has functions for data processing: differentiating, integrating, smoothing and so on. Let us consider some examples. The simplest ones are integration and differentiation. The direction in which operation will be performed is specified by textual string, which may contain symbols @samp{x}, @samp{y} or @samp{z}. For example, the call of @code{diff a 'x'} will differentiate data along @samp{x} direction; the call of @code{integrate a 'xy'} perform the double integration of data along @samp{x} and @samp{y} directions; the call of @code{diff2 a 'xyz'} will apply 3d Laplace operator to data and so on. Example of this operations on 2d array a=x*y is presented in code: +@verbatim +new a 30 40: modify a 'x*y' +axis 0 0 0 1 1 1 +subplot 2 2 0:rotate 60 40 +surf a: box +text 0.7 1 1.2 'a(x,y)' +subplot 2 2 1:rotate 60 40 +diff a 'x': surf a: box +text 0.7 1 1.2 'da/dx' +subplot 2 2 2:rotate 60 40 +integrate a 'xy': surf a: box +text 0.7 1 1.2 '\int da/dx dxdy' +subplot 2 2 3:rotate 60 40 +diff2 a 'y': surf a: box +text 0.7 1 1.2 '\int {d^2}a/dxdy dx' +@end verbatim + +@float +@image{../png/sample6, 7cm} +@caption{Example of data differentiation and integration} +@end float + +Data smoothing (function @code{Smooth}) is more interesting and important. This function has 2 main arguments: type of smoothing and its direction. Now 4 methods are supported: @code{0} does nothing for delta=0 or approaches data to zero with the step delta, @code{1} linear averaging by 3 points, @code{2} linear averaging by 5 points, @code{3} quadratic averaging by 5 points. Let me demonstrate it for 1d case: +@verbatim +new y0 30 +modify y0 '0.4*sin(2*pi*x)+0.3*cos(3*pi*x)-0.4*sin(4*pi*x)+0.2*rnd' +copy y1 y0: smooth y1 1 +copy y2 y0: smooth y2 2 +copy y3 y0: smooth y3 3 + +plot y0 'k': addlegend 'none' 'k' +plot y1 'r': addlegend 'line 3' 'r' +plot y2 'g': addlegend 'line 5' 'g' +plot y3 'b': addlegend 'quad 5' 'b' +legend: box +@end verbatim + +@float +@image{../png/sample7, 7cm} +@caption{Example of data smoothing} +@end float + +Finally one can create new data arrays on base of the existing one: extract slice, row or column of data (@code{SubData}), summarize along some of direction(s) (@code{Sum}), find distribution of data elements (@code{Hist}). Note, that all these functions are not thread-safe because they use static internal variable for output array. In particular, the using of several of them in arguments of the same function will lead to unpredictable result. + +@c ------------------------------------------------------------------ +@node Data plotting, Hints, Data handling, Examples +@section Data plotting + +Let me now show how to plot the data. MathGL generally has 2 types of plotting functions. Simple variant requires a single data array for plotting, other data (coordinates) are considered uniformly distributed in interval @var{Min}*@var{Max}. Second variant requires data arrays for all coordinates. It allows one to plot rather complex multivalent curves and surfaces (in case of parametric dependencies). Argument setting to default values allows one to plot data in standard form. Manual arguments setting gives possibility for fine tuning of colors, positions and view of graphics. Note, that the call of drawing function adds something to picture but does not clear the previous plots (as it does in Matlab). Another difference from Matlab is that all setup (like transparency, lightning, axis borders and so on) must be specified @strong{before} plotting functions. + +@menu +* Plots for 1D data:: +* Plots for 2D data:: +* Plots for 3D data:: +* Surface transparency:: +@end menu + +@c ------------------------------------------------------------------ +@node Plots for 1D data, Plots for 2D data, , Data plotting +@subsection Plots for 1D data + +Term ``1D data'' means that data depend on single index (parameter) like curve in parametric form @{x(i),y(i),z(i)@}, i=1...n. There are 5 generally different types of data representations: simple line plot, line plot with filling under it, stairs plot, bar plot and vertical lines (@pxref{1D plotting}). Each type of plotting has similar interface. There are 3D version and two 2D versions. One of last requires single array. The parameters of line and marks (@pxref{Line styles}) are specified by the string argument. If the string parameter is @code{NULL} then solid line with color from palette is used. + +Below I shall show the features of 1D plotting on base of @code{plot} function (@pxref{1D plotting}). Let us start from sinus plot: +@verbatim +new y0 50: modify y0 'sin(pi*(2*x-1))' +subplot 2 2 0 +plot y0: box +@end verbatim +Style of line is not specified in @code{plot} function. So MathGL uses the solid line with first color of palette (this is blue). Next subplot shows array @var{y1} with 2 rows: +@verbatim +subplot 2 2 1 +new y1 50 2 +modify y1 'sin(pi*2*x-pi)' +modify y1 'cos(pi*2*x-pi)/2' 1 +plot y1: box +@end verbatim +As previously I did not specify the style of lines. As a result, MathGL again uses solid line with next colors in palette (there are green and red). Now let us plot a circle on the same subplot. The circle is parametric curve @math{x=cos(\pi t), y=sin(\pi t)}. I will set the color of the circle (dark yellow, @samp{Y}) and put marks @samp{+} at point position: +@verbatim +new x 50: modify x 'cos(pi*2*x-pi)' +plot x y0 'Y+' +@end verbatim +Note that solid line is used because I did not specify the type of line. The same picture can be achieved by @code{Plot2} function. Let us draw ellipse by orange dash line: +@verbatim +plot y1(:,0) y(:,1) 'q|' +@end verbatim + +Drawing in 3D space is mostly the same. Let us draw spiral with default line style. Now its color is 4-th color from palette (this is cyan): +@verbatim +subplot 2 2 2:rotate 60 40 +new z 50: modify z '2*x-1' +plot x y0 z:box +@end verbatim +Function @code{Plot3} does 3D curve plot but for single array. Use it to put circle marks on the previous plot: +@verbatim +new y2 10 3:modify y2 'cos(pi*(2*x-1+y))' +modify y2 '2*x-1' 2 +plot y2(:,0) y2(:,1) y2(:,2) 'bo ' +@end verbatim +Note that line style is empty @samp{ } here. Usage of other 1D plotting functions looks similar: +@verbatim +subplot 2 2 3:rotate 60 40 +bars x y0 z 'r':box +@end verbatim + +@float +@image{../png/sample8, 7cm} +@caption{Example of 1D data plot} +@end float + +@c ------------------------------------------------------------------ +@node Plots for 2D data, Plots for 3D data, Plots for 1D data, Data plotting +@subsection Plots for 2D data + +Surfaces @code{Surf} and other 2D plots (@pxref{2D plotting}) are drown the same simpler as 1D one. The difference is that the string parameter specifies not by line style but by the color scheme of the plot (@pxref{Color scheme}). Here I draw attention on 4 most interesting color schemes. There is gray scheme where color is changed from black to white (string @samp{kw}) or from white to black (string @samp{wk}). Another scheme is useful for accentuation of negative (by blue color) and positive (by red color) regions on plot (string @samp{'BbwrR'}). Last one is the popular ``jet'' scheme (string @samp{'BbcyrR'}). + +Now I shall show the example of a surface drawing. At first let us switch lightning on +@verbatim +light on: light 0 0 0 1 +@end verbatim +and draw the surface, considering coordinates x,y to be uniformly distributed in interval @var{Min}*@var{Max} +@verbatim +new a0 50 40 +modify a0 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))' +subplot 2 2 0:rotate 60 40 +surf a0: box +@end verbatim +Color scheme was not specified. So previous color scheme is used. In this case it is default color scheme (``jet'') for the first plot. Next example is a sphere. The sphere is parametrically specified surface: +@verbatim +new x 50 40: new y 50 40: new z 50 40 +modify x '0.8*sin(2*pi*x)*sin(pi*y)' +modify y '0.8*cos(2*pi*x)*sin(pi*y)' +modify z '0.8*cos(pi*y)' +subplot 2 2 1:rotate 60 40 +surf x y z 'bbwrr': box +@end verbatim +I set color scheme to @code{'BbwrR'} that corresponds to red top and blue bottom of the sphere. + +Surfaces will be plotted for each of slice of the data if @var{nz}>1. Next example draws surfaces for data arrays with @var{nz}=3: +@verbatim +new a1 50 40 3 +modify a1 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))' +modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*sin(3*pi*(x*y))' 1 +modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))' 2 +subplot 2 2 2:rotate 60 40 +alpha on +surf a1: box +@end verbatim +Note, that it may entail a confusion. However, if one will use density plot then the picture will look better: +@verbatim +subplot 2 2 3: rotate 60 40 +dens a1: box +@end verbatim +Note, that the previous color scheme is used in last plots because there are no direct specification of the one. + +@float +@image{../png/sample9, 7cm} +@caption{Example of surface plot for 2D data} +@end float + +Drawing of other 2D plots is analogous. The only peculiarity is the usage of flag @samp{#}. By default this flag switches on the drawing of a grid on plot (@code{grid} or @code{mesh} for plots in plain or in volume). However, for isosurfaces (including surfaces of rotation @code{axial}) this flag switches the face drawing off. Figure becomes wired. The following code gives example of flag @samp{#} using (compare with normal function drawing as in its description): +@verbatim +alpha on: light on: light 0 0 0 1 +new a 30 20 +modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' + +subplot 2 2 0: rotate 40 60 +surf a 'bbcyrr#': box +subplot 2 2 1: rotate 40 60 +dens a 'bbcyrr#': box +subplot 2 2 2: rotate 40 60 +cont a 'bbcyrr#': box +subplot 2 2 3: rotate 40 60 +axial a 'bbcyrr#': box +@end verbatim + +@float +@image{../png/samplea, 7cm} +@caption{Example of 2D data plot with color scheme contained @samp{#} symbol} +@end float + +@c ------------------------------------------------------------------ +@node Plots for 3D data, Surface transparency, Plots for 2D data, Data plotting +@subsection Plots for 3D data + +Drawing procedures for 3D plot looks similarly to 1D and 2D plots described above. There are 3 general types of 3D plots (@pxref{3D plotting}): (i) plots on slices or on projections, (ii) isosurfaces, (iii) cloud-like plots. Plots on slice are clear enough -- one specifies a slice (as its index or as coordinate value) and MathGL draws contour lines or density plot on slice plane. Isosurface gives more information. Isosurface is 3D analogue of the contour line @code{cont}. It shows the region where data array values exceed specified isosurface level. Plot becomes more informative if one adds transparency, lightning or sets color scheme depending on coordinates. Generalization of isosurface is the cloud-like plot. For this plot the darker color and less transparent regions correspond to higher values of data. Contrary, the regions with low values are transparent. For plotting of the phase of fields (or beams or pulses) one can use isosurface which transparency depends on the other data array (see function @code{surf3a}). As example of 3D data plots let us draw the Gaussian beam diffraction in space. Beam propagates along @var{x} axis: +@verbatim +alpha on: light on +light 0 0 0 1 +new a 30 30 30: new b 30 30 30 +modify a 'exp(-16*((z-0.5)^2+(y-0.5)^2)/(1+4*x^2))' +modify b '16*((z-0.5)^2+(y-0.5)^2)*(x)/(1+4*x^2)' +caxis 0 1 + +subplot 2 2 0: rotate 40 60 +surf3 a 'wgk': box +subplot 2 2 1: rotate 40 60 +densa a: box: axis +subplot 2 2 2: rotate 40 60 +cloud a: box +subplot 2 2 3: rotate 40 60 +surf3a b a 'q': box +@end verbatim + +@float +@image{../png/sampleb, 7cm} +@caption{Example of Gaussian beam diffraction (3D data)} +@end float + + +@c ------------------------------------------------------------------ +@node Surface transparency, , Plots for 3D data, Data plotting +@subsection Surface transparency + +MathGL library has advanced features for setting and handling the surface transparency. The simplest way to add transparency is the using of function @code{Alpha}. As a result, all further surfaces (and isosurfaces, density plots and so on) become transparent. However, their look can be additionally improved. + +First, the selected surface will be non-transparent if one sets the flag @code{transparent} before the surface drawing and sets it off after the drawing. + +Second, the value of transparency can be different from surface to surface. To do it just change the value of @code{alphadef} before the drawing of the selected surface. If its value is close to 0 then the surface becomes more and more transparent. Contrary, if its value is close to 1 then the surface becomes practically non-transparent. This is some analogue of @code{transparent on}. + +Third feature is the changing of the way how the light goes through overlapped surfaces. The variable @code{transptype} defines it. By default the usual transparency is used (@code{transptype 0}) -- surfaces below is less visible than the upper ones. A ``glass-like'' transparency (@code{transptype 1}) has a different look when the surface just decreases the background light (the surfaces are commutable in this case). + +A ``neon-like'' transparency (@code{transptype 2}) has more interesting look. In this case a surface is the light source (like a lamp on the dark background) and just adds some intensity to the color. At this, the library sets automatically the black color for the background and changes the default line color to white. + +As example I shall show the variant of plot from @ref{Plots for 2D data} (grid drawing is disabled) for different types of transparency. +@float +@image{../png/type0, 7cm} +@caption{Example of @code{TranspType=0}.} +@end float +@float +@image{../png/type1, 7cm} +@caption{Example of @code{TranspType=1}.} +@end float +@float +@image{../png/type2, 7cm} +@caption{Example of @code{TranspType=2}.} +@end float + + + +@c ------------------------------------------------------------------ +@node Hints, , Data plotting, Examples +@section Hints + +In this section I have included some small hints and advices for the improving of the quality of plots and for the demonstration of some non-trivial features of MathGL library. In contrast to previous examples I showed mostly the idea but not the whole drawing function. More examples with the source code can be find at @uref{http://mathgl.sf.net/} or in section @ref{Samples}. + +@menu +* ``Compound'' graphics:: +* Two axes in one plot:: +* Titles for the plot:: +* Changing of the color range:: +* Management of a point cutting:: +* Vector field visualization:: +* Several light sources:: +* CutMin and CutMax features:: +* Mapping visualization:: +* Log-scaled plot:: +* Nonlinear fitting hints:: +* PDE solving hints:: +* Stereo image:: +@end menu + +@c ------------------------------------------------------------------ +@node ``Compound'' graphics, Two axes in one plot, , Hints +@subsection ``Compound'' graphics + +As I noted above, MathGL functions (except the special one, like @code{clf}) do not erase the previous plotting but just add the new one. It allows one to draw ``compound'' plots easily. For example, popular Matlab command @code{surfc} can be emulated in MathGL by 2 calls: +@verbatim +surf a +cont a 0 7 -1 # draw contours at z = -1 +@end verbatim +Here @var{a} is 2-dimensional data for the plotting, @code{-1} is the value of z-coordinate at which the contour should be plotted (at the bottom in this example). Analogously, one can draw density plot instead of contour lines and so on. + +Another nice plot is contour lines plotted directly on the surface: +@verbatim +light on # switch on light for the surface +surf a 'bbcyrr' # select 'jet' colormap for the surface +cont a 'y' # and yellow color for contours +@end verbatim +The possible difficulties arise in black&white case, when the color of the surface can be close to the color of a contour line. In that case I may suggest the following code: +@verbatim +light on # switch on light for the surface +surf a 'kw' # select 'gray' colormap for the surface +caxis -1 0 # first draw for darker surface colors +conta 'w' # white contours +caxis 0 1 # now draw for brighter surface colors +cont a 'k' # black contours +@end verbatim +The idea is to divide the color range on 2 parts (dark and bright) and to select the contrasting color for contour lines for each of part. + +Similarly, one can plot flow thread over density plot of vector field amplitude (this is another amusing plot from Matlab) and so on. The list of compound graphics can be prolonged but I hope that the general idea is clear. + +@c ------------------------------------------------------------------ +@node Two axes in one plot, Titles for the plot, ``Compound'' graphics, Hints +@subsection Two axes in one plot + +Developing the previous hint one can make a plot with 2 or more axes. The idea is that the change of settings does not influence on the already drawn graphics. So, for 2-axes plot let us set the first axis and draw everything concerning it. Then let us setup the second axis and draw things for the second axis. The corresponding code is (@pxref{2-axes sample}): +@verbatim +# set up first axis +axis -1 -1 1 1: origin -1 -1 +axis:fplot 'sin(pi*x)' # draw something in first axis +# set up second axis +axis 0 0 1 1: origin 1 1 +axis: fplot 'cos(4*pi*x^2)' # draw something in second axis +@end verbatim +Note, that the first and the second axes look better if being placed in different corners. In the code presented above the first axis is placed in the left-bottom corner, and the second one is placed in the right-top corner. + +@c ------------------------------------------------------------------ +@node Titles for the plot, Changing of the color range, Two axes in one plot, Hints +@subsection Titles for the plot + +The printing of nice titles for the plot is not so trivial task in general case. The problem is that the rotation and aspect change lead to different looks for titles of different subplots. So, the resulting look is not so good as it could be. The solution is simple -- to print titles exactly after @code{subplot} call and before any rotation, aspect change and so on! Analogously, the title for the whole picture looks better if it is printed first (before any @code{subplot} calls). Alternatively you can use function @code{title} for plotting title for the picture at any time. + +@c ------------------------------------------------------------------ +@node Changing of the color range, Management of a point cutting, Titles for the plot, Hints +@subsection Changing of the color range + +By default (for the user comfort), the color range is set equal to z-range of the plot. However, there are different ranges. So, one can obtain amusing plot by the change of color range manually. For example, there are plots with one-color bottom (or top) or practically bi-color picture and so on. + +For example, compare 2 surfaces: +@verbatim +subplot 2 1 0 +surf a # usual coloring range +subplot 2 1 1 +caxis 0 1 +surf a # bottom of the surface have one-colour filling +@end verbatim + +@c ------------------------------------------------------------------ +@node Management of a point cutting, Vector field visualization, Changing of the color range, Hints +@subsection Management of a point cutting + +Sometimes an experimental or numerical surface has outstanding points. Visualization of such surface will lead to the hole(s) in place of such points. The standard method of ``fighting'' -- to change data values -- is not always good and is not so convenient. MathGL library has another method -- to set variable @code{cut off}. As a consequence, all outstanding points will be projected on the bounding box. + +Such method is good not only for outstanding points but also for the case when one need to plane the bottom or the top of the plot. Exactly such case is demonstrated in the code: +@verbatim +new a 20 30 # create some data +modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' +# set lower border above the data minimal value +axis -1 -1 0 1 1 1:rotate 40 60 +cut off # set off cutting flag +surf a # and draw the surface +@end verbatim +It is an interesting result, is not it? + +@c ------------------------------------------------------------------ +@node Vector field visualization, Several light sources, Management of a point cutting, Hints +@subsection Vector field visualization + +Vector field visualization (especially in 3d case @code{vect3} or @code{vectc}) may look tangly -- there are too many overlapping lines. I may suggest 2 ways to solve this problem. The first one is to change @code{meshnum} for decreasing the number of hachures. The second way is to use the flow thread chart @code{Flow}. Unfortunately, I don't know any other methods to visualize 3d vector field. If you know any, e-mail me and I shall add it to MatGL. + +@c ------------------------------------------------------------------ +@node Several light sources, CutMin and CutMax features, Vector field visualization, Hints +@subsection Several light sources + +In contrast to the most of other programs, MathGL supports several (up to 10) light sources. Moreover, the color each of them can be different: white (this is usual), yellow, red, cyan, green and so on. The use of several light sources may be interesting for the highlighting of some peculiarities of the plot or just to make an amusing picture. Note, each light source can be switched on/off individually (@pxref{Several light sample}). + +@c ------------------------------------------------------------------ +@node CutMin and CutMax features, Mapping visualization, Several light sources, Hints +@subsection CutMin and CutMax features + +MathGL library has a feature for cutting of points in some region @var{CutMin*CutMax}. Such an excision can be used to improve the look of the graphics. Moreover, this cutting may help to show an internal structure of an object (like @code{isocaps} plot in Matlab). For example, let us use the standard 3D data array and show its interior (@pxref{CutMinMax sample}). + +@verbatim +new c 61 51 40 # create the data +new v 10: fill v -0.5 1 +modify c '(-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1))' +cut 0 -1 -1 1 0 1.1 +rotate 40 60: surf3 c -0.5 'bbcyrr' +contf3 v c 'x' -1 'bbcyrr': contf3 v c 'y' -1 'bbcyrr' +contf3 v c 'z' 0 'bbcyrr': contf3 v c 'z' 39 'bbcyrr' +@end verbatim + +One can also exclude points from arbitrary area in space. This area defined by textual formula @code{cut} (@pxref{Cutting}). The algorithm is the same as shown for ``rectangular cutting''. + +@c ------------------------------------------------------------------ +@node Mapping visualization, Log-scaled plot, CutMin and CutMax features, Hints +@subsection Mapping visualization + +Sometime ago I worked with mapping and have a question about its visualization. Let me remember you that mapping is some transformation rule for one set of number to another one. The 1d mapping is just an ordinary function -- it takes a number and transforms it to another one. The 2d mapping (which I used) is a pair of functions which take 2 numbers and transform them to another 2 ones. Except general plots (like @code{surfc}, @code{surfa}) there is a special plot -- Arnold diagram. It shows the area which is the result of mapping of some initial area (usually square). + +I tried to make such plot in @code{map}. It shows the set of points or set of faces, which final position is the result of mapping. At this, the color gives information about their initial position and the height describes Jacobian value of the transformation. Unfortunately, it looks good only for the simplest mapping but for the real multivalent quasi-chaotic mapping it produces a confusion. So, use it if you like :). + +@c ------------------------------------------------------------------ +@node Log-scaled plot, Nonlinear fitting hints, Mapping visualization, Hints +@subsection Log-scaled plot + +Log-scaled plot can be drawn by 2 steps. First, one should change the scale of axis by call @code{axis 'lg(x)' 'lg(y)'} (in this example, x- and y-axis will be log-scaled). Second, one should set logarithmic scale for axis ticks by changing variables: @code{xtick 0: yticks 0}. Finally, one should check (or change) the axis ranges and origin so that their values to be positive. For example of log-log plot @pxref{Log-log sample}. + +@c ------------------------------------------------------------------ +@node Nonlinear fitting hints, PDE solving hints, Log-scaled plot, Hints +@subsection Nonlinear fitting hints + +Nonlinear fitting is rather simple. All that you need is the data to fit, the approximation formula and the list of coefficients to fit (better with its initial guess values). Let me demonstrate it on the following simple example (@pxref{Fitting sample}). First, let us use sin function with some random noise: +@verbatim +new rnd 100: new idl 50 # data to be fitted and ideal data +modify rnd '0.4*rnd+0.1+sin(4*pi*x)' +modify idl '0.3+sin(4*pi*x)' +@end verbatim +and plot it to see that data we will fit +@verbatim +axis -1 -2 1 2 +plot rnd '. ':plot idl 'b' +box:text 0 2.2 'initial: y = 0.3+sin(2\pi x)' 'C:b' -1 +@end verbatim + +The next step is the fitting itself. For that let me specify an initial values @var{ini} for coefficients @samp{abc} and do the fitting for approximation formula @samp{a+b*sin(c*x)} +@verbatim +new res # The data for found formula +fit res rnd 'a+b*sin(c*x)' 'abc' [1, 1, 3] +@end verbatim +Now display it +@verbatim +plot res 'r' +text -1 -1.3 'fitted:' 'L:r' -1 +putsfit 0 -1.8 'y = ' 'C:r' -1 +@end verbatim + +NOTE! the fitting results may have strong dependence on initial values for coefficients due to algorithm features. The problem is that in general case there are several local 'optimums' for coefficients and the program returns only first found one! There are no guaranties that it will be the best. Try for example to set @code{ini = [0, 0, 0]} in the code above. + +@c ------------------------------------------------------------------ +@node PDE solving hints, Stereo image, Nonlinear fitting hints, Hints +@subsection PDE solving hints + +Solving of Partial Differential Equations (PDE, including beam tracing) and ray tracing (or finding particle trajectory) are more or less common task. So, MathGL have several functions for that. There are @code{ray} for ray tracing, @code{pde} for PDE solving, @code{qo2d} for beam tracing in 2D case. Note, that these functions take ``Hamiltonian'' or equations as string values. And I don't plan now to allow one to use user-defined functions. There are 2 reasons: the complexity of corresponding interface; and the basic nature of used methods which are good for samples but may not good for serious scientific calculations. + +The ray tracing can be done by @code{ray} function. Really ray tracing equation is Hamiltonian equation for 3D space. So, the function can be also used for finding a particle trajectory (i.e. solve Hamiltonian ODE) for 1D, 2D or 3D cases. The function have a set of arguments. First of all, it is Hamiltonian which defined the media (or the equation) you are planning to use. The Hamiltonian is defined by string which may depend on coordinates @samp{x}, @samp{y}, @samp{z}, time @samp{t} (for particle dynamics) and momentums @samp{p}=@math{p_x}, @samp{q}=@math{p_y}, @samp{v}=@math{p_z}. Next, you have to define the initial conditions for coordinates and momentums at @samp{t}=0 and set the integrations step (default is 0.1) and its duration (default is 10). The Runge-Kutta method of 4-th order is used for integration. +@verbatim +new re 128:new im 128 +ray r 'p^2+q^2-x-1' -0.7 -1 0 0 0.5 0 +plot r(0) r(1) +@end verbatim +This example calculate the reflection from linear layer (media with Hamiltonian @samp{p^2+q^2-x-1}=@math{p_x^2+p_y^2-x-1}). This is parabolic curve. The resulting array have 7 columns which contain data for @{x,y,z,p,q,v,t@}. + +The solution of PDE is a bit more complicated. As previous you have to specify the equation as pseudo-differential operator @math{\hat H(x, \nabla)} which is called sometime as ``Hamiltonian'' (for example, in beam tracing). As previously, it is defined by string which may depend on coordinates @samp{x}, @samp{y}, @samp{z} (but not time!), momentums @samp{p}=@math{(d/dx)/i k_0}, @samp{q}=@math{(d/dy)/i k_0} and field amplitude @samp{u}=@math{|u|}. The evolutionary coordinate is @samp{z} in all cases. So that, the equation look like @math{du/dz = ik_0 H(x,y,\hat p, \hat q, |u|)[u]}. Dependence on field amplitude @samp{u}=@math{|u|} allows one to solve nonlinear problems too. For example, for nonlinear Shrodinger equation you may set @code{ham='p^2 + q^2 - u^2'}. Also you may specify imaginary part for wave absorption, like @code{ham = 'p^2 + i*x*(x>0)'}, but only if dependence on variable @samp{i} is linear (i.e. @math{H = Hre+i*Him}). + +Next step is specifing the initial conditions at @samp{z}=@code{Min.z}. The function need 2 arrays for real and for imaginary part. Note, that coordinates x,y,z are supposed to be in specified range [Min, Max]. So, the data arrays should have corresponding scales. Finally, you may set the integration step and paramter k0=@math{k_0}. Also keep in mind, that internally the 2 times large box is used (for suppressing numerical reflection from boundaries) and the equation should well defined even in this extended range. + +Final comment is concerning the possible form of pseudo-differential operator @math{H}. At this moment, simplified form of operator @math{H} is supported -- all ``mixed'' terms (like @samp{x*p}->x*d/dx) are excluded. For example, in 2D case this operator is effectively @math{H = f(p,z) + g(x,z,u)}. However commutable combinations (like @samp{x*q}->x*d/dy) are allowed for 3D case. + +So, for example let solve the equation for beam deflected from linear layer and absorbed later. The operator will have the form @samp{'p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)'} that correspond to equation @math{ik_0 \partial_z u + \Delta u + x \cdot u + i (x+z)/2 \cdot u = 0}. This is typical equation for Electron Cyclotron (EC) absorption in magnetized plasmas. For initial conditions let me select the beam with plane phase front @math{exp(-48*(x+0.7)^2)}. The corresponding code looks like this (@pxref{PDE sample}): +@verbatim +new re 128: new im 128 +fill re 'exp(-48*(x+0.7)^2)' +pde a 'p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)' re im 0.01, 30 +transpose a 'yxz' +caxis 0 1 +dens a 'wyrRk' +@end verbatim + +The last example is example of beam tracing. Beam tracing equation is special kind of PDE equation written in coordinates accompanied to a ray. Generally this is the same parameters and limitation as for PDE solving but the coordinates are defined by the ray and by parameter of grid width @var{w} in direction transverse the ray. So, you don't need to specify the range of coordinates. @strong{BUT} there is limitation. The accompanied coordinates are well defined only for smooth enough rays, i.e. then the ray curvature @math{K} (which is defined as @math{1/K^2 = (|\ddot r|^2 |\dot r|^2 - (\ddot r, \dot r)^2)/|\dot r|^6}) is much large then the grid width: @math{K>>w}. So, you may receive incorrect results if this condition will be broken. + +You may use following code for obtaining the same solution as in previous example: +@verbatim +new re 128: new im 128 +define $1 'p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)' +ray r $1 -0.7 -1 0 0 0.5 0 0.02 2 +# now start beam tracing +fill re 'exp(-48*x^2)' +new xx: new yy +qo2d a $1 re im r 1 30 xx yy +caxis 0 1 +dens xx yy a 'wyrRk' +@end verbatim + + +@c ------------------------------------------------------------------ +@node Stereo image, , PDE solving hints, Hints +@subsection Stereo image + +One can easily create stereo image in MathGL. Stereo image can be produced by making two subplots with slightly different rotation angles. The corresponding code looks like this (@pxref{Stereo image sample}): +@verbatim +subplot 2 1 0 # left image +rotate 40 60+3 +# draw something here +subplot 2 1 1 # right image +rotate 40 60-3 +# draw the same here +@end verbatim + diff --git a/texinfo/ex_mgl_ru.texi b/texinfo/ex_mgl_ru.texi new file mode 100644 index 0000000..3e77faf --- /dev/null +++ b/texinfo/ex_mgl_ru.texi @@ -0,0 +1,775 @@ +@c ------------------------------------------------------------------ +@chapter MathGL examples + +This chapter contain information about basic and advanced MathGL, hints and samples for all types of graphics. I recommend you read first 2 sections one after another and at least look on ``Hints'' section. Also I recommend you to look at @ref{General concepts}. Sample code for some of these examples can be found in @uref{http://mathgl.sf.net/pictures.html} and in @ref{Samples}. + +@menu +* Basic usage:: +* Advanced usage:: +* Data handling:: +* Data plotting:: +* Hints:: +@end menu + +@c ------------------------------------------------------------------ +@node Basic usage, Advanced usage, , Examples +@section Basic usage + +MGL script can be used by several manners. Each has positive and negative sides: +@itemize @bullet +@item +@emph{The using of MGL in UDAV.} + +Positive side is the possibility to view the plot at once and to modify it, rotate, zoom or switch on transparency or lighting) by hand or by mouse. Negative sides are: the need of X-terminal. + +@item +@emph{Direct writing to file in bitmap or vector format without creation of graphical window.} + +Positive aspects are: batch processing of similar data set, for example, a set of resulting data files for different calculation parameters), running from the console program, including the cluster calculation), fast and automated drawing, saving pictures for further analysis, or demonstration). Negative sides are: the usage of the external program for picture viewing. Also, the data plotting is non-visual. So, you have to imagine the picture, view angles, lighting and so on) before the plotting. I recommend to use graphical window for determining the optimal parameters of plotting on the base of some typical data set. And later use these parameters for batch processing in console program. + +In this case you can use a set of programs: @code{mgl2png}, @code{mgl2gif}, @code{mgl2eps}, @code{mgl2svg} or @code{mglview} for viewing. +@end itemize + +The simplest script is +@verbatim +box # draw bounding box +axis # draw axis +fplot 'x^3' # draw some function +@end verbatim + +Just type it in UDAV and press F5. Also you can save it in text file @samp{test.mgl} and type in the console @code{mgl2png test.mgl} what produce file @samp{test.mgl.png} with resulting picture. + +@c ------------------------------------------------------------------ +@node Advanced usage, Data handling, Basic usage, Examples +@section Advanced usage + +Now I show several non-obvious features of MGL: several subplots in a single picture, curvilinear coordinates, text printing and so on. Generally you may miss this section at first reading, but I don't recommend it. + +@menu +* Subplots:: +* Axis and grids:: +* Curvilinear coordinates:: +* Text printing example:: +@end menu + +@c ------------------------------------------------------------------ +@node Subplots, Axis and grids, , Advanced usage +@subsection Subplots + +Let me demonstrate possibilities of axes transformation. MathGL has the following functions: @code{SubPlot}, @code{InPlot}, @code{Aspect} and @code{Rotate}, @pxref{Transformation matrix}). The order of their calling is strictly determined. First, one changes the position of axes in image area, functions @code{SubPlot} and @code{InPlot}). After that one may rotate the plot, function @code{Rotate}). Finally, one may change aspects of axes, function @code{Aspect}). The following code illustrates the aforesaid it: +@verbatim +subplot 2 2 0:box +text -1 1.1 'Just box' 'L' +inplot 0.2 0.5 0.7 1:box +text 0 1.2 'Inplot example' + +subplot 2 2 1 +rotate 60 40:aspect 1 1 1 +box:text 1 1 1.5 'rotate only' 'R' + +subplot 2 2 2 +rotate 60 40:aspect 1 1 2 +box:text 0 0 2 'aspect and rotate' + +subplot 2 2 3 +rotate 60 40:aspect 1 2 2 +box:text 0 0 1.5 'Aspect in other direction' +@end verbatim +Here I used function @code{text} for printing the text in arbitrary position of picture, @pxref{Text printing}). Text coordinates and size are connected with axes. However, text coordinates may be everywhere, including the outside the bounding box. I shall show its features later in @xref{Text printing example}. + +Note that several commands can be placed in a string if they are separated by @samp{:} symbol. + +@float +@image{../png/sample1, 7cm} +@caption{Example of several subplots on the single picture.} +@end float + +@c ------------------------------------------------------------------ +@node Axis and grids, Curvilinear coordinates, Subplots, Advanced usage +@subsection Axis and grids + +MathGL library can draw not only the bounding box but also the axes, grids, labels and so on. The limits of axes and their origin (the point of intersection) are determined by function @code{axis}. Also you can use @code{xrange, yrange, zrange} functions (@pxref{Axis settings}). Ticks on axis are specified by functions @code{xtick, ytick, ztick, ttick}. First argument the direction for each change will be applied. Second argument gives the step between ticks (if positive) or gives the number of ticks on the axis (if negative) or set to use logarithmic ticks (if zero). Third argument gives numbers of sub-ticks between ticks (default is zero). Last argument define the initial ticks position. + +Function @code{Axis} draws axes. Its textual string shows in which directions the axis or axes will be drawn (by default @code{'xyz'}, function draws axes in all directions). Function @code{Grid} draws grid perpendicularly to specified directions. Example of axes and grid drawing is: +@verbatim +subplot 2 2 0 +xtick 0.4 3 # sets tick step to 0.5 +ytick 0.4 3 # and draws 3 subticks +box # should be after the ticks change +axis 'xy': grid +text 0 1.3 1 'axis and grid' + +xtick -5: ytick -5 # restore back +subplot 2 2 1:rotate 60 40 +origin 0 0 0 +axis +xlabel 'x' 1 +ylabel 'y' 1 +zlabel 'z' 1 +text 0 0 1.5 'axis and labels' + +subplot 2 2 2:rotate 60 40 +xtick 0.2: ytick 0.2: ztick 0.2 # too low step of ticks +origin -1 -1 -1 +axis:grid +text 0 0 1.5 'shift origin and add grid' +text 0 0 1.2 '(note, too many ticks)' + +subplot 2 2 3:rotate 60 40 +xtick -6: ytick -6 # decrease the number of ticks +axis 'yz' +ylabel 'y axis' +zlabel 'z axis' +text 0 0 1.5 'remove x axis, and' +text 0 0 1.2 'decrease number of ticks' +@end verbatim + +This example shows the importance of the correct choosing of the number of ticks on axis. If tick step is too small then its text may overlap and becomes unreadable. This code has the example of @code{Label} function. It draws label for axis in specified direction. The text position on axis is specified by third argument of @code{Label} function. If it is positive then then text is drawn near the axis maximum, if negative then the same takes place near the minimum of axis, if zero - then at the center of axis. + +@float +@image{../png/sample2, 7cm} +@caption{Example of setting up axis range and axis ticks.} +@end float + +@c ------------------------------------------------------------------ +@node Curvilinear coordinates, Text printing example, Axis and grids, Advanced usage +@subsection Curvilinear coordinates + + +Now let use curvilinear coordinates. In difference from other systems of plot creation, MathGL uses textual formulas for connection of the old (data) and new (output) coordinates. This allows one to plot in arbitrary coordinates. The following code plots the line @var{y}=0, @var{z}=0 in Cartesian, polar, parabolic and spiral coordinates: +@verbatim +new x 50: new y 50: new z 50 +fill y 0.5 0.5: fill x -1 1 # creates data arrays +origin -1 1 -1 + +subplot 2 2 0:rotate 60 40 +plot x y z 'r2' +axis: grid +text 0 1.3 1 'cartesian' + +subplot 2 2 1:rotate 60 40 +axis 'y*sin(pi*x)' 'y*cos(pi*x)' '' +plot x y z 'r2' +axis: grid +text 0 1.3 1 'cylindrical' + +subplot 2 2 2:rotate 60 40 +axis '2*y*x' 'y*y - x*x' '' +plot x y z 'r2' +axis: grid +text 0 1.3 1 'parabolic' + +subplot 2 2 3:rotate 60 40 +axis 'y*sin(pi*x)' 'y*cos(pi*x)' 'x+z' +plot x y z 'r2' +axis: grid +text 0 1.3 1 'spiral' +@end verbatim + +@float +@image{../png/sample3, 7cm} +@caption{Example of curvilinear coordinates} +@end float + + +@c ------------------------------------------------------------------ +@node Text printing example, , Curvilinear coordinates, Advanced usage +@subsection Text printing example + +MathGL prints text by vector font. There are functions for manual specifying of text position (like @code{Puts}) and for its automatic selection (like @code{Label}, @code{legend} and so on). MathGL prints text always in specified position even if it lies outside the bounding box. The default size of font is specified by command @var{fontsize}. However, the actual size of output string depends on position of axes (depends on functions @code{SubPlot}, @code{InPlot}). The switching of the font style (italic, bold, wire and so on) can be done for the whole string (by function parameter) or inside the string. By default MathGL parses TeX-like commands for symbols and indexes (see @pxref{Font styles}). Example of MathGL font drawing is: +@verbatim +text 0 1 'Text can be in ASCII and in Unicode' +text 0 0.6 'It can be \wire{wire}, \big{big} or #r{colored}' +text 0 0.2 'One can change style in string: \b{bold}, \i{italic, \b{both}}' +text 0 -0.2 'Easy to \a{overline} or \u{underline}' +text 0 -0.6 'Easy to change indexes ^{up} _{down} @{center}' +text 0 -1 'It parse TeX: \int \alpha \cdot \sqrt3{sin(\pi x)^2 + \gamma_{i_k}} dx' +@end verbatim + +@float +@image{../png/sample4, 7cm} +@caption{Example of text printing with different font effects} +@end float + +Another example demonstrate the features of TeX formula parsing. +@verbatim +text 0 0 '\sqrt{\frac{\alpha^{\gamma^2}+\overset 1{\big\infty}}{\sqrt3{2+b}}}', 0, -4 +@end verbatim + +@float +@image{../png/samplee, 7cm} +@caption{Example of TeX formula parsing} +@end float + + +@c ------------------------------------------------------------------ +@node Data handling, Data plotting, Advanced usage, Examples +@section Data handling + +@c Class @code{mglData} contains all functions for the data handling in MathGL (@pxref{mglData class}). There are several matters why I use class @code{mglData} but not a single array: it does not depend on type of data (float or double), sizes of data arrays are kept with data, memory working is simpler and safer. + +@menu +* Array creation:: +* Data changing:: +@end menu + +@c ------------------------------------------------------------------ +@node Array creation, Data changing, , Data handling +@subsection Array creation + +One can put numbers into the data instance by several ways. Let us do it for sinus function: +@itemize @bullet +@item +one can create array by @code{list} command +@verbatim +list a 0 0.04 0.16 0.36 0.64 1 +@end verbatim + +@item +another way is to copy from ``inline'' array +@verbatim +copy a [0,0.04,0.16,0.36,0.64,1] +@end verbatim + +@item +next way is to fill the data by textual formula with the help of @code{modify} function +@verbatim +new a 6 +modify a 'x^2' +@end verbatim + +@item +or one may fill the array in some interval and modify it later +@verbatim +new a 6 +fill a 0 1 +modify a 'u^2' +@end verbatim + +@item +or fill the array using current axis range +@verbatim +new a 6 +fill a '(x+1)^2/4' +@end verbatim + +@item +finally it can be loaded from file +@verbatim +new s 6: modify s 'x^2' +save s 'sqr.dat' # create file first +read a 'sqr.dat' # load it +@end verbatim + +@item +at this one can read only part of data +@verbatim +new s 6: modify s 'x^2' +save s 'sqr.dat' # create file first +read a 'sqr.dat' 5 # load it +@end verbatim +@end itemize + +Creation of 2d- and 3d-arrays is mostly the same. One can use direct data filling by @code{list} command +@verbatim +list a 11 12 13 | 21 22 23 | 31 32 33 +@end verbatim +or by inline arrays +@verbatim +copy a [[11,12,13],[21,22,23],[31,32,33]] +@end verbatim +Also data can be filled by formula +@verbatim +new z 30 40 +fill z 'sin(pi*x)*cos(pi*y)' +@end verbatim +or loaded from file. + +The only non-obvious thing here is using multidimensional arrays in C/C++, i.e. arrays defined like @code{float dat[40][30];}. Since, formaly this arrays element @code{dat[i]} can address the memory in arbitrary place you should use the proper function to convert such arrays to @code{mglData} object. For C++ this is functions like @code{mglData::Set(float **dat, int N1, int N2}. For C this is functions like @code{mgl_data_set_float2(HMDT d, const float **dat, int N1, int N2}. At this, you should keep in mind that @code{nx=N2} and @code{ny=N1} after conversion. + +@c ------------------------------------------------------------------ +@node Data changing, , Array creation, Data handling +@subsection Data changing + +MathGL has functions for data processing: differentiating, integrating, smoothing and so on. Let us consider some examples. The simplest ones are integration and differentiation. The direction in which operation will be performed is specified by textual string, which may contain symbols @samp{x}, @samp{y} or @samp{z}. For example, the call of @code{diff a 'x'} will differentiate data along @samp{x} direction; the call of @code{integrate a 'xy'} perform the double integration of data along @samp{x} and @samp{y} directions; the call of @code{diff2 a 'xyz'} will apply 3d Laplace operator to data and so on. Example of this operations on 2d array a=x*y is presented in code: +@verbatim +new a 30 40: modify a 'x*y' +axis 0 0 0 1 1 1 +subplot 2 2 0:rotate 60 40 +surf a: box +text 0.7 1 1.2 'a(x,y)' +subplot 2 2 1:rotate 60 40 +diff a 'x': surf a: box +text 0.7 1 1.2 'da/dx' +subplot 2 2 2:rotate 60 40 +integrate a 'xy': surf a: box +text 0.7 1 1.2 '\int da/dx dxdy' +subplot 2 2 3:rotate 60 40 +diff2 a 'y': surf a: box +text 0.7 1 1.2 '\int {d^2}a/dxdy dx' +@end verbatim + +@float +@image{../png/sample6, 7cm} +@caption{Example of data differentiation and integration} +@end float + +Data smoothing (function @code{Smooth}) is more interesting and important. This function has 2 main arguments: type of smoothing and its direction. Now 4 methods are supported: @code{0} does nothing for delta=0 or approaches data to zero with the step delta, @code{1} linear averaging by 3 points, @code{2} linear averaging by 5 points, @code{3} quadratic averaging by 5 points. Let me demonstrate it for 1d case: +@verbatim +new y0 30 +modify y0 '0.4*sin(2*pi*x)+0.3*cos(3*pi*x)-0.4*sin(4*pi*x)+0.2*rnd' +copy y1 y0: smooth y1 1 +copy y2 y0: smooth y2 2 +copy y3 y0: smooth y3 3 + +plot y0 'k': addlegend 'none' 'k' +plot y1 'r': addlegend 'line 3' 'r' +plot y2 'g': addlegend 'line 5' 'g' +plot y3 'b': addlegend 'quad 5' 'b' +legend: box +@end verbatim + +@float +@image{../png/sample7, 7cm} +@caption{Example of data smoothing} +@end float + +Finally one can create new data arrays on base of the existing one: extract slice, row or column of data (@code{SubData}), summarize along some of direction(s) (@code{Sum}), find distribution of data elements (@code{Hist}). Note, that all these functions are not thread-safe because they use static internal variable for output array. In particular, the using of several of them in arguments of the same function will lead to unpredictable result. + +@c ------------------------------------------------------------------ +@node Data plotting, Hints, Data handling, Examples +@section Data plotting + +Let me now show how to plot the data. MathGL generally has 2 types of plotting functions. Simple variant requires a single data array for plotting, other data (coordinates) are considered uniformly distributed in interval @var{Min}*@var{Max}. Second variant requires data arrays for all coordinates. It allows one to plot rather complex multivalent curves and surfaces (in case of parametric dependencies). Argument setting to default values allows one to plot data in standard form. Manual arguments setting gives possibility for fine tuning of colors, positions and view of graphics. Note, that the call of drawing function adds something to picture but does not clear the previous plots (as it does in Matlab). Another difference from Matlab is that all setup (like transparency, lightning, axis borders and so on) must be specified @strong{before} plotting functions. + +@menu +* Plots for 1D data:: +* Plots for 2D data:: +* Plots for 3D data:: +* Surface transparency:: +@end menu + +@c ------------------------------------------------------------------ +@node Plots for 1D data, Plots for 2D data, , Data plotting +@subsection Plots for 1D data + +Term ``1D data'' means that data depend on single index (parameter) like curve in parametric form @{x(i),y(i),z(i)@}, i=1...n. There are 5 generally different types of data representations: simple line plot, line plot with filling under it, stairs plot, bar plot and vertical lines (@pxref{1D plotting}). Each type of plotting has similar interface. There are 3D version and two 2D versions. One of last requires single array. The parameters of line and marks (@pxref{Line styles}) are specified by the string argument. If the string parameter is @code{NULL} then solid line with color from palette is used. + +Below I shall show the features of 1D plotting on base of @code{plot} function (@pxref{1D plotting}). Let us start from sinus plot: +@verbatim +new y0 50: modify y0 'sin(pi*(2*x-1))' +subplot 2 2 0 +plot y0: box +@end verbatim +Style of line is not specified in @code{plot} function. So MathGL uses the solid line with first color of palette (this is blue). Next subplot shows array @var{y1} with 2 rows: +@verbatim +subplot 2 2 1 +new y1 50 2 +modify y1 'sin(pi*2*x-pi)' +modify y1 'cos(pi*2*x-pi)/2' 1 +plot y1: box +@end verbatim +As previously I did not specify the style of lines. As a result, MathGL again uses solid line with next colors in palette (there are green and red). Now let us plot a circle on the same subplot. The circle is parametric curve @math{x=cos(\pi t), y=sin(\pi t)}. I will set the color of the circle (dark yellow, @samp{Y}) and put marks @samp{+} at point position: +@verbatim +new x 50: modify x 'cos(pi*2*x-pi)' +plot x y0 'Y+' +@end verbatim +Note that solid line is used because I did not specify the type of line. The same picture can be achieved by @code{Plot2} function. Let us draw ellipse by orange dash line: +@verbatim +plot y1(:,0) y(:,1) 'q|' +@end verbatim + +Drawing in 3D space is mostly the same. Let us draw spiral with default line style. Now its color is 4-th color from palette (this is cyan): +@verbatim +subplot 2 2 2:rotate 60 40 +new z 50: modify z '2*x-1' +plot x y0 z 'g':box +@end verbatim +Function @code{Plot3} does 3D curve plot but for single array. Use it to put circle marks on the previous plot: +@verbatim +new y2 10 3 +modify y2 'cos(pi*(2*x-1-y))' +modify y2 '2*x-1' 2 +plot y2(:,0) y2(:,1) y2(:,2) 'bo ' +@end verbatim +Note that line style is empty @samp{ } here. Usage of other 1D plotting functions looks similar: +@verbatim +subplot 2 2 3:rotate 60 40 +bars x y0 z 'r':box +@end verbatim + +@float +@image{../png/sample8, 7cm} +@caption{Example of 1D data plot} +@end float + +@c ------------------------------------------------------------------ +@node Plots for 2D data, Plots for 3D data, Plots for 1D data, Data plotting +@subsection Plots for 2D data + +Surfaces @code{Surf} and other 2D plots (@pxref{2D plotting}) are drown the same simpler as 1D one. The difference is that the string parameter specifies not by line style but by the color scheme of the plot (@pxref{Color scheme}). Here I draw attention on 4 most interesting color schemes. There is gray scheme where color is changed from black to white (string @samp{kw}) or from white to black (string @samp{wk}). Another scheme is useful for accentuation of negative (by blue color) and positive (by red color) regions on plot (string @samp{'BbwrR'}). Last one is the popular ``jet'' scheme (string @samp{'BbcyrR'}). + +Now I shall show the example of a surface drawing. At first let us switch lightning on +@verbatim +light on +@end verbatim +and draw the surface, considering coordinates x,y to be uniformly distributed in interval @var{Min}*@var{Max} +@verbatim +new a0 50 40 +modify a0 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))' +subplot 2 2 0:rotate 60 40 +surf a0: box +@end verbatim +Color scheme was not specified. So previous color scheme is used. In this case it is default color scheme (``jet'') for the first plot. Next example is a sphere. The sphere is parametrically specified surface: +@verbatim +new x 50 40: new y 50 40: new z 50 40 +modify x '0.8*sin(2*pi*x)*sin(pi*y)' +modify y '0.8*cos(2*pi*x)*sin(pi*y)' +modify z '0.8*cos(pi*y)' +subplot 2 2 1:rotate 60 40 +surf x y z 'bbwrr': box +@end verbatim +I set color scheme to @code{'BbwrR'} that corresponds to red top and blue bottom of the sphere. + +Surfaces will be plotted for each of slice of the data if @var{nz}>1. Next example draws surfaces for data arrays with @var{nz}=3: +@verbatim +new a1 50 40 3 +modify a1 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))' +modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*sin(3*pi*(x*y))' 1 +modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))' 2 +subplot 2 2 2:rotate 60 40 +alpha on +surf a1: box +@end verbatim +Note, that it may entail a confusion. However, if one will use density plot then the picture will look better: +@verbatim +subplot 2 2 3: rotate 60 40 +dens a1: box +@end verbatim +Note, that the previous color scheme is used in last plots because there are no direct specification of the one. + +@float +@image{../png/sample9, 7cm} +@caption{Example of surface plot for 2D data} +@end float + +Drawing of other 2D plots is analogous. The only peculiarity is the usage of flag @samp{#}. By default this flag switches on the drawing of a grid on plot (@code{grid} or @code{mesh} for plots in plain or in volume). However, for isosurfaces (including surfaces of rotation @code{axial}) this flag switches the face drawing off. Figure becomes wired. The following code gives example of flag @samp{#} using (compare with normal function drawing as in its description): +@verbatim +alpha on: light on: light 0 0 0 1 +new a 30 20 +modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' + +subplot 2 2 0: rotate 40 60 +surf a 'bbcyrr#': box +subplot 2 2 1: rotate 40 60 +dens a 'bbcyrr#': box +subplot 2 2 2: rotate 40 60 +cont a 'bbcyrr#': box +subplot 2 2 3: rotate 40 60 +axial a 'bbcyrr#': box +@end verbatim + +@float +@image{../png/samplea, 7cm} +@caption{Example of 2D data plot with color scheme contained @samp{#} symbol} +@end float + +@c ------------------------------------------------------------------ +@node Plots for 3D data, Surface transparency, Plots for 2D data, Data plotting +@subsection Plots for 3D data + +Drawing procedures for 3D plot looks similarly to 1D and 2D plots described above. There are 3 general types of 3D plots (@pxref{3D plotting}): (i) plots on slices or on projections, (ii) isosurfaces, (iii) cloud-like plots. Plots on slice are clear enough -- one specifies a slice (as its index or as coordinate value) and MathGL draws contour lines or density plot on slice plane. Isosurface gives more information. Isosurface is 3D analogue of the contour line @code{cont}. It shows the region where data array values exceed specified isosurface level. Plot becomes more informative if one adds transparency, lightning or sets color scheme depending on coordinates. Generalization of isosurface is the cloud-like plot. For this plot the darker color and less transparent regions correspond to higher values of data. Contrary, the regions with low values are transparent. For plotting of the phase of fields (or beams or pulses) one can use isosurface which transparency depends on the other data array (see function @code{surf3a}). As example of 3D data plots let us draw the Gaussian beam diffraction in space. Beam propagates along @var{x} axis: +@verbatim +alpha on: light on +light 0 0 0 1 +new a 30 30 30: new b 30 30 30 +modify a 'exp(-16*((z-0.5)^2+(y-0.5)^2)/(1+4*x^2))' +modify b '16*((z-0.5)^2+(y-0.5)^2)*(x)/(1+4*x^2)' +caxis 0 1 + +subplot 2 2 0: rotate 40 60 +surf3 a 'wgk': box +subplot 2 2 1: rotate 40 60 +densa a: box: axis +subplot 2 2 2: rotate 40 60 +cloud a: box +subplot 2 2 3: rotate 40 60 +surf3a b a 'q': box +@end verbatim + +@float +@image{../png/sampleb, 7cm} +@caption{Example of Gaussian beam diffraction (3D data)} +@end float + + +@c ------------------------------------------------------------------ +@node Surface transparency, , Plots for 3D data, Data plotting +@subsection Surface transparency + +MathGL library has advanced features for setting and handling the surface transparency. The simplest way to add transparency is the using of function @code{Alpha}. As a result, all further surfaces (and isosurfaces, density plots and so on) become transparent. However, their look can be additionally improved. + +First, the selected surface will be non-transparent if one sets the flag @code{transparent} before the surface drawing and sets it off after the drawing. + +Second, the value of transparency can be different from surface to surface. To do it just change the value of @code{alphadef} before the drawing of the selected surface. If its value is close to 0 then the surface becomes more and more transparent. Contrary, if its value is close to 1 then the surface becomes practically non-transparent. This is some analogue of @code{transparent on}. + +Third feature is the changing of the way how the light goes through overlapped surfaces. The variable @code{transptype} defines it. By default the usual transparency is used (@code{transptype 0}) -- surfaces below is less visible than the upper ones. A ``glass-like'' transparency (@code{transptype 1}) has a different look when the surface just decreases the background light (the surfaces are commutable in this case). + +A ``neon-like'' transparency (@code{transptype 2}) has more interesting look. In this case a surface is the light source (like a lamp on the dark background) and just adds some intensity to the color. At this, the library sets automatically the black color for the background and changes the default line color to white. + +As example I shall show the variant of plot from @ref{Plots for 2D data} (grid drawing is disabled) for different types of transparency. +@float +@image{../png/type0, 7cm} +@caption{Example of @code{TranspType=0}.} +@end float +@float +@image{../png/type1, 7cm} +@caption{Example of @code{TranspType=1}.} +@end float +@float +@image{../png/type2, 7cm} +@caption{Example of @code{TranspType=2}.} +@end float + + + +@c ------------------------------------------------------------------ +@node Hints, , Data plotting, Examples +@section Hints + +In this section I have included some small hints and advices for the improving of the quality of plots and for the demonstration of some non-trivial features of MathGL library. In contrast to previous examples I showed mostly the idea but not the whole drawing function. More examples with the source code can be find at @uref{http://mathgl.sf.net/} or in section @ref{Samples}. + +@menu +* ``Compound'' graphics:: +* Two axes in one plot:: +* Titles for the plot:: +* Changing of the color range:: +* Management of a point cutting:: +* Vector field visualization:: +* Several light sources:: +* CutMin and CutMax features:: +* Mapping visualization:: +* Log-scaled plot:: +* Nonlinear fitting hints:: +* PDE solving hints:: +* Stereo image:: +@end menu + +@c ------------------------------------------------------------------ +@node ``Compound'' graphics, Two axes in one plot, , Hints +@subsection ``Compound'' graphics + +As I noted above, MathGL functions (except the special one, like @code{clf}) do not erase the previous plotting but just add the new one. It allows one to draw ``compound'' plots easily. For example, popular Matlab command @code{surfc} can be emulated in MathGL by 2 calls: +@verbatim +surf a +cont a 0 7 -1 # draw contours at z = -1 +@end verbatim +Here @var{a} is 2-dimensional data for the plotting, @code{-1} is the value of z-coordinate at which the contour should be plotted (at the bottom in this example). Analogously, one can draw density plot instead of contour lines and so on. + +Another nice plot is contour lines plotted directly on the surface: +@verbatim +light on # switch on light for the surface +surf a 'bbcyrr' # select 'jet' colormap for the surface +cont a 'y' # and yellow color for contours +@end verbatim +The possible difficulties arise in black&white case, when the color of the surface can be close to the color of a contour line. In that case I may suggest the following code: +@verbatim +light on # switch on light for the surface +surf a 'kw' # select 'gray' colormap for the surface +caxis -1 0 # first draw for darker surface colors +conta 'w' # white contours +caxis 0 1 # now draw for brighter surface colors +cont a 'k' # black contours +@end verbatim +The idea is to divide the color range on 2 parts (dark and bright) and to select the contrasting color for contour lines for each of part. + +Similarly, one can plot flow thread over density plot of vector field amplitude (this is another amusing plot from Matlab) and so on. The list of compound graphics can be prolonged but I hope that the general idea is clear. + +@c ------------------------------------------------------------------ +@node Two axes in one plot, Titles for the plot, ``Compound'' graphics, Hints +@subsection Two axes in one plot + +Developing the previous hint one can make a plot with 2 or more axes. The idea is that the change of settings does not influence on the already drawn graphics. So, for 2-axes plot let us set the first axis and draw everything concerning it. Then let us setup the second axis and draw things for the second axis. The corresponding code is (@pxref{2-axes sample}): +@verbatim +# set up first axis +axis -1 -1 1 1: origin -1 -1 +axis:fplot 'sin(pi*x)' # draw something in first axis +# set up second axis +axis 0 0 1 1: origin 1 1 +axis: fplot 'cos(4*pi*x^2)' # draw something in second axis +@end verbatim +Note, that the first and the second axes look better if being placed in different corners. In the code presented above the first axis is placed in the left-bottom corner, and the second one is placed in the right-top corner. + +@c ------------------------------------------------------------------ +@node Titles for the plot, Changing of the color range, Two axes in one plot, Hints +@subsection Titles for the plot + +The printing of nice titles for the plot is not so trivial task in general case. The problem is that the rotation and aspect change lead to different looks for titles of different subplots. So, the resulting look is not so good as it could be. The solution is simple -- to print titles exactly after @code{subplot} call and before any rotation, aspect change and so on! Analogously, the title for the whole picture looks better if it is printed first (before any @code{subplot} calls). Alternatively you can use function @code{title} for plotting title for the picture at any time. + +@c ------------------------------------------------------------------ +@node Changing of the color range, Management of a point cutting, Titles for the plot, Hints +@subsection Changing of the color range + +By default (for the user comfort), the color range is set equal to z-range of the plot. However, there are different ranges. So, one can obtain amusing plot by the change of color range manually. For example, there are plots with one-color bottom (or top) or practically bi-color picture and so on. + +For example, compare 2 surfaces: +@verbatim +subplot 2 1 0 +surf a # usual coloring range +subplot 2 1 1 +caxis 0 1 +surf a # bottom of the surface have one-colour filling +@end verbatim + +@c ------------------------------------------------------------------ +@node Management of a point cutting, Vector field visualization, Changing of the color range, Hints +@subsection Management of a point cutting + +Sometimes an experimental or numerical surface has outstanding points. Visualization of such surface will lead to the hole(s) in place of such points. The standard method of ``fighting'' -- to change data values -- is not always good and is not so convenient. MathGL library has another method -- to set variable @code{cut off}. As a consequence, all outstanding points will be projected on the bounding box. + +Such method is good not only for outstanding points but also for the case when one need to plane the bottom or the top of the plot. Exactly such case is demonstrated in the code: +@verbatim +new a 20 30 # create some data +modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' +# set lower border above the data minimal value +axis -1 -1 0 1 1 1:rotate 40 60 +cut off # set off cutting flag +surf a # and draw the surface +@end verbatim +It is an interesting result, is not it? + +@c ------------------------------------------------------------------ +@node Vector field visualization, Several light sources, Management of a point cutting, Hints +@subsection Vector field visualization + +Vector field visualization (especially in 3d case @code{vect3} or @code{vectc}) may look tangly -- there are too many overlapping lines. I may suggest 2 ways to solve this problem. The first one is to change @code{meshnum} for decreasing the number of hachures. The second way is to use the flow thread chart @code{Flow}. Unfortunately, I don't know any other methods to visualize 3d vector field. If you know any, e-mail me and I shall add it to MatGL. + +@c ------------------------------------------------------------------ +@node Several light sources, CutMin and CutMax features, Vector field visualization, Hints +@subsection Several light sources + +In contrast to the most of other programs, MathGL supports several (up to 10) light sources. Moreover, the color each of them can be different: white (this is usual), yellow, red, cyan, green and so on. The use of several light sources may be interesting for the highlighting of some peculiarities of the plot or just to make an amusing picture. Note, each light source can be switched on/off individually (@pxref{Several light sample}). + +@c ------------------------------------------------------------------ +@node CutMin and CutMax features, Mapping visualization, Several light sources, Hints +@subsection CutMin and CutMax features + +MathGL library has a feature for cutting of points in some region @var{CutMin*CutMax}. Such an excision can be used to improve the look of the graphics. Moreover, this cutting may help to show an internal structure of an object (like @code{isocaps} plot in Matlab). For example, let us use the standard 3D data array and show its interior (@pxref{CutMinMax sample}). + +@verbatim +new c 61 51 40 # create the data +new v 10: fill v -0.5 1 +modify c '(-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1))' +cut 0 -1 -1 1 0 1.1 +rotate 40 60: surf3 c -0.5 'bbcyrr' +contf3 v c 'x' -1 'bbcyrr': contf3 v c 'y' -1 'bbcyrr' +contf3 v c 'z' 0 'bbcyrr': contf3 v c 'z' 39 'bbcyrr' +@end verbatim + +One can also exclude points from arbitrary area in space. This area defined by textual formula @code{cut} (@pxref{Cutting}). The algorithm is the same as shown for ``rectangular cutting''. + +@c ------------------------------------------------------------------ +@node Mapping visualization, Log-scaled plot, CutMin and CutMax features, Hints +@subsection Mapping visualization + +Sometime ago I worked with mapping and have a question about its visualization. Let me remember you that mapping is some transformation rule for one set of number to another one. The 1d mapping is just an ordinary function -- it takes a number and transforms it to another one. The 2d mapping (which I used) is a pair of functions which take 2 numbers and transform them to another 2 ones. Except general plots (like @code{surfc}, @code{surfa}) there is a special plot -- Arnold diagram. It shows the area which is the result of mapping of some initial area (usually square). + +I tried to make such plot in @code{map}. It shows the set of points or set of faces, which final position is the result of mapping. At this, the color gives information about their initial position and the height describes Jacobian value of the transformation. Unfortunately, it looks good only for the simplest mapping but for the real multivalent quasi-chaotic mapping it produces a confusion. So, use it if you like :). + +@c ------------------------------------------------------------------ +@node Log-scaled plot, Nonlinear fitting hints, Mapping visualization, Hints +@subsection Log-scaled plot + +Log-scaled plot can be drawn by 2 steps. First, one should change the scale of axis by call @code{axis 'lg(x)' 'lg(y)'} (in this example, x- and y-axis will be log-scaled). Second, one should set logarithmic scale for axis ticks by changing variables: @code{xtick 0: yticks 0}. Finally, one should check (or change) the axis ranges and origin so that their values to be positive. For example of log-log plot @pxref{Log-log sample}. + +@c ------------------------------------------------------------------ +@node Nonlinear fitting hints, PDE solving hints, Log-scaled plot, Hints +@subsection Nonlinear fitting hints + +Nonlinear fitting is rather simple. All that you need is the data to fit, the approximation formula and the list of coefficients to fit (better with its initial guess values). Let me demonstrate it on the following simple example (@pxref{Fitting sample}). First, let us use sin function with some random noise: +@verbatim +new rnd 100: new idl 50 # data to be fitted and ideal data +modify rnd '0.4*rnd+0.1+sin(4*pi*x)' +modify idl '0.3+sin(4*pi*x)' +@end verbatim +and plot it to see that data we will fit +@verbatim +axis -1 -2 1 2 +plot rnd '. ':plot idl 'b' +box:text 0 2.2 'initial: y = 0.3+sin(2\pi x)' 'C:b' -1 +@end verbatim + +The next step is the fitting itself. For that let me specify an initial values @var{ini} for coefficients @samp{abc} and do the fitting for approximation formula @samp{a+b*sin(c*x)} +@verbatim +new res # The data for found formula +fit res rnd 'a+b*sin(c*x)' 'abc' [1, 1, 3] +@end verbatim +Now display it +@verbatim +plot res 'r' +text -1 -1.3 'fitted:' 'L:r' -1 +putsfit 0 -1.8 'y = ' 'C:r' -1 +@end verbatim + +NOTE! the fitting results may have strong dependence on initial values for coefficients due to algorithm features. The problem is that in general case there are several local 'optimums' for coefficients and the program returns only first found one! There are no guaranties that it will be the best. Try for example to set @code{ini = [0, 0, 0]} in the code above. + +@c ------------------------------------------------------------------ +@node PDE solving hints, Stereo image, Nonlinear fitting hints, Hints +@subsection PDE solving hints + +Solving of Partial Differential Equations (PDE, including beam tracing) and ray tracing (or finding particle trajectory) are more or less common task. So, MathGL have several functions for that. There are @code{ray} for ray tracing, @code{pde} for PDE solving, @code{qo2d} for beam tracing in 2D case. Note, that these functions take ``Hamiltonian'' or equations as string values. And I don't plan now to allow one to use user-defined functions. There are 2 reasons: the complexity of corresponding interface; and the basic nature of used methods which are good for samples but may not good for serious scientific calculations. + +The ray tracing can be done by @code{ray} function. Really ray tracing equation is Hamiltonian equation for 3D space. So, the function can be also used for finding a particle trajectory (i.e. solve Hamiltonian ODE) for 1D, 2D or 3D cases. The function have a set of arguments. First of all, it is Hamiltonian which defined the media (or the equation) you are planning to use. The Hamiltonian is defined by string which may depend on coordinates @samp{x}, @samp{y}, @samp{z}, time @samp{t} (for particle dynamics) and momentums @samp{p}=@math{p_x}, @samp{q}=@math{p_y}, @samp{v}=@math{p_z}. Next, you have to define the initial conditions for coordinates and momentums at @samp{t}=0 and set the integrations step (default is 0.1) and its duration (default is 10). The Runge-Kutta method of 4-th order is used for integration. +@verbatim +new re 128:new im 128 +ray r 'p^2+q^2-x-1' -0.7 -1 0 0 0.5 0 +plot r(0) r(1) +@end verbatim +This example calculate the reflection from linear layer (media with Hamiltonian @samp{p^2+q^2-x-1}=@math{p_x^2+p_y^2-x-1}). This is parabolic curve. The resulting array have 7 columns which contain data for @{x,y,z,p,q,v,t@}. + +The solution of PDE is a bit more complicated. As previous you have to specify the equation as pseudo-differential operator @math{\hat H(x, \nabla)} which is called sometime as ``Hamiltonian'' (for example, in beam tracing). As previously, it is defined by string which may depend on coordinates @samp{x}, @samp{y}, @samp{z} (but not time!), momentums @samp{p}=@math{(d/dx)/i k_0}, @samp{q}=@math{(d/dy)/i k_0} and field amplitude @samp{u}=@math{|u|}. The evolutionary coordinate is @samp{z} in all cases. So that, the equation look like @math{du/dz = ik_0 H(x,y,\hat p, \hat q, |u|)[u]}. Dependence on field amplitude @samp{u}=@math{|u|} allows one to solve nonlinear problems too. For example, for nonlinear Shrodinger equation you may set @code{ham='p^2 + q^2 - u^2'}. Also you may specify imaginary part for wave absorption, like @code{ham = 'p^2 + i*x*(x>0)'}, but only if dependence on variable @samp{i} is linear (i.e. @math{H = Hre+i*Him}). + +Next step is specifing the initial conditions at @samp{z}=@code{Min.z}. The function need 2 arrays for real and for imaginary part. Note, that coordinates x,y,z are supposed to be in specified range [Min, Max]. So, the data arrays should have corresponding scales. Finally, you may set the integration step and paramter k0=@math{k_0}. Also keep in mind, that internally the 2 times large box is used (for suppressing numerical reflection from boundaries) and the equation should well defined even in this extended range. + +Final comment is concerning the possible form of pseudo-differential operator @math{H}. At this moment, simplified form of operator @math{H} is supported -- all ``mixed'' terms (like @samp{x*p}->x*d/dx) are excluded. For example, in 2D case this operator is effectively @math{H = f(p,z) + g(x,z,u)}. However commutable combinations (like @samp{x*q}->x*d/dy) are allowed for 3D case. + +So, for example let solve the equation for beam deflected from linear layer and absorbed later. The operator will have the form @samp{'p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)'} that correspond to equation @math{ik_0 \partial_z u + \Delta u + x \cdot u + i (x+z)/2 \cdot u = 0}. This is typical equation for Electron Cyclotron (EC) absorption in magnetized plasmas. For initial conditions let me select the beam with plane phase front @math{exp(-48*(x+0.7)^2)}. The corresponding code looks like this (@pxref{PDE sample}): +@verbatim +new re 128: new im 128 +fill re 'exp(-48*(x+0.7)^2)' +pde a 'p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)' re im 0.01, 30 +transpose a 'yxz' +caxis 0 1 +dens a 'wyrRk' +@end verbatim + +The last example is example of beam tracing. Beam tracing equation is special kind of PDE equation written in coordinates accompanied to a ray. Generally this is the same parameters and limitation as for PDE solving but the coordinates are defined by the ray and by parameter of grid width @var{w} in direction transverse the ray. So, you don't need to specify the range of coordinates. @strong{BUT} there is limitation. The accompanied coordinates are well defined only for smooth enough rays, i.e. then the ray curvature @math{K} (which is defined as @math{1/K^2 = (|\ddot r|^2 |\dot r|^2 - (\ddot r, \dot r)^2)/|\dot r|^6}) is much large then the grid width: @math{K>>w}. So, you may receive incorrect results if this condition will be broken. + +You may use following code for obtaining the same solution as in previous example: +@verbatim +new re 128: new im 128 +define $1 'p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)' +ray r $1 -0.7 -1 0 0 0.5 0 0.02 2 +# now start beam tracing +fill re 'exp(-48*x^2)' +new xx: new yy +qo2d a $1 re im r 1 30 xx yy +caxis 0 1 +dens xx yy a 'wyrRk' +@end verbatim + + +@c ------------------------------------------------------------------ +@node Stereo image, , PDE solving hints, Hints +@subsection Stereo image + +One can easily create stereo image in MathGL. Stereo image can be produced by making two subplots with slightly different rotation angles. The corresponding code looks like this (@pxref{Stereo image sample}): +@verbatim +subplot 2 1 0 # left image +rotate 40 60+3 +# draw something here +subplot 2 1 1 # right image +rotate 40 60-3 +# draw the same here +@end verbatim + diff --git a/texinfo/example_en.texi b/texinfo/example_en.texi index 210e189..f5886bd 100644 --- a/texinfo/example_en.texi +++ b/texinfo/example_en.texi @@ -1,5 +1,4 @@ @c ------------------------------------------------------------------ -@node Examples, MathGL core, Overview, Top @chapter MathGL examples This chapter contain information about basic and advanced MathGL, hints and samples for all types of graphics. I recommend you read first 2 sections one after another and at least look on ``Hints'' section. Also I recommend you to look at @ref{General concepts} and @ref{FAQ}. Sample code for some of these examples can be found in @uref{http://mathgl.sf.net/pictures.html} and in @ref{Samples}. @@ -46,11 +45,11 @@ Let me consider the aforesaid in more detail. @c ------------------------------------------------------------------ @node Using FLTK/GLUT window, Drawing to file, , Basic usage -@subsection Using FLTK/GLUT window +@subsection Using FLTK/Qt/GLUT window @cindex window @cindex widgets -The ``interactive'' way of drawing in MathGL consists in window creation with help of class @code{mglGraphGLUT} or @code{mglGraphGLUT} (@pxref{Widget classes}) and the following drawing in this window. There is a corresponding code: +The ``interactive'' way of drawing in MathGL consists in window creation with help of class @code{mglGraphFLTK}, @code{mglGraphQT} or @code{mglGraphGLUT} (@pxref{Widget classes}) and the following drawing in this window. There is a corresponding code: @verbatim int sample(mglGraph *gr, void *) { @@ -91,7 +90,7 @@ Alternatively you can create yours own class inherited from class @code{mglDraw} } @end verbatim -The similar code can be written for @code{mglGraphGLUT} or for @code{mglGraphQT} window (function @code{sample()} is the same): +The similar code can be written for @code{mglGraphQT} or for @code{mglGraphGLUT} window (function @code{sample()} is the same): @verbatim int main(int argc,char **argv) { @@ -177,7 +176,47 @@ The last way of MathGL using is the drawing in memory. Class @code{mglGraphZB} a dc.DrawBitmap(wxBitmap(img),0,y); } @end verbatim -The drawing in other libraries is most the same. Moreover, I excluded the support of TIFF and JPEG files from MathGL by default for compatibility with wxWidgets library. +The drawing in other libraries is most the same. +@c Moreover, I excluded the support of TIFF and JPEG files from MathGL by default for compatibility with wxWidgets library. + +For example, FLTK code will look like +@verbatim + void Fl_MyWidget::draw() + { + mglGraphZB gr(w(),h()); + gr.Alpha(true); // draws something using MathGL + gr.Light(true); gr.Light(0,mglPoint(1,0,-1)); + sample(&gr,NULL); + fl_draw_image(gr.GetBits(), x(), y(), gr.GetWidth(), gr.GetHeight(), 3); + } +@end verbatim +Qt code will look like +@verbatim + void MyWidget::paintEvent(QPaintEvent *) + { + mglGraphZB gr(w(),h()); + gr.Alpha(true); // draws something using MathGL + gr.Light(true); gr.Light(0,mglPoint(1,0,-1)); + sample(&gr,NULL); + + // Qt don't support RGB format as is. So, let convert it to BGRN. + const uchar *bb = gr.GetBits(); + register long i, w=gr.GetWidth(), h=gr.GetHeight(); + *buf = new uchar[4*w*h]; + for(i=0;iSubPlot(2,2,0); - gr->Plot(y0); gr->Box(); + gr->Plot(y0); gr->Box(); @end verbatim Style of line is not specified in @code{Plot()} function. So MathGL uses the solid line with first color of palette (this is blue). Next subplot shows array @var{y1} with 2 rows: @verbatim @@ -675,11 +714,11 @@ Style of line is not specified in @code{Plot()} function. So MathGL uses the sol mglData y1(50,2); y1.Modify("sin(pi*2*x-pi)"); y1.Modify("cos(pi*2*x-pi)/2",1); - gr->Plot(y1); gr->Box(); + gr->Plot(y1); gr->Box(); @end verbatim As previously I did not specify the style of lines. As a result, MathGL again uses solid line with next colors in palette (there are green and red). Now let us plot a circle on the same subplot. The circle is parametric curve @math{x=cos(\pi t), y=sin(\pi t)}. I will set the color of the circle (dark yellow, @samp{Y}) and put marks @samp{+} at point position: @verbatim - mglData x(50); x.Modify("cos(pi*2*x-pi)"); + mglData x(50); x.Modify("cos(pi*2*x-pi)"); gr->Plot(x,y0,"Y+"); @end verbatim Note that solid line is used because I did not specify the type of line. The same picture can be achieved by @code{Plot2()} function. Let us draw ellipse by orange dash line: @@ -690,7 +729,7 @@ Note that solid line is used because I did not specify the type of line. The sam Drawing in 3D space is mostly the same. Let us draw spiral with default line style. Now its color is 4-th color from palette (this is cyan): @verbatim gr->SubPlot(2,2,2); gr->Rotate(60,40); - mglData z(50); z.Modify("2*x-1"); + mglData z(50); z.Modify("2*x-1"); gr->Plot(x,y0,z); gr->Box(); @end verbatim Function @code{Plot3()} does 3D curve plot but for single array. Use it to put circle marks on the previous plot: @@ -708,7 +747,7 @@ Note that line style is empty @samp{ } here. Usage of other 1D plotting function @end verbatim @float -@image{png/sample8, 7cm} +@image{../png/sample8, 7cm} @caption{Example of 1D data plot} @end float @@ -762,7 +801,7 @@ Note, that it may entail a confusion. However, if one will use density plot then Note, that the previous color scheme is used in last plots because there are no direct specification of the one. @float -@image{png/sample9, 7cm} +@image{../png/sample9, 7cm} @caption{Example of surface plot for 2D data} @end float @@ -787,7 +826,7 @@ Drawing of other 2D plots is analogous. The only peculiarity is the usage of fla @end verbatim @float -@image{png/samplea, 7cm} +@image{../png/samplea, 7cm} @caption{Example of 2D data plot with color scheme contained @samp{#} symbol} @end float @@ -819,7 +858,7 @@ Drawing procedures for 3D plot looks similarly to 1D and 2D plots described abov @end verbatim @float -@image{png/sampleb, 7cm} +@image{../png/sampleb, 7cm} @caption{Example of Gaussian beam diffraction (3D data)} @end float @@ -840,15 +879,15 @@ A ``neon-like'' transparency (@code{TranspType=2}) has more interesting look. In As example I shall show the variant of plot from @ref{Plots for 2D data} (grid drawing is disabled) for different types of transparency. @float -@image{png/type0, 7cm} +@image{../png/type0, 7cm} @caption{Example of @code{TranspType=0}.} @end float @float -@image{png/type1, 7cm} +@image{../png/type1, 7cm} @caption{Example of @code{TranspType=1}.} @end float @float -@image{png/type2, 7cm} +@image{../png/type2, 7cm} @caption{Example of @code{TranspType=2}.} @end float @@ -1010,8 +1049,8 @@ In this section I have included some small hints and advices for the improving o * ``Compound'' graphics:: * Two axes in one plot:: * Titles for the plot:: -* Changing of the color range:: -* Management of the point cutting:: +* Changing of the color range:: +* Management of a point cutting:: * Vector field visualization:: * Several light sources:: * CutMin and CutMax features:: @@ -1021,6 +1060,7 @@ In this section I have included some small hints and advices for the improving o * Nonlinear fitting hints:: * PDE solving hints:: * MGL parser using:: +* Stereo image:: @end menu @c ------------------------------------------------------------------ @@ -1078,7 +1118,7 @@ Note, that the first and the second axes look better if being placed in differen The printing of nice titles for the plot is not so trivial task in general case. The problem is that the rotation and aspect change lead to different looks for titles of different subplots. So, the resulting look is not so good as it could be. The solution is simple -- to print titles exactly after @code{SubPlot}() call and before any rotation, aspect change and so on! Analogously, the title for the whole picture looks better if it is printed first (before any @code{SubPlot()} calls). Alternatively you can use function @code{Title()} for plotting title for the picture at any time. @c ------------------------------------------------------------------ -@node Changing of the color range, Management of the point cutting, Titles for the plot, Hints +@node Changing of the color range, Management of a point cutting, Titles for the plot, Hints @subsection Changing of the color range By default (for the user comfort), the color range is set equal to z-range of the plot. However, there are different ranges. So, one can obtain amusing plot by the change of color range manually. For example, there are plots with one-color bottom (or top) or practically bi-color picture and so on. @@ -1086,7 +1126,6 @@ By default (for the user comfort), the color range is set equal to z-range of th For example, compare 2 surfaces: @verbatim SubPlot(2,1,0) - Axis(mglPoint(-1,-1,-1),mglPoint(1,1,1),mglPoint(-1,-1,-1)); Surf(a); // usual coloring range SubPlot(2,1,1) CAxis(0,1); @@ -1094,15 +1133,15 @@ For example, compare 2 surfaces: @end verbatim @c ------------------------------------------------------------------ -@node Management of the point cutting, Vector field visualization, Changing of the color range, Hints -@subsection Management of the point cutting +@node Management of a point cutting, Vector field visualization, Changing of the color range, Hints +@subsection Management of a point cutting Sometimes an experimental or numerical surface has outstanding points. Visualization of such surface will lead to the hole(s) in place of such points. The standard method of ``fighting'' -- to change data values -- is not always good and is not so convenient. MathGL library has another method -- to set variable @code{Cut=false}. As a consequence, all outstanding points will be projected on the bounding box. Such method is good not only for outstanding points but also for the case when one need to plane the bottom or the top of the plot. Exactly such case is demonstrated in the code: @verbatim mglData a(20,30); // create some data - a.a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); + a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); // set lower border above the data minimal value Axis(mglPoint(-1,-1,0),mglPoint(1,1,1)); Cut = false; // set off cutting flag @@ -1111,7 +1150,7 @@ Such method is good not only for outstanding points but also for the case when o It is an interesting result, is not it? @c ------------------------------------------------------------------ -@node Vector field visualization, Several light sources, Management of the point cutting, Hints +@node Vector field visualization, Several light sources, Management of a point cutting, Hints @subsection Vector field visualization Vector field visualization (especially in 3d case @code{Vect3} or @code{VectC}) may look tangly -- there are too many overlapping lines. I may suggest 2 ways to solve this problem. The first one is to change @code{MeshNum} for decreasing the number of hachures. The second way is to use the flow thread chart @code{Flow}. Unfortunately, I don't know any other methods to visualize 3d vector field. If you know any, e-mail me and I shall add it to MatGL. @@ -1263,7 +1302,7 @@ You may use following code for obtaining the same solution as in previous exampl @c ------------------------------------------------------------------ -@node MGL parser using, , PDE solving hints, Hints +@node MGL parser using, Stereo image, PDE solving hints, Hints @subsection MGL parser using Sometimes you may prefer to use MGL scripts in yours code. It is simpler (especially in comparison with C/Fortran interfaces) and fast way to plot the data with annotations, labels and so on. Class @code{mglParse} (@pxref{mglParse class} parse MGL scripts in C++. It have also the corresponding interface for C/Fortran. @@ -1303,3 +1342,19 @@ The code in C/Fortran looks practically the same: mgl_parse_text(gr, parser, "for $0 -1 1 0.1\nline 0 0 -1 $0 'r'\nnext"); mgl_write_png(gr, "test.png", ""); // don't forgot to save picture @end verbatim + +@c ------------------------------------------------------------------ +@node Stereo image, , MGL parser using, Hints +@subsection Stereo image + +One can easily create stereo image in MathGL. Stereo image can be produced by making two subplots with slightly different rotation angles. The corresponding code looks like this (@pxref{Stereo image sample}): +@verbatim + gr->SubPlot(2,1,0); // left image + gr->Rotate(40,60+3); + // draw something here + + gr->SubPlot(2,1,1); // right image + gr->Rotate(40,60-3); + // draw the same here +@end verbatim + diff --git a/texinfo/example_ru.texi b/texinfo/example_ru.texi index 210e189..f5886bd 100644 --- a/texinfo/example_ru.texi +++ b/texinfo/example_ru.texi @@ -1,5 +1,4 @@ @c ------------------------------------------------------------------ -@node Examples, MathGL core, Overview, Top @chapter MathGL examples This chapter contain information about basic and advanced MathGL, hints and samples for all types of graphics. I recommend you read first 2 sections one after another and at least look on ``Hints'' section. Also I recommend you to look at @ref{General concepts} and @ref{FAQ}. Sample code for some of these examples can be found in @uref{http://mathgl.sf.net/pictures.html} and in @ref{Samples}. @@ -46,11 +45,11 @@ Let me consider the aforesaid in more detail. @c ------------------------------------------------------------------ @node Using FLTK/GLUT window, Drawing to file, , Basic usage -@subsection Using FLTK/GLUT window +@subsection Using FLTK/Qt/GLUT window @cindex window @cindex widgets -The ``interactive'' way of drawing in MathGL consists in window creation with help of class @code{mglGraphGLUT} or @code{mglGraphGLUT} (@pxref{Widget classes}) and the following drawing in this window. There is a corresponding code: +The ``interactive'' way of drawing in MathGL consists in window creation with help of class @code{mglGraphFLTK}, @code{mglGraphQT} or @code{mglGraphGLUT} (@pxref{Widget classes}) and the following drawing in this window. There is a corresponding code: @verbatim int sample(mglGraph *gr, void *) { @@ -91,7 +90,7 @@ Alternatively you can create yours own class inherited from class @code{mglDraw} } @end verbatim -The similar code can be written for @code{mglGraphGLUT} or for @code{mglGraphQT} window (function @code{sample()} is the same): +The similar code can be written for @code{mglGraphQT} or for @code{mglGraphGLUT} window (function @code{sample()} is the same): @verbatim int main(int argc,char **argv) { @@ -177,7 +176,47 @@ The last way of MathGL using is the drawing in memory. Class @code{mglGraphZB} a dc.DrawBitmap(wxBitmap(img),0,y); } @end verbatim -The drawing in other libraries is most the same. Moreover, I excluded the support of TIFF and JPEG files from MathGL by default for compatibility with wxWidgets library. +The drawing in other libraries is most the same. +@c Moreover, I excluded the support of TIFF and JPEG files from MathGL by default for compatibility with wxWidgets library. + +For example, FLTK code will look like +@verbatim + void Fl_MyWidget::draw() + { + mglGraphZB gr(w(),h()); + gr.Alpha(true); // draws something using MathGL + gr.Light(true); gr.Light(0,mglPoint(1,0,-1)); + sample(&gr,NULL); + fl_draw_image(gr.GetBits(), x(), y(), gr.GetWidth(), gr.GetHeight(), 3); + } +@end verbatim +Qt code will look like +@verbatim + void MyWidget::paintEvent(QPaintEvent *) + { + mglGraphZB gr(w(),h()); + gr.Alpha(true); // draws something using MathGL + gr.Light(true); gr.Light(0,mglPoint(1,0,-1)); + sample(&gr,NULL); + + // Qt don't support RGB format as is. So, let convert it to BGRN. + const uchar *bb = gr.GetBits(); + register long i, w=gr.GetWidth(), h=gr.GetHeight(); + *buf = new uchar[4*w*h]; + for(i=0;iSubPlot(2,2,0); - gr->Plot(y0); gr->Box(); + gr->Plot(y0); gr->Box(); @end verbatim Style of line is not specified in @code{Plot()} function. So MathGL uses the solid line with first color of palette (this is blue). Next subplot shows array @var{y1} with 2 rows: @verbatim @@ -675,11 +714,11 @@ Style of line is not specified in @code{Plot()} function. So MathGL uses the sol mglData y1(50,2); y1.Modify("sin(pi*2*x-pi)"); y1.Modify("cos(pi*2*x-pi)/2",1); - gr->Plot(y1); gr->Box(); + gr->Plot(y1); gr->Box(); @end verbatim As previously I did not specify the style of lines. As a result, MathGL again uses solid line with next colors in palette (there are green and red). Now let us plot a circle on the same subplot. The circle is parametric curve @math{x=cos(\pi t), y=sin(\pi t)}. I will set the color of the circle (dark yellow, @samp{Y}) and put marks @samp{+} at point position: @verbatim - mglData x(50); x.Modify("cos(pi*2*x-pi)"); + mglData x(50); x.Modify("cos(pi*2*x-pi)"); gr->Plot(x,y0,"Y+"); @end verbatim Note that solid line is used because I did not specify the type of line. The same picture can be achieved by @code{Plot2()} function. Let us draw ellipse by orange dash line: @@ -690,7 +729,7 @@ Note that solid line is used because I did not specify the type of line. The sam Drawing in 3D space is mostly the same. Let us draw spiral with default line style. Now its color is 4-th color from palette (this is cyan): @verbatim gr->SubPlot(2,2,2); gr->Rotate(60,40); - mglData z(50); z.Modify("2*x-1"); + mglData z(50); z.Modify("2*x-1"); gr->Plot(x,y0,z); gr->Box(); @end verbatim Function @code{Plot3()} does 3D curve plot but for single array. Use it to put circle marks on the previous plot: @@ -708,7 +747,7 @@ Note that line style is empty @samp{ } here. Usage of other 1D plotting function @end verbatim @float -@image{png/sample8, 7cm} +@image{../png/sample8, 7cm} @caption{Example of 1D data plot} @end float @@ -762,7 +801,7 @@ Note, that it may entail a confusion. However, if one will use density plot then Note, that the previous color scheme is used in last plots because there are no direct specification of the one. @float -@image{png/sample9, 7cm} +@image{../png/sample9, 7cm} @caption{Example of surface plot for 2D data} @end float @@ -787,7 +826,7 @@ Drawing of other 2D plots is analogous. The only peculiarity is the usage of fla @end verbatim @float -@image{png/samplea, 7cm} +@image{../png/samplea, 7cm} @caption{Example of 2D data plot with color scheme contained @samp{#} symbol} @end float @@ -819,7 +858,7 @@ Drawing procedures for 3D plot looks similarly to 1D and 2D plots described abov @end verbatim @float -@image{png/sampleb, 7cm} +@image{../png/sampleb, 7cm} @caption{Example of Gaussian beam diffraction (3D data)} @end float @@ -840,15 +879,15 @@ A ``neon-like'' transparency (@code{TranspType=2}) has more interesting look. In As example I shall show the variant of plot from @ref{Plots for 2D data} (grid drawing is disabled) for different types of transparency. @float -@image{png/type0, 7cm} +@image{../png/type0, 7cm} @caption{Example of @code{TranspType=0}.} @end float @float -@image{png/type1, 7cm} +@image{../png/type1, 7cm} @caption{Example of @code{TranspType=1}.} @end float @float -@image{png/type2, 7cm} +@image{../png/type2, 7cm} @caption{Example of @code{TranspType=2}.} @end float @@ -1010,8 +1049,8 @@ In this section I have included some small hints and advices for the improving o * ``Compound'' graphics:: * Two axes in one plot:: * Titles for the plot:: -* Changing of the color range:: -* Management of the point cutting:: +* Changing of the color range:: +* Management of a point cutting:: * Vector field visualization:: * Several light sources:: * CutMin and CutMax features:: @@ -1021,6 +1060,7 @@ In this section I have included some small hints and advices for the improving o * Nonlinear fitting hints:: * PDE solving hints:: * MGL parser using:: +* Stereo image:: @end menu @c ------------------------------------------------------------------ @@ -1078,7 +1118,7 @@ Note, that the first and the second axes look better if being placed in differen The printing of nice titles for the plot is not so trivial task in general case. The problem is that the rotation and aspect change lead to different looks for titles of different subplots. So, the resulting look is not so good as it could be. The solution is simple -- to print titles exactly after @code{SubPlot}() call and before any rotation, aspect change and so on! Analogously, the title for the whole picture looks better if it is printed first (before any @code{SubPlot()} calls). Alternatively you can use function @code{Title()} for plotting title for the picture at any time. @c ------------------------------------------------------------------ -@node Changing of the color range, Management of the point cutting, Titles for the plot, Hints +@node Changing of the color range, Management of a point cutting, Titles for the plot, Hints @subsection Changing of the color range By default (for the user comfort), the color range is set equal to z-range of the plot. However, there are different ranges. So, one can obtain amusing plot by the change of color range manually. For example, there are plots with one-color bottom (or top) or practically bi-color picture and so on. @@ -1086,7 +1126,6 @@ By default (for the user comfort), the color range is set equal to z-range of th For example, compare 2 surfaces: @verbatim SubPlot(2,1,0) - Axis(mglPoint(-1,-1,-1),mglPoint(1,1,1),mglPoint(-1,-1,-1)); Surf(a); // usual coloring range SubPlot(2,1,1) CAxis(0,1); @@ -1094,15 +1133,15 @@ For example, compare 2 surfaces: @end verbatim @c ------------------------------------------------------------------ -@node Management of the point cutting, Vector field visualization, Changing of the color range, Hints -@subsection Management of the point cutting +@node Management of a point cutting, Vector field visualization, Changing of the color range, Hints +@subsection Management of a point cutting Sometimes an experimental or numerical surface has outstanding points. Visualization of such surface will lead to the hole(s) in place of such points. The standard method of ``fighting'' -- to change data values -- is not always good and is not so convenient. MathGL library has another method -- to set variable @code{Cut=false}. As a consequence, all outstanding points will be projected on the bounding box. Such method is good not only for outstanding points but also for the case when one need to plane the bottom or the top of the plot. Exactly such case is demonstrated in the code: @verbatim mglData a(20,30); // create some data - a.a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); + a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); // set lower border above the data minimal value Axis(mglPoint(-1,-1,0),mglPoint(1,1,1)); Cut = false; // set off cutting flag @@ -1111,7 +1150,7 @@ Such method is good not only for outstanding points but also for the case when o It is an interesting result, is not it? @c ------------------------------------------------------------------ -@node Vector field visualization, Several light sources, Management of the point cutting, Hints +@node Vector field visualization, Several light sources, Management of a point cutting, Hints @subsection Vector field visualization Vector field visualization (especially in 3d case @code{Vect3} or @code{VectC}) may look tangly -- there are too many overlapping lines. I may suggest 2 ways to solve this problem. The first one is to change @code{MeshNum} for decreasing the number of hachures. The second way is to use the flow thread chart @code{Flow}. Unfortunately, I don't know any other methods to visualize 3d vector field. If you know any, e-mail me and I shall add it to MatGL. @@ -1263,7 +1302,7 @@ You may use following code for obtaining the same solution as in previous exampl @c ------------------------------------------------------------------ -@node MGL parser using, , PDE solving hints, Hints +@node MGL parser using, Stereo image, PDE solving hints, Hints @subsection MGL parser using Sometimes you may prefer to use MGL scripts in yours code. It is simpler (especially in comparison with C/Fortran interfaces) and fast way to plot the data with annotations, labels and so on. Class @code{mglParse} (@pxref{mglParse class} parse MGL scripts in C++. It have also the corresponding interface for C/Fortran. @@ -1303,3 +1342,19 @@ The code in C/Fortran looks practically the same: mgl_parse_text(gr, parser, "for $0 -1 1 0.1\nline 0 0 -1 $0 'r'\nnext"); mgl_write_png(gr, "test.png", ""); // don't forgot to save picture @end verbatim + +@c ------------------------------------------------------------------ +@node Stereo image, , MGL parser using, Hints +@subsection Stereo image + +One can easily create stereo image in MathGL. Stereo image can be produced by making two subplots with slightly different rotation angles. The corresponding code looks like this (@pxref{Stereo image sample}): +@verbatim + gr->SubPlot(2,1,0); // left image + gr->Rotate(40,60+3); + // draw something here + + gr->SubPlot(2,1,1); // right image + gr->Rotate(40,60-3); + // draw the same here +@end verbatim + diff --git a/texinfo/filter.py b/texinfo/filter.py new file mode 100755 index 0000000..ad255fc --- /dev/null +++ b/texinfo/filter.py @@ -0,0 +1,23 @@ +#!/usr/bin/python + +import os,string,re,glob + +print 'Tuning resulting html files for Qt\n' + +beginskip=0 +for filename in glob.glob('./*ru.html/*html'): + fpin=open(filename,'r') + fpout=open(filename+'.tmp','w') + for line in fpin.readlines(): + if re.search('',line): + beginskip=1 + fpout.write(line) + continue + if re.search('',line): beginskip=0 + if re.search('',line): continue + if re.search('’s convenience. One needs to specify only one data array in the ``simplified'' form in order to see the result. But one may set parametric dependence of coordinates and produce rather complex curves and surfaces in the ``advanced'' form. In both cases the order of function arguments is the same: first data arrays, second the string with plot parameters, and later optional arguments for plot tuning. +@item +@strong{All plots are vector plots.} The MathGL library is intended for handling scientific data which have vector nature (lines, faces, matrices and so on). As a result, vector representation is used in all cases! In addition, the vector representation allows one to scale the plot easily -- change the canvas size by a factor of 2, and the picture will be proportionally scaled. +@item +@strong{New drawing never clears things drawn already.} This, in some sense, unexpected, idea allows to create a lot of ``combined'' graphics. For example, to make a surface with contour lines one needs to call the function for surface plotting and the function for contour lines plotting (in any order). Thus the special functions for making this ``combined'' plots (as it is done in Matlab and some other plotting systems) are superfluous. Many more examples of such plots can be found in section @ref{Hints} and in home site (@uref{http://mathgl.sf.net/index.html}). +@end enumerate + +In addition to the general concepts I want to comment on some non-trivial or less commonly used general ideas -- plot positioning, axis specification and curvilinear coordinates, styles for lines, text and color scheme. + +@menu +* Coordinate axes:: +* Line styles:: +* Color scheme:: +* Font styles:: +* Textual formulas:: +@end menu + +@include concept_en.texi + +@node Graphics setup @MGL{}, Axis settings @MGL{}, General concepts, MGL interface +@end ifset +@ifclear UDAV + +@c ################################################################## +@node Graphics setup @MGL{}, Axis settings @MGL{}, , MGL interface +@end ifclear +@section Graphics setup @MGL{} + +Coomands in this group influences on overall graphics appearance. So all of them should be placed @emph{before} any actual plotting commands. + +@menu +* Transparency @MGL{}:: +* Lighting @MGL{}:: +* Fog @MGL{}:: +* Default sizes @MGL{}:: +* Zooming @MGL{}:: +* Cutting @MGL{}:: +* Other settings @MGL{}:: +@end menu + +@c ================================================================== +@node Transparency @MGL{}, Lighting @MGL{}, , Graphics setup @MGL{} +@subsection Transparency @MGL{} + +There are several commands for setup transparency. The general command is @ref{alpha} which switch on/off the transparency for overall plot. It influence only for graphics which created after @ref{alpha} call. Command @ref{alphadef} specify the default value of alpha-channel. You may switch off transparency of selected plot by command @ref{transparent}. Finally, command @ref{transptype} set the kind of transparency. @sref{Transparent surface sample} + +@cindex alpha +@anchor{alpha} +@deffn {MGL command} alpha @code{[val=on]} +Sets the transparency on/off. It is recommended to call this command before any plotting command. Default value is @code{off}. Use @code{transparent off} in particular plot to disable its transparency. +@end deffn +@cindex alphadef +@anchor{alphadef} +@deffn {MGL command} alphadef @code{val} +Default value of alpha channel (transparency) for all plotting commands. Initial value is 0.5. +@end deffn +@cindex transparent +@anchor{transparent} +@deffn {MGL command} transparent @code{val} +Temporary switches transparency on/off for the plot. +@end deffn +@cindex transptype +@anchor{transptype} +@deffn {MGL command} transptype @code{val} +This command set the transparency type. Normal transparency (@samp{0}) -- below things is less visible than upper ones. Glass-like transparency (@samp{1}) -- below and upper things are commutable and just decrease intensity of light by RGB channel. Lamp-like transparency (@samp{2}) -- below and upper things are commutable and are the source of some additional light. I recommend to set @code{alphadef 0.3} or less for lamp-like transparency. @xref{Normal transparency}, @ref{Glass-like transparency}, @ref{Lamp-like transparency}. +@end deffn + +@c ================================================================== +@node Lighting @MGL{}, Fog @MGL{}, Transparency @MGL{}, Graphics setup @MGL{} +@subsection Lighting @MGL{} + +There are several commands for setup lighting. The general command is @ref{light} which switch on/off the lighting for overall plot. Generally MathGL support up to 10 independent light sources. The position, color, brightness of each light source can be set separately. By default only one light source is active. It is source number @code{0} with white color, located at top of the plot. + +@cindex light +@anchor{light} +@deffn {MGL command} light @code{[val=on]} +Sets the using of light on/off for overall plot. It is recommended to call this command before any plotting command. Default value is lightning off. +@end deffn +@deffn {MGL command} light @code{num val} +Switch on/off @var{num}-th light source separately. +@end deffn + +@deffn {MGL command} light @code{num xpos ypos zpos} ['col'='w' @code{br=0.5}] +The command adds a light source with identification @var{num} at position @{@var{xpos}, @var{ypos}, @var{zpos}@}. The color of light is @var{col} (white by default). The brightness of light is @var{br} which must be in range [0,1]. +@end deffn + +@cindex ambient +@anchor{ambient} +@deffn {MGL command} ambient @code{val} +Sets the brightness of ambient light. The value should be in range [0,1]. Initial value is 0.5. +@end deffn + +@c ================================================================== +@node Fog @MGL{}, Default sizes @MGL{}, Lighting @MGL{}, Graphics setup @MGL{} +@subsection Fog @MGL{} + +@cindex fog +@anchor{fog} +@deffn {MGL command} fog @code{val [dz=0.25]} +Command imitate a fog in the plot. Fog start from relative distance @var{dz} from view point and its density growths exponentially in depth. So that the fog influence is determined by law ~@math{1-exp(-d*z)}. Here @emph{z} is normalized to 1 depth of the plot. If value @var{val}=@code{0} then the fog is absent. @sref{Surface in fog sample} +@end deffn + +@c ================================================================== +@node Default sizes @MGL{}, Zooming @MGL{}, Fog @MGL{}, Graphics setup @MGL{} +@subsection Default sizes @MGL{} + +These commands control the default (initial) values for most graphics parameters including sizes of markers, arrows, linewidth and so on. As any other settings these ones will influence only on plots created after the settings change. + +@cindex barwidth +@anchor{barwidth} +@deffn {MGL command} barwidth @code{val} +Sets relative width of rectangles in @code{bars, barh, boxplot}. Default value is @code{0.7}. +@end deffn + +@cindex marksize +@anchor{marksize} +@deffn {MGL command} marksize @code{val} +The size of marks. Default value is @code{1}. +@end deffn + +@cindex arrowsize +@anchor{arrowsize} +@deffn {MGL command} arrowsize @code{val} +The size of arrows for lines and curves. Default value is @code{1}. +@end deffn + +@cindex linewidth +@anchor{linewidth} +@deffn {MGL command} linewidth @code{val} +The variable define the base width for all lines. The value <1 is ignored. Increase of this variables is actual for large bitmap pictures. Default value is @code{1}. +@end deffn + +@cindex ticklen +@anchor{ticklen} +@deffn {MGL command} ticklen @code{val} [@code{stt=1}] +The relative length of axis ticks. Default value is @code{0.1}. Parameter @var{stt}>0 set relative length of subticks which is in @code{sqrt(1+stt)} times smaller. +@end deffn + +@cindex tickstl +@anchor{tickstl} +@deffn {MGL command} tickstl 'stl' ['sub'=''] +The line style of axis ticks (@var{stl}) and subticks (@var{sub}). If @var{stl}='' then default style is used (@samp{k} or @samp{w} depending on transparency type). If @var{sub}='' then ticks style is used (i.e. @var{stl}). +@end deffn + +@c ================================================================== +@node Zooming @MGL{}, Cutting @MGL{}, Default sizes @MGL{}, Graphics setup @MGL{} +@subsection Zooming @MGL{} + +These commands control the overall zooming of the picture or the sub-picture. Normally you can use these variables and commands for removing ``white'' spaces around a plot. + +@cindex plotfactor +@anchor{plotfactor} +@deffn {MGL command} plotfactor @code{val} +The factor of plot size. It is not recommended to set it lower then 1.6. This is some analogue of command @ref{zoom} but applied not to overall image but for each @ref{inplot}. Use negative value to enable automatic @ref{plotfactor} selection. +@end deffn + +@cindex zoom +@anchor{zoom} +@deffn {MGL command} zoom @code{x1 y1 x2 y2} +The command changes the scale of graphics that correspond to zoom in/out of the picture. After command call the current plot will be cleared and further the picture will contain plotting from its part [x1,x2]*[y1,y2]. Here picture coordinates @var{x1}, @var{x2}, @var{y1}, @var{y2} changes from 0 to 1. Use @code{zoom 0 0 1 1} to return default view. +@end deffn + +@c ================================================================== +@node Cutting @MGL{}, Other settings @MGL{}, Zooming @MGL{}, Graphics setup @MGL{} +@subsection Cutting @MGL{} + +These commands set the condition when the points are excluded (cutted) from the drawing. Note, that a point with @code{nan} value(s) of coordinate or amplitude will be automatically excluded from the drawing. + +@cindex cut +@anchor{cut} +@deffn {MGL command} cut @code{val} +Determines how points outside bounding box are drawn. If it is @code{on} then points are excluded from plot (it is default) otherwise the points are projected to edges of bounding box. +@end deffn + +@deffn {MGL command} cut @code{x1 y1 z1 x2 y2 z2} +Lower and upper edge of the box in which never points are drawn. If both edges are the same (the variables are equal) then the cutting box is empty. @sref{CutMinMax sample} +@end deffn + +@deffn {MGL command} cut 'cond' +Command set the cutting off condition by formula @var{cond}. This condition determine will point be plotted or not. If value of formula is nonzero then point is omitted, otherwise it plotted. Set argument as @code{''} to disable cutting off condition. @sref{CutOff sample} +@end deffn + +@c ================================================================== +@node Other settings @MGL{}, , Cutting @MGL{}, Graphics setup @MGL{} +@subsection Other settings @MGL{} + +@cindex font +@anchor{font} +@deffn {MGL command} font 'fnt' [@code{val=6}] +Font style for text and labels (see text). Initial style is 'fnt'='rC' give Roman font with centering. Parameter @code{val} sets the size of font for tick and axis labels. Default font size of axis labels is 1.4 times large than for tick labels. For more detail, @pxref{Font styles}. +@end deffn + +@cindex rotatetext +@anchor{rotatetext} +@deffn {MGL command} rotatetext @code{val} +Set to use or not text rotation along axis. Initial value is @code{on}. +@end deffn + +@cindex palette +@anchor{palette} +@deffn {MGL command} palette 'colors' +Set the palette as selected colors. Default value is @code{'Hbgrcmyhlnqeup'}. The palette is used mostly in 1D plots for curves which styles are not specified. +@end deffn + +@cindex meshnum +@anchor{meshnum} +@deffn {MGL command} meshnum @code{num} +Sets approximate number of lines in @ref{mesh}, @ref{fall}, @ref{grid} and also the number of hachures in @ref{vect}, @ref{vectc}, @ref{dew} and the number of cells in @ref{cloud}. By default (=0) it draws all lines/hachures/cells. +@end deffn + +@cindex axialdir +@anchor{axialdir} +@deffn {MGL command} axialdir 'dir' +Set direction around which curve rotated in @ref{axial}, @ref{torus}. Default value is 'z'. +@end deffn + +@c ================================================================== +@node Axis settings @MGL{}, Transformation matrix @MGL{}, Graphics setup @MGL{}, MGL interface +@section Axis settings @MGL{} + +These large set of commands control how the axis and ticks will be drawn. Note that there is 3-step transformation of data coordinates are performed. Firstly, coordinates are projected and cutting is applied (@pxref{Cutting @MGL{}}), after it transformation formulas are applied, and finally the data was normalized in bounding box. + +@cindex axis +@anchor{axis} +@deffn {MGL command} axis @code{x1 y1 x2 y2} +@deffnx {MGL command} axis @code{x1 y1 z1 x2 y2 z2} +@cindex ranges +@anchor{ranges} +@deffnx {MGL command} ranges @code{x1 x2 y1 y2 [z1=0 z2=0]} +Sets the ranges of coordinates changing. Also it sets the range for coloring (analogous to @code{caxis z1 z2}). Initial ranges are [-1, 1]. +@end deffn + +@deffn {MGL command} axis 'fx' 'fy' ['fz'='' 'fa'=''] +Sets the transformation formulas for curvilinear coordinates. Each string should contain mathematical expression for real coordinate depending on internal coordinates @samp{x}, @samp{y}, @samp{z} and @samp{a} or @samp{c} for colorbar. For example, the cylindrical coordinates are introduced as @code{axis 'x*cos(y)' 'x*sin(y)' 'z'}. For removing of formulas the corresponding parameter should be @code{''}. The using of transformation formulas will slightly slowing the program, i.e. @code{axis '' '' ''} is faster than @code{axis '1*x' '1*y' '1*z'}. Initially all formulas are absent (Cartesian coordinates are used). For more details about functions and formulas, @pxref{Textual formulas}. +@end deffn + +@deffn {MGL command} axis @code{how} +Sets one of the predefined transformation formulas for curvilinear coordinate. Paramater @var{how} define the coordinates: @samp{0} -- Cartesian coordinates (no transformation); @samp{1} -- Polar coordiantes @math{x_n=x*cos(y),y_n=x*sin(y), z_n=z}; @samp{2} -- Spherical coordinates @math{x_n=x*sin(y)*cos(z), y_n=x*sin(y)*sin(z), z_n=x*cos(y)}; @samp{3} -- Parabolic coordinates @math{x_n=x*y, y_n=(x*x-y*y)/2, z_n=z}; @samp{4} -- Paraboloidal coordinates @math{x_n=(x*x-y*y)*cos(z)/2, y_n=(x*x-y*y)*sin(z)/2, z_n=x*y}; @samp{5} -- Oblate coordinates @math{x_n=cosh(x)*cos(y)*cos(z), y_n=cosh(x)*cos(y)*sin(z), z_n=sinh(x)*sin(y)}; @samp{6} -- Prolate coordinates @math{x_n=sinh(x)*sin(y)*cos(z), y_n=sinh(x)*sin(y)*sin(z), z_n=cosh(x)*cos(y)}; @samp{7} -- Elliptic coordinates @math{x_n=cosh(x)*cos(y), y_n=sinh(x)*sin(y), z_n=z}; @samp{8} -- Toroidal coordinates @math{x_n=sinh(x)*cos(z)/(cosh(x)-cos(y)), y_n=sinh(x)*sin(z)/(cosh(x)-cos(y)), z_n=sin(y)/(cosh(x)-cos(y))}; @samp{9} -- Bispherical coordinates @math{x_n=sin(y)*cos(z)/(cosh(x)-cos(y)), y_n=sin(y)*sin(z)/(cosh(x)-cos(y)), z_n=sinh(x)/(cosh(x)-cos(y))}; @samp{10} -- Bipolar coordinates @math{x_n=sinh(x)/(cosh(x)-cos(y)), y_n=sin(y)/(cosh(x)-cos(y)), z_n=z}. +@end deffn + +@cindex caxis +@anchor{caxis} +@deffn {MGL command} caxis @code{z1 z2} +Sets the range for surface coloring. Initial range is [-1, 1]. +@end deffn + +@cindex origin +@anchor{origin} +@deffn {MGL command} origin @code{x0 y0 [z0=nan]} +Center of axis cross section. If one of values is @code{nan} then MathGL library try to select optimal axis position. +@end deffn + +@cindex ternary +@anchor{ternary} +@deffn {MGL command} ternary @code{val} +The command sets to draws Ternary plot. This special plot is for 3 dependent coordinates (components) @var{a}, @var{b}, @var{c} so that @var{a}+@var{b}+@var{c}=1. MathGL uses only 2 independent coordinates @var{a}=x and @var{b}=y since it is enough to plot everything. At this third coordinate z act as another parameter to produce contour lines, surfaces and so on. @sref{Ternary plot sample} +@end deffn + +@cindex xrange +@anchor{xrange} +@deffn {MGL command} xrange dat [@code{add=off fact=0}] +@cindex yrange +@anchor{yrange} +@deffnx {MGL command} yrange dat [@code{add=off fact=0}] +@cindex zrange +@anchor{zrange} +@deffnx {MGL command} zrange dat [@code{add=off fact=0}] +@cindex crange +@anchor{crange} +@deffnx {MGL command} crange dat [@code{add=off fact=0}] +Sets the range for x-,y-,z- coordinate or coloring as minimal and maximal values of data @var{dat}. Parameter @code{add=on} shows that the new range will be joined to existed one (nut will not replace it). Parameter @var{fact} add additional range increase on value (@var{Max}-@var{Min})*@var{fact}. +@end deffn + +@deffn {MGL command} xrange @code{x1 x2} +@deffnx {MGL command} yrange @code{x1 x2} +@deffnx {MGL command} zrange @code{x1 x2} +@deffnx {MGL command} crange @code{x1 x2} +Sets the range for x-,y-,z- coordinate or coloring. See also @ref{axis}. +@end deffn + +@cindex xtick +@anchor{xtick} +@deffn {MGL command} xtick @code{val [sub=0 org=nan]} +@cindex ytick +@anchor{ytick} +@deffnx {MGL command} ytick @code{val [sub=0 org=nan]} +@cindex ztick +@anchor{ztick} +@deffnx {MGL command} ztick @code{val [sub=0 org=nan]} +@cindex ctick +@anchor{ctick} +@deffnx {MGL command} ctick @code{val} +Sets step for x-, y-, z-axis ticks or colorbar ticks (if @var{val}>0) or it's number (if @var{val}<0) in corresponding direction. Zero value @var{val}=0 sets logarithmic ticks. Parameter @var{sub} sets the number of sub-ticks. Parameter @var{org} set the starting points for ticks. If not @code{org=nan} then the value from @ref{origin} is used. +@end deffn + +@deffn {MGL command} xtick 'templ' +@deffnx {MGL command} ytick 'templ' +@deffnx {MGL command} ztick 'templ' +@deffnx {MGL command} ctick 'templ' +Sets the template for x-, y-, z-axis ticks or colorbar ticks. It may contain TeX symbols also. If @var{templ}=@code{''} then default template is used (in simplest case it is @samp{%.2g}) with automatic detaching of common multiplier or common component. +@end deffn + +@deffn {MGL command} xtick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...] +@deffnx {MGL command} ytick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...] +@deffnx {MGL command} ztick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...] +Sets manual positions @var{val1},@var{val2},... and labels @var{lbl1},@var{lbl2},... for ticks along x-, y-, z-axis. Labels may contain TeX symbols also. +@end deffn + +@cindex adjust +@anchor{adjust} +@deffn {MGL command} adjust ['dir'='xyzc'] +Set the ticks step, number of sub-ticks and initial ticks position to be the most human readable for the axis along direction(s) @var{dir}. +@end deffn + + +@c ################################################################## +@node Transformation matrix @MGL{}, Export to file @MGL{}, Axis settings @MGL{}, MGL interface +@section Transformation matrix @MGL{} + +These commands control how and where further plotting will be placed. There is a curtain order of calling of these commands for the better plot view. First one should be @ref{subplot} or @ref{inplot} for specifying the place. After it a @ref{rotate} and @ref{aspect}. And finally any other plotting commands may be called. Alternatevely you can use @ref{columnplot} for position plots in the column one by another without gap between plot axis (bounding boxes). + +@cindex subplot +@anchor{subplot} +@deffn {MGL command} subplot @code{nx ny m [dx=0 dy=0]} +Puts further plotting in a @var{m}-th cell of @var{nx}*@var{ny} grid of the whole frame area. This command set off any aspects or rotations. So it should be used first for creating the subplot. From the aesthetical point of view it is not recommended to use this command with different matrices in the same frame. The position of the cell can be shifted from its default position by relative size @var{dx}, @var{dy}. +@end deffn + +@deffn {MGL command} subplot @code{nx ny m} 'style' +The same as previous but space reserved for axis/colorbar is saved only if @var{style} contain: @samp{L} or @samp{<} -- at left side, @samp{R} or @samp{>} -- at right side, @samp{A} or @samp{^} -- at top side, @samp{U} or @samp{_} -- at bottom side. +@end deffn + +@cindex inplot +@anchor{inplot} +@deffn {MGL command} inplot @code{x1 x2 y1 y2 [rel=off]} +Puts further plotting in some region of the whole frame surface. This command allows one to create a plot in arbitrary place of the screen. The position is defined by rectangular coordinates [@var{x1}, @var{x2}]*[@var{y1}, @var{y2}]. The coordinates @var{x1}, @var{x2}, @var{y1}, @var{y2} are normalized to interval [0, 1]. If parameter @var{rel}=@code{on} then the relative position to current @ref{subplot} is used. This command set off any aspects or rotations. So it should be used first for creating subplot. +@end deffn + +@cindex columnplot +@anchor{columnplot} +@deffn {MGL command} columnplot @code{num ind [d=0]} +Puts further plotting in @var{ind}-th cell of column with @var{num} cells. The position is relative to previous @ref{subplot} call (or @ref{inplot} with @code{rel=off}). Parameter @var{d} set extra gap between cells. +@end deffn + +@cindex stickplot +@anchor{stickplot} +@deffn {MGL command} stickplot @code{num ind tet phi} +Puts further plotting in @var{ind}-th cell of stick with @var{num} cells. At this, stick is rotated on angles @var{tet}, @var{phi}. The position is relative to previous @ref{subplot} call (or @ref{inplot} with @code{rel=off}). +@end deffn + +@cindex rotate +@anchor{rotate} +@deffn {MGL command} rotate @code{tetz tetx [tety=0]} +Rotates a further plotting relative to each axis (x, z, y) consecutively on angles @var{tetx}, @var{tetz}, @var{tety}. +@end deffn + +@deffn {MGL command} rotate @code{tet x y z} +Rotates a further plotting around vector @{x,y,z@} on angle @var{tet}. +@end deffn + +@cindex aspect +@anchor{aspect} +@deffn {MGL command} aspect @code{ax ay [az=1]} +Defines aspect ratio for the plot. The viewable axes will be related one to another as the ratio @var{ax:ay:az}. For the best effect it should be used after @ref{rotate} command. +@end deffn + +@cindex perspective +@anchor{perspective} +@deffn {MGL command} perspective @code{val} +Add (switch on) the perspective to plot. The parameter @math{val ~ 1/z_@{eff@} \in [0,1)}. By default (@code{val=0}) the perspective is off. +@end deffn + +@c ################################################################## +@node Export to file @MGL{}, Primitives drawing @MGL{}, Transformation matrix @MGL{}, MGL interface +@section Export to file @MGL{} + +@cindex write +@anchor{write} +@deffn {MGL command} write 'fname' [@code{solid=off}] +Exports current picture/frame to file 'fname' (file type is determined by extension). Solid (usually white) background will be used if @code{solid=on}. If 'fname'='' then the file @samp{frameNNNN.jpg} is used, where @samp{NNNN} is current frame id. +@end deffn + +@cindex setsize +@anchor{setsize} +@deffn {MGL command} setsize @code{w h} +Sets size of picture in pixels. This function call @strong{must be} placed before any plotting command because it completely remove picture content. In some program the call of this function is forbidden. +@end deffn + + +@c ################################################################## +@node Primitives drawing @MGL{}, Text printing @MGL{}, Export to file @MGL{}, MGL interface +@section Primitives drawing + +These commands draw some simple objects like line, point, sphere, drop, cone and so on. + +@cindex clf +@anchor{clf} +@deffn {MGL command} clf +Clear the picture by removes all drawing from it. Does not change transformation matrix. +@end deffn + +@cindex ball +@anchor{ball} +@deffn {MGL command} ball @code{x y} ['col'='r'] +@deffnx {MGL command} ball @code{x y z} ['col'='r'] +Draws a point (ball) at position @{@var{x}, @var{y}, @var{z}@} with color defined by string @var{col}. +@end deffn + +@cindex line +@anchor{line} +@deffn {MGL command} line @code{x1 y1 x2 y2} ['stl'=''] +@deffnx {MGL command} line @code{x1 y1 z1 x2 y2 z2} ['stl'=''] +Draws a geodesic line (straight line in Cartesian coordinates) from point @{@var{x1},@var{y1},@var{z1}@} to @{@var{x2},@var{y2},@var{z2}@} using line style @var{stl}. +@end deffn + +@cindex curve +@anchor{curve} +@deffn {MGL command} curve @code{x1 y1 dx1 dy1 x2 y2 dx2 dy2} ['stl'=''] +@deffnx {MGL command} curve @code{x1 y1 z1 dx1 dy1 dz1 x2 y2 z2 dx2 dy2 dz2} ['stl'=''] +Draws Bezier-like curve from point @{@var{x1},@var{y1},@var{z1}@} to @{@var{x2},@var{y2},@var{z2}@} using line style @var{stl}. At this tangent is co-directed with @{@var{dx1},@var{dy1},@var{dz1}@}, @{@var{dx2},@var{dy2},@var{dz2}@} and proportional to its amplitude. +@end deffn + +@cindex facex +@anchor{facex} +@deffn {MGL command} facex @code{x0 y0 z0 wy wz} ['stl'='' @code{d1=0 d2=0}] +@cindex facey +@anchor{facey} +@deffnx {MGL command} facey @code{x0 y0 z0 wx wz} ['stl'='' @code{d1=0 d2=0}] +@cindex facez +@anchor{facez} +@deffnx {MGL command} facez @code{x0 y0 z0 wx wy} ['stl'='' @code{d1=0 d2=0}] +Draws the solid rectangle (face) perpendicular to [x,y,z]-axis correspondingly at position @{@var{x0}, @var{y0}, @var{z0}@} with color @var{stl} and with widths @var{wx}, @var{wy}, @var{wz} along corresponding directions. At this colors can be the same for all vertexes or different if all 4 colors are specified for each vertex. Parameters @var{d1}!=0, @var{d2}!=0 set additional shift of the last vertex (i.e. to draw quadrangle). +@end deffn + +@cindex sphere +@anchor{sphere} +@deffn {MGL command} sphere @code{x0 y0 r} ['col'='r'] +@deffnx {MGL command} sphere @code{x0 y0 z0 r} ['col'='r'] +Draw the sphere with radius @var{r} and center at point @{@var{x0}, @var{y0}, @var{z0}@} and color @var{stl}. +@end deffn + +@cindex drop +@anchor{drop} +@deffn {MGL command} drop @code{x0 y0 dx dy r} ['col'='b' @code{sh=1 asp=1}] +@deffnx {MGL command} drop @code{x0 y0 z0 dx dy dz r} ['col'='b' @code{sh=1 asp=1}] +Draw the drop with radius @var{r} at point @{@var{x0},@var{y0},@var{z0}@} elongated in direction @{@var{dx},@var{dy},@var{dz}@} and with color @var{col}. Parameter @var{sh} set the degree of drop oblongness: @samp{0} is sphere, @samp{1} is maximally oblongness drop. Parameter @var{asp} set relative width of the drop (this is analogue of ``ellipticity'' for the sphere). @sref{Drops sample} +@end deffn + +@cindex cone +@anchor{cone} +@deffn {MGL command} cone @code{x1 y1 z1 x2 y2 z2 r1} [@code{r2=-1} 'stl'='' @code{edge=off}] +Draw tube (or truncated cone if @var{edge}=@code{off}) between points @{@var{x1},@var{y1},@var{z1}@}, @{@var{x2},@var{y2},@var{z2}@} with radiuses at the edges @var{r1}, @var{r2}. If @var{r2}<0 then it is supposed that @var{r2}=@var{r1}. The cone color is defined by string @var{stl}. +@end deffn + +@cindex rect +@anchor{rect} +@deffn {MGL command} rect @code{x1 y1 x2 y2} ['st'=''] +@deffnx {MGL command} rect @code{x1 y1 z1 x2 y2 z2} ['st'=''] +Draw rectangle from point @{@var{x1},@var{y1},@var{z1}@} to point @{@var{x2},@var{y2},@var{z2}@} using colors @var{stl}. If @var{stl} have 4 or more colors then it defines colors for each rectangle vertex (useful for making gradients, like @samp{wwrr}) else first color is used for whole rectangle. +@end deffn + +@c ################################################################## +@node Text printing @MGL{}, Axis and Colorbar @MGL{}, Primitives drawing @MGL{}, MGL interface +@section Text printing @MGL{} + +These commands draw the text. There are commands for drawing text in arbitrary place, in arbitrary direction and along arbitrary curve. It is possible to use arbitrary font-faces and parse many TeX commands. The Unicode text is supported. So sometimes you need to specify locale. The @code{size} argument control the size of text: if positive it give the value, if negative it give the value relative to defined by @code{font} command. @xref{Font styles}. + +@cindex text +@anchor{text} +@deffn {MGL command} text @code{x y} 'text' ['fnt'='' @code{size=-1.4}] +@deffnx {MGL command} text @code{x y z} 'text' ['fnt'='' @code{size=-1.4}] +Draws unrotated text string @var{text} at position @{@var{x},@var{y},@var{z}@} with specified style @var{fnt} and @var{size}. By default parameters from @code{font} command are used. +@end deffn + +@deffn {MGL command} text @code{x y dx dy} 'text' [@code{size=-1.4}] +@deffnx {MGL command} text @code{x y z dx dy dz} 'text' [@code{size=-1.4}] +The command plots the string @var{text} at position @{@var{x},@var{y},@var{z}@} along direction @{@var{dx},@var{dy},@var{dz}@} with specified style @var{fnt} and @var{size}. By default parameters from @code{font} command are used. +@end deffn + +@deffn {MGL command} text ydat 'text' ['fnt'='' @code{size=-1 zval=nan}] +@deffnx {MGL command} text xdat ydat 'text' ['fnt'='' @code{size=-1 zval=nan}] +@deffnx {MGL command} text xdat ydat zdat 'text' ['fnt'='' @code{size=-1}] +The command draws @var{text} along the curve between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} by font style @var{fnt} and with size @var{size}. The string @var{fnt} may contain symbols @samp{t} for printing the text under the curve (default), or @samp{T} for printing the text above the curve. The sizes of 1st dimension must be equal for all arrays @var{xdat.nx=ydat.nx=zdat.nx}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{z}[i] = @var{zval} is used. @sref{Text sample} +@end deffn + +@cindex title +@anchor{title} +@deffn {MGL command} title 'text' ['fnt'='' @code{size=-2}] +Print string @var{text} as title of the picture (at the top of the picture). Can be used at any place (even inside @ref{subplot}). +@end deffn + +@cindex fgets +@anchor{fgets} +@deffn {MGL command} fgets @code{x y} 'fname' [@code{n=0} 'fnt'='' @code{size=-1.4}] +@deffnx {MGL command} fgets @code{x y z} 'fname' [@code{n=0} 'fnt'='' @code{size=-1.4}] +Draws unrotated @var{n}-th line of file @var{fname} at position @{@var{x},@var{y},@var{z}@} with specified @var{size}. By default parameters from @ref{font} command are used. +@end deffn + + +@c ################################################################## +@node Axis and Colorbar @MGL{}, Legend @MGL{}, Text printing @MGL{}, MGL interface +@section Axis and Colorbar @MGL{} + +These commands draw the ``things for measuring'', like axis with ticks, colorbar with ticks, grid along axis, bounding box and labels for axis. For more information @pxref{Axis settings @MGL{}}. + +@cindex axis +@c @anchor{} +@deffn {MGL command} axis ['dir'='xyz' @code{adjust=off}] +Draws axes with ticks (@pxref{Axis settings @MGL{}}) in directions determined by string parameter @var{dir}.If string contain the symbol @samp{_} then tick labels are not printed. Font for ticks labels is determined by command @ref{font}. Ticks will be automatically adjusted if @var{adjust}=@code{on} (by call of @code{adjust 'dir'}). +@end deffn + +@cindex colorbar +@anchor{colorbar} +@deffn {MGL command} colorbar ['sch'='' @code{pos=0}] +Draws colorbar with color scheme @var{sch} (current scheme if @code{sch=''}) at edge of plot. Parameter @var{pos} specifies the position of colorbar: @samp{0} - at right (default), @samp{1} - at left, @samp{2} - at top, @samp{3} - at bottom. If string @var{sch} contains @samp{<>^_} then the parameter @var{pos} is defined as: @code{pos=0} for @samp{>} (right), @code{pos=1} for @samp{<} (left), @code{pos=2} for @samp{^} (top), @code{pos=3} for @samp{_} (bottom). If string have @samp{A} then absolute (relative to picture) coordinates is used. @sref{Dens sample} +@end deffn + +@deffn {MGL command} colorbar vdat ['sch'='' @code{pos=0}] +The same as previous but with sharp colors @var{sch} (current palette if @code{sch=""}) for values @var{v}. @sref{ContD sample} +@end deffn + +@deffn {MGL command} colorbar 'sch' @code{pos x y w h} +The same as first one but at arbitrary position of subplot @{@var{x}, @var{y}@} (supposed to be in range [0,1]). Parameters @var{w}, @var{h} set the relative width and height of the colorbar. +@end deffn + +@cindex grid +@anchor{grid} +@deffn {MGL command} grid ['dir'='xyz' 'pen'='B'] +Draws grid lines perpendicular to direction determined by string parameter @var{dir}. The step of grid lines is the same as tick step for an @code{axis}. The style of lines is determined by @var{pen} parameter. +@end deffn + +@cindex box +@anchor{box} +@deffn {MGL command} box ['stl'='k' @code{ticks=on}] +Draws bounding box outside the plotting volume with line style 'stl'. If @code{ticks=on} then ticks are drawn with current axis setting. +@end deffn + +@cindex xlabel +@anchor{xlabel} +@deffn {MGL command} xlabel 'text' [@code{pos=0 size=-1.4 shift=0}] +@cindex ylabel +@anchor{ylabel} +@deffnx {MGL command} ylabel 'text' [@code{pos=0 size=-1.4 shift=0}] +@cindex zlabel +@anchor{zlabel} +@deffnx {MGL command} zlabel 'text' [@code{pos=0 size=-1.4 shift=0}] +@cindex tlabel +@anchor{tlabel} +@deffnx {MGL command} tlabel 'text' [@code{pos=0 size=-1.4 shift=0}] +Prints the label @var{text} for x-,y-,z-,t-axis (here @samp{t} is ``ternary'' axis @math{t=1-x-y}). The position of label is determined by @var{pos} parameter. If @var{pos}=0 then label is printed at the center of axis. If @var{pos}>0 then label is printed at the maximum of axis (default). If @var{pos}<0 then label is printed at the minimum of axis. The font size is 1.4 times larger than the one for ticks @code{font}. Parameter @code{shift} specify additional shifting of the label. @xref{Text printing @MGL{}}. +@end deffn + +@c ################################################################## +@node Legend @MGL{}, 1D plotting @MGL{}, Axis and Colorbar @MGL{}, MGL interface +@section Legend @MGL{} + +These commands draw legend to the graph (useful for @ref{1D plotting @MGL{}}). Legend entry is a pair of strings: one for style of the line, another one with description text (with included LaTeX parsing). The array of string are accumulated first to the internal arrays (by command @ref{addlegend}) and are plotted later. The position of the legend can be selected automatic or manually. Parameters @var{fnt} and @var{size} specify the font style and size. Parameter @var{llen} set the relative width of the line sample and the text indent (default value is 0.1). If line style string for entry is empty then the corresponding text is printed without indent. If string contains @samp{A} then legend coordinates set position in the picture. @sref{Legend sample} + +@cindex legend +@anchor{legend} +@deffn {MGL command} legend [@code{pos=3} 'fnt'='rL' @code{size=-1 llen=0.1}] +Draws legend of accumulated legend entries by font @var{fnt} with specified @var{size}. Parameter @var{pos} sets the position of the legend: @samp{0} is bottom left corner, @samp{1} is bottom right corner, @samp{2} is top left corner, @samp{3} is top right corner (is default). +@end deffn + +@deffn {MGL command} legend @code{x y} ['fnt'='rL' @code{size=-1 llen=0.1}] +Draws legend of accumulated legend entries by font @var{fnt} with @var{size}. Position of legend in the current subplot is determined by parameter @var{x}, @var{y} which supposed to be normalized to interval [0,1]. +@end deffn + +@cindex addlegend +@anchor{addlegend} +@deffn {MGL command} addlegend 'text' 'stl' +Adds string @var{text} to internal legend accumulator. The style of described line and mark is specified in string @var{stl} (@pxref{Line styles}). Maximal number of entries is 100. +@end deffn + +@cindex clearlegend +@anchor{clearlegend} +@deffn {MGL command} clearlegend +Clears saved legend strings. +@end deffn + +@cindex legendbox +@anchor{legendbox} +@deffn {MGL command} legendbox @code{val} +Switches on/off the drawing of a box near legend. By default, the box is drawn. +@end deffn + +@cindex legendmarks +@anchor{legendmarks} +@deffn {MGL command} legendmarks @code{val} +Set the number of marks in the legend. By default 1 mark is used. +@end deffn + +@c ################################################################## +@node 1D plotting @MGL{}, 2D plotting @MGL{}, Legend @MGL{}, MGL interface +@section 1D plotting @MGL{} + +These commands perform plotting of 1D data. 1D means that data depended from only 1 parameter like parametric curve @{x(i),y(i),z(i)@}, i=1...n. There are 5 generally different types of data representations: simple line plot (@ref{plot}), line plot with filling under it (@ref{area}), stairs plot (@ref{step}), bar plot (@ref{bars}, @ref{barh}) and vertical lines (@ref{stem}). Each type of plotting has similar interface. Most of plotting type has similar interface. There are 3D version and two 2D versions. One of last requires single array. The parameters of line and marks are specified by the string argument. If the string parameter is NULL then solid line with color from palette is used (@pxref{Line styles}). Also there are some special 1d plots having slightly different interface: surface of curve rotation (@ref{torus}), chart (@ref{chart}) and error boxes (@ref{error}), marks with variable size (@ref{mark}), tubes (@ref{tube}) and so on. @sref{1D plot sample} + +The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @var{xdat.nx=ydat.nx=zdat.nx}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). String @var{stl} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{stl=''}) solid line with color from palette is used (@pxref{Line styles}). + +@cindex plot +@anchor{plot} +@deffn {MGL command} plot ydat ['stl'='' @code{zval=nan}] +@deffnx {MGL command} plot xdat ydat ['stl'='' @code{zval=nan}] +@deffnx {MGL command} plot xdat ydat zdat ['stl'=''] +Draws continuous lines between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. See also @ref{area}, @ref{step}, @ref{stem}, @ref{tube}, @ref{mark}, @ref{error}, @ref{belt}, @ref{tens}. @sref{Plot sample} +@end deffn + + +@cindex radar +@anchor{radar} +@deffn {MGL command} radar adat ['stl'='' @code{r=-1}] +Draws radar chart which is continuous lines between points located on an radial lines (like plot in Polar coordinates). The plots are drawn for each row if one of the data is the matrix. Parameter @var{r} set the additional shift of data (i.e. the data @var{adat}+@var{r} is used instead of @var{adat}). If @code{r<0} then @code{r=max(0, -min(adat)}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{stl=""}) solid line with color from palette is used (@pxref{Line styles}). If @var{pen} containt @samp{#} symbol then "grid" (radial lines and circle for @var{r}) is drawn See also @ref{plot}. @sref{Radar sample} +@end deffn + +@cindex tens +@anchor{tens} +@deffn {MGL command} tens ydat cdat ['stl'='' @code{zval=nan}] +@deffnx {MGL command} tens xdat ydat cdat ['stl'='' @code{zval=nan}] +@deffnx {MGL command} tens xdat ydat zdat cdat ['stl'=''] +Draws continuous lines between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} with color defined by @var{cdat}[i] (look like tension plot). See also @ref{plot}, @ref{mesh}, @ref{fall}. @sref{Tens sample} +@end deffn + +@cindex area +@anchor{area} +@deffn {MGL command} area ydat ['stl'='' @code{zval=nan}] +@deffnx {MGL command} area xdat ydat ['stl'='' @code{zval=nan}] +@deffnx {MGL command} area xdat ydat zdat ['stl'=''] +Draws continuous lines between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} and fills it down to axis (to axis plane in 3D). You can use gradient filling if number of specified colors is equal to 2*number of curves. If string contain symbol @samp{a} then lines are drawn one above another (like summation). See also @ref{plot}, @ref{bars}, @ref{stem}, @ref{region}. @sref{Area sample} +@end deffn + +@cindex region +@anchor{region} +@deffn {MGL command} region fdat gdat ['stl'='' @code{inside=off}] +@deffnx {MGL command} region xdat fdat gdat ['stl'='' @code{inside=off}] +Fills area between curves @{@var{xdat}[i], @var{fdat}[i]@} and @{@var{xdat}[i], @var{gdat}[i]@}. Parameter @code{inside=off} set to fill are with y1adat (minimum, lower quartile (Q1), median (Q2), upper quartile (Q3) and maximum) along second (j-th) direction. See also @ref{plot}, @ref{error}, @ref{bars}. @sref{BoxPlot sample} +@end deffn + +@c ################################################################## +@node 2D plotting @MGL{}, 3D plotting @MGL{}, 1D plotting @MGL{}, MGL interface +@section 2D plotting @MGL{} + +These commands perform plotting of 2D data. 2D means that data depend from 2 independent parameters like matrix @math{f(x_i,y_j), i=1...n, j=1...m}. There are 6 generally different types of data representations: simple mesh lines plot (@ref{mesh}), surface plot (@ref{surf}), surface plot by boxes (@ref{boxs}), surface plot by tiles (@ref{tile}), waterfall-like plot (@ref{fall}), belt plot (@ref{belt}), density plot (@ref{dens}), contour lines plot (@ref{cont}), solid contours plot (@ref{contf}) and its rotational figure (@ref{axial}). Commands @ref{cont}, @ref{contf} and @ref{axial} have variants for automatic and manual selection of level values for contours. Also there are commands for plotting data grid lines according to the data format (@ref{grid}) for enhancing density or contour plots. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. @sref{2D plot sample} + +String parameter @var{sch} sets the color scheme (@pxref{Color scheme}). Previous color scheme is used by default. The minor dimensions of arrays @var{xdat}, @var{ydat}, @var{zdat} should be equal @code{xdat.nx=zdat.nx && ydat.nx=zdat.ny} or @code{xdat.nx=ydat.nx=zdat.nx && xdat.ny=ydat.ny=zdat.ny}. Arrays @var{xdat} and @var{ydat} can be vectors (not matrices as @var{zdat}). If array @var{xdat}, @var{ydat} is not specified then its an automatic arrays are used with values equidistantly distributed along x, y. Graphics are plotted for each z-slice of the data. + +@cindex surf +@anchor{surf} +@deffn {MGL command} surf zdat ['sch'=''] +@deffnx {MGL command} surf xdat ydat zdat ['sch'=''] +Draws surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @ref{mesh}, @ref{dens}, @ref{belt}, @ref{tile}, @ref{boxs}, @ref{surfc}, @ref{surfa}. @sref{Surf sample} +@end deffn + +@cindex mesh +@anchor{mesh} +@deffn {MGL command} mesh zdat ['sch'=''] +@deffnx {MGL command} mesh xdat ydat zdat ['sch'=''] +Draws mesh lines for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @ref{surf}, @ref{fall}, @ref{meshnum}, @ref{cont}, @ref{tens}. @sref{Mesh sample} +@end deffn + +@cindex fall +@anchor{fall} +@deffn {MGL command} fall zdat ['sch'=''] +@deffnx {MGL command} fall xdat ydat zdat ['sch'=''] +Draws fall lines for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. If @var{sch} contain @samp{x} then lines are drawn along x-direction else (by default) lines are drawn along y-direction. See also @ref{belt}, @ref{mesh}, @ref{tens}, @ref{meshnum}. @sref{Fall sample} +@end deffn + +@cindex belt +@anchor{belt} +@deffn {MGL command} belt zdat ['sch'=''] +@deffnx {MGL command} belt xdat ydat zdat ['sch'=''] +Draws belts for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. If @var{sch} contain @samp{x} then belts are drawn along x-direction else (by default) lines are drawn along y-direction. See also @ref{fall}, @ref{surf}, @ref{plot}, @ref{meshnum}. @sref{Belt sample} +@end deffn + +@cindex boxs +@anchor{boxs} +@deffn {MGL command} boxs zdat ['sch'=''] +@deffnx {MGL command} boxs xdat ydat zdat ['sch'=''] +Draws vertical boxes for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @ref{surf}, @ref{dens}, @ref{tile}, @ref{step}. @sref{Boxs sample} +@end deffn + +@cindex tile +@anchor{tile} +@deffn {MGL command} tile zdat ['sch'=''] +@deffnx {MGL command} tile xdat ydat zdat ['sch'=''] +Draws horizontal tiles for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. Such plot can be used as 3d generalization of @ref{step}. See also @ref{surf}, @ref{boxs}, @ref{step}, @ref{tiles}. @sref{Tile sample} +@end deffn + +@cindex dens +@anchor{dens} +@deffn {MGL command} dens zdat ['sch'='' @code{zval=nan}] +@deffnx {MGL command} dens xdat ydat zdat ['sch'='' @code{zval=nan}] +Draws density plot for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal}. See also @ref{surf}, @ref{cont}, @ref{contf}, @ref{boxs}, @ref{tile}, @code{dens[xyz]}. @sref{Dens sample} +@end deffn + +@cindex cont +@anchor{cont} +@deffn {MGL command} cont vdat zdat ['sch'='' @code{zval=nan}] +@deffnx {MGL command} cont vdat xdat ydat zdat ['sch'='' @code{zval=nan}] +Draws contour lines for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal} (or for @var{z}=@var{vdat}[k] if @code{zval=nan}). Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k. If string @var{stl} contain 't' (or 'T') symbol then contour labels will be drawn below (or above) the contours. See also @ref{dens}, @ref{contf}, @ref{contd}, @ref{axial}, @code{cont[xyz]}. @sref{Cont sample} +@end deffn + +@deffn {MGL command} cont zdat ['sch'='' @code{num=7 zval=nan}] +@deffnx {MGL command} cont xdat ydat zdat ['sch'='' @code{num=7 zval=nan}] +The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}). +@end deffn + +@cindex contf +@anchor{contf} +@deffn {MGL command} contf vdat zdat ['sch'='' @code{zval=nan}] +@deffnx {MGL command} contf vdat xdat ydat zdat ['sch'='' @code{zval=nan}] +Draws solid (or filled) contours for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal} (or for @var{z}=@var{vdat}[k] if @code{zval=nan}). Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k (must be @code{vdat.nx>2}). See also @ref{dens}, @ref{cont}, @ref{contd}, @code{contf[xyz]}. @sref{ContF sample} +@end deffn + +@deffn {MGL command} contf zdat ['sch'='' @code{num=7 zval=nan}] +@deffnx {MGL command} contf xdat ydat zdat ['sch'='' @code{num=7 zval=nan}] +The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}). +@end deffn + +@cindex contd +@anchor{contd} +@deffn {MGL command} contd vdat zdat ['sch'='' @code{zval=nan}] +@deffnx {MGL command} contd vdat xdat ydat zdat ['sch'='' @code{zval=nan}] +Draws solid (or filled) contours for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal} (or for @var{z}=@var{vdat}[k] if @code{zval=nan}) with manual colors. Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k (must be @code{vdat.nx>2}). The color of k-th contour is @code{sch[k%strlen(sch)]}. See also @ref{dens}, @ref{cont}, @ref{contf}. @sref{ContD sample} +@end deffn + +@deffn {MGL command} contd zdat ['sch'='' @code{num=7 zval=nan}] +@deffnx {MGL command} contd xdat ydat zdat ['sch'='' @code{num=7 zval=nan}] +The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}). +@end deffn + +@cindex axial +@anchor{axial} +@deffn {MGL command} axial vdat zdat ['sch'=''] +@deffnx {MGL command} axial vdat xdat ydat zdat ['sch'=''] +Draws surface which is result of contour plot rotation surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k. If string @var{sch} have symbol @samp{#} then wire plot is produced. If string @var{sch} contain symbols @samp{x}, @samp{y} or @samp{z} then rotation axis @code{axialdir} will be set to specified direction. If string @var{sch} have symbol @samp{#} then wire plot is produced. See also @ref{cont}, @ref{contf}, @ref{torus}, @ref{surf3}. @sref{Axial sample} +@end deffn + +@deffn {MGL command} axial zdat ['sch'='' @code{num=3}] +@deffnx {MGL command} axial xdat ydat zdat ['sch'='' @code{num=3}] +The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}). +@end deffn + +@cindex grad +@anchor{grad} +@deffn {MGL command} grad pdat ['sch'='' @code{num=5 zval=nan}] +@deffnx {MGL command} grad xdat ydat pdat ['sch'='' @code{num=5 zval=nan}] +@deffnx {MGL command} grad xdat ydat zdat pdat ['sch'='' @code{num=5}] +Draws gradient lines for scalar field @var{pdat} specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j]@} or @{@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]@}. String @var{sch} sets the color scheme. Previous color scheme is used by default. Number of lines is proportional to @var{num}. If @var{num}<0 then lines start from borders only. See also @ref{dens}, @ref{cont}, @ref{dens3}, @ref{cont3}, @ref{flow}. @sref{Grad sample} +@end deffn + + +@cindex grid2 +@anchor{grid2} +@deffn {MGL command} grid2 zdat ['sch'='' @code{zval=nan}] +@deffnx {MGL command} grid2 xdat ydat zdat ['sch'='' @code{zval=nan}] +Draws grid lines for density plot of surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal}. See also @ref{dens}, @ref{cont}, @ref{contf}. +@end deffn + + +@c ################################################################## +@node 3D plotting @MGL{}, Dual plotting @MGL{}, 2D plotting @MGL{}, MGL interface +@section 3D plotting @MGL{} + +These commands perform plotting of 3D data. 3D means that data depend from 3 independent parameters like matrix @math{f(x_i,y_j,z_k), i=1...n, j=1...m, k=1...l}. There are 4 generally different types of data representations: isosurface or surface of constant value (@ref{surf3}), density plot at slices (Dens3), contour lines plot at slices (@ref{cont3}), solid contours plot at slices (@ref{contf3}) and cloud-like plot (@ref{cloud}). Commands @ref{surf3}, @ref{cont3} and @ref{contf3} have variants for automatic and manual selection of level values for surfaces/contours. Also there are commands for plotting data grid lines according to the data format (@ref{grid3}) for enhancing density or contour plots. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. @sref{3D plot sample} + +String paramter @var{sch} sets the color scheme (@pxref{Color scheme}). Previous color scheme is used by default. Arrays @var{x}, @var{y}, @var{z} can be vectors (not 3d arrays as @var{a}). If array @var{xdat}, @var{ydat}, @var{zdat} is not specified then its an automatic arrays are used with values equidistantly distributed along x, y, z. + + +@cindex surf3 +@anchor{surf3} +@deffn {MGL command} surf3 adat @code{val} ['sch'=''] +@deffnx {MGL command} surf3 xdat ydat zdat adat @code{val} ['sch'=''] +Draws isosurface plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) at @var{a}(x,y,z)=@var{val}. If string contain @samp{#} then wire plot is produced. See also @ref{cloud}, @ref{dens3}, @ref{surf3c}, @ref{surf3a}, @ref{axial}. @sref{Surf3 sample} +@end deffn + +@deffn {MGL command} surf3 adat ['sch'='' @code{num=5}] +@deffnx {MGL command} surf3 xdat ydat zdat adat ['sch'='' @code{num=5}] +Draws @var{num}-th uniformly distributed in color range (see @ref{caxis}) isosurfaces for 3d data specified parametrically. +@end deffn + +@cindex dens3 +@anchor{dens3} +@deffn {MGL command} dens3 adat 'dir' [@code{sval=-1} 'sch'=''] +@deffnx {MGL command} dens3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'=''] +Draws density plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Density is plotted at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. If string @var{stl} have symbol @samp{#} then grid lines are drawn. See also @ref{cont3}, @ref{contf3}, @ref{dens}, @ref{grid3}. @sref{Dens3 sample} +@end deffn + +@cindex densa +@anchor{densa} +@deffn {MGL command} densa adat ['sch'=''] +@deffnx {MGL command} densa xdat ydat zdat adat ['sch'=''] +Draws density plots at all central slices of the 3d data specified parametrically. +@end deffn + +@cindex cont3 +@anchor{cont3} +@deffn {MGL command} cont3 vdat adat 'dir' [@code{sval=-1} 'sch'=''] +@deffnx {MGL command} cont3 vdat xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'=''] +Draws contour plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Contours are plotted for values specified in array @var{vdat} at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. If string @var{stl} have symbol @samp{#} then grid lines are drawn. If string @var{stl} contain 't' (or 'T') symbol then contour labels will be drawn below (or above) the contours. See also @ref{dens3}, @ref{contf3}, @ref{cont}, @ref{grid3}. @sref{Cont3 sample} +@end deffn + +@deffn {MGL command} cont3 adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}] +@deffnx {MGL command} cont3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}] +The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see @code{caxis}). +@end deffn + +@cindex conta +@anchor{conta} +@deffn {MGL command} conta adat ['sch'='' @code{num=7}] +@deffnx {MGL command} conta xdat ydat zdat adat ['sch'='' @code{num=7}] +Draws contour plots at all central slices of the 3d data specified parametrically. +@end deffn + +@cindex contf3 +@anchor{contf3} +@deffn {MGL command} contf3 vdat adat 'dir' [@code{sval=-1} 'sch'=''] +@deffnx {MGL command} contf3 vdat xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'=''] +Draws solid contour plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Contours are plotted for values specified in array @var{vdat} at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. If string @var{stl} have symbol @samp{#} then grid lines are drawn. See also @ref{dens3}, @ref{cont3}, @ref{contf}, @ref{grid3}. @sref{ContF3 sample} +@end deffn + +@deffn {MGL command} contf3 adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}] +@deffnx {MGL command} contf3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}] +The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see @ref{caxis}). +@end deffn + +@cindex contfa +@anchor{contfa} +@deffn {MGL command} contfa adat ['sch'='' @code{num=7}] +@deffnx {MGL command} contfa xdat ydat zdat adat ['sch'='' @code{num=7}] +Draws solid contour plots at all central slices of the 3d data specified parametrically. +@end deffn + +@cindex grid3 +@anchor{grid3} +@deffn {MGL command} grid3 adat 'dir' [@code{sval=-1} 'sch'=''] +@deffnx {MGL command} grid3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'=''] +Draws grid for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Grid is plotted at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. See also @ref{cont3}, @ref{contf3}, @ref{dens3}, @ref{grid2}. @sref{Dens3 sample} +@end deffn + +@cindex grida +@anchor{grida} +@deffn {MGL command} grida adat ['sch'=''] +@deffnx {MGL command} grida xdat ydat zdat adat ['sch'=''] +Draws grids at all central slices of the 3d data specified parametrically. +@end deffn + +@cindex cloud +@anchor{cloud} +@deffn {MGL command} cloud adat ['sch'=''] +@deffnx {MGL command} cloud xdat ydat zdat adat ['sch'=''] +Draws cloud for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). This plot is a set of cubes with color and transparency proportional to value of @var{adat}. The resulting plot is like cloud -- low value is transparent but higher ones are not. The number of plotting cells depend on @ref{meshnum}. Paramater @var{alpha} changes the overall transparency of plot. See also @ref{surf3}. @sref{Cloud sample} +@end deffn + +@cindex beam +@anchor{beam} +@deffn {MGL command} beam tr g1 g2 adat @code{rval} ['sch'='' @code{flag=0 num=3}] +Draws @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d array @var{adat}. This is special kind of plot for @var{adat} specified in accompanied coordinates along curve @var{tr} with orts @var{g1}, @var{g2} and with transverse scale @var{rval}. Variable @var{flag} is bitwise: @samp{0x1} - draw in accompanied (not laboratory) coordinates; @samp{0x2} - draw projection to @math{\rho-z} plane; @samp{0x4} - draw normalized in each slice field. The x-size of data arrays @var{tr}, @var{g1}, @var{g2} must be nx>2. The y-size of data arrays @var{tr}, @var{g1}, @var{g2} and z-size of the data array @var{a} must be equal. See also @ref{surf3}. +@end deffn + + +@c ################################################################## +@node Dual plotting @MGL{}, Vector fields @MGL{}, 3D plotting @MGL{}, MGL interface +@section Dual plotting @MGL{} + +These plotting commands draw @emph{two matrix} simultaneously. There are 5 generally different types of data representations: surface or isosurface colored by other data (@ref{surfc}, @ref{surf3c}), surface or isosurface transpared by other data (@ref{surfa}, @ref{surf3a}), tiles with variable size (@ref{tiles}), mapping diagram (@ref{map}), STFA diagram (@ref{stfa}). Commands @ref{surf3a} and @ref{surf3c} have variants for automatic and manual selection of level values for isosurfaces. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. + +String paramter @var{sch} sets the color scheme (@pxref{Color scheme}). Previous color scheme is used by default. Arrays @var{x}, @var{y}, @var{z} can be vectors (not 3d arrays as @var{a}). If array @var{xdat}, @var{ydat}, @var{zdat} is not specified then its an automatic arrays are used with values equidistantly distributed along x, y, z. + +@cindex surfc +@anchor{surfc} +@deffn {MGL command} surfc zdat cdat ['sch'=''] +@deffnx {MGL command} surfc xdat ydat zdat cdat ['sch'=''] +Draws surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} and color it by matrix @var{cdat}[i,j]. See also @ref{surf}, @ref{surfa}, @ref{surf3c}. @sref{SurfC sample} +@end deffn + +@cindex surf3c +@anchor{surf3c} +@deffn {MGL command} surf3c adat cdat @code{val} ['sch'=''] +@deffnx {MGL command} surf3c xdat ydat zdat adat cdat @code{val} ['sch'=''] +Draws isosurface plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) at @var{a}(x,y,z)=@var{val}. It is mostly the same as @ref{surf3} command but the color of isosurface depends on values of array @var{cdat}. If string contain @samp{#} then wire plot is produced. See also @ref{surf3}, @ref{surfc}, @ref{surf3a}. @sref{Surf3C sample} +@end deffn + +@deffn {MGL command} surf3c adat cdat ['sch'='' @code{num=5}] +@deffnx {MGL command} surf3c xdat ydat zdat adat cdat ['sch'='' @code{num=5}] +Draws @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d data specified parametrically. +@end deffn + +@cindex surfa +@anchor{surfa} +@deffn {MGL command} surfa zdat cdat ['sch'=''] +@deffnx {MGL command} surfa xdat ydat zdat cdat ['sch'=''] +Draws surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} and transparent it by matrix @var{cdat}[i,j]. See also @ref{surf}, @ref{surfc}, @ref{surf3a}, @ref{tiles}. @sref{SurfA sample} +@end deffn + +@cindex surf3a +@anchor{surf3a} +@deffn {MGL command} surf3a adat cdat @code{val} ['sch'=''] +@deffnx {MGL command} surf3a xdat ydat zdat adat cdat @code{val} ['sch'=''] +Draws isosurface plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) at @var{a}(x,y,z)=@var{val}. It is mostly the same as @ref{surf3} command but the transparency of isosurface depends on values of array @var{cdat}. If string contain @samp{#} then wire plot is produced. See also @ref{surf3}, @ref{surfa}, @ref{surf3c}. @sref{Surf3A sample} +@end deffn + +@deffn {MGL command} surf3a adat cdat ['sch'='' @code{num=5}] +@deffnx {MGL command} surf3a xdat ydat zdat adat cdat ['sch'='' @code{num=5}] +Draws @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d data specified parametrically. +@end deffn + +@cindex tiles +@anchor{tiles} +@deffn {MGL command} tiles zdat rdat ['sch'=''] +@deffnx {MGL command} tiles xdat ydat zdat rdat ['sch'=''] +Draws horizontal tiles for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. It is mostly the same as @ref{tile} but the size of tiles is determined by @var{rdat} array. See also @ref{surfa}, @ref{tile}. @sref{TileS sample} +@end deffn + +@cindex map +@anchor{map} +@deffn {MGL command} map udat vdat ['sch'='' @code{pnts=on}] +@deffnx {MGL command} map xdat ydat udat vdat ['sch'='' @code{pnts=on}] +Draws mapping plot for matrixes @{@var{udat}, @var{vdat} @} which parametrically depend on coordinates @var{xdat}, @var{ydat}. The previous position of the cell (point) is marked by color. Height is proportional to Jacobian(udat,vdat). This plot is like Arnold diagram ???. If @code{pnts=off} then face is drawn otherwise the color ball at matrix knots are drawn. The size of @var{udat} and @var{vdat} must be the same. @sref{Map sample} +@end deffn + +@cindex stfa +@anchor{stfa} +@deffn {MGL command} stfa re im @code{dn} ['sch'='' @code{pnts=on}] +@deffnx {MGL command} stfa xdat ydat re im @code{dn} ['sch'='' @code{pnts=on}] +Draws spectrogram of complex array @var{re}+i*@code{im} for Fourier size of @var{dn} points at plane @var{z=zVal}. Parameter @var{dn} is arbitrary even integer. For example in 1D case, result is density plot of data @math{res[i,j]=|\sum_d^dn exp(I*j*d)*(re[i*dn+d]+I*im[i*dn+d])|/dn} with size @{int(nx/dn), dn, ny@}. @sref{STFA sample} +@end deffn + + + + +@c ################################################################## +@node Vector fields @MGL{}, Other plotting @MGL{}, Dual plotting @MGL{}, MGL interface +@section Vector fields @MGL{} + +These commands perform plotting of 2D and 3D vector fields. There are 6 generally different types of vector fields representations: simple vector field (@ref{vect}), vector field by dew-drops (@ref{dew}), flow threads (@ref{flow}), flow pipes (@ref{pipe}), vectors along a curve (@ref{traj}). Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. @xref{Color scheme}. + +The color is specified by the string argument @var{sch}. Previous color scheme is used by default. Parameter @var{flag} setup the hachures (arrows). It is combination of values: @code{1} for drawing bi-color arrow, @code{2} for drawing fixed length arrows, @code{4} for drawing arrows to the cell point, @code{8} for drawing arrows with center at cell point, @code{16} for drawing hachures with dots instead of arrows. + +The size of @var{udat}, @var{vdat} and @var{wdat} must be equal. The minor dimensions of arrays @var{xdat}, @var{ydat}, @var{zdat} and @var{udat} must be equal too. Arrays @var{xdat}, @var{ydat} and @var{zdat} can be vectors (not matrices as @var{udat}). The graphics is plotted for each z slice of @var{udat}, @var{vdat} for 2D case. + +@cindex traj +@anchor{traj} +@deffn {MGL command} traj xdat ydat udat vdat ['sch'='' @code{zval=nan len=0}] +@deffnx {MGL command} traj xdat ydat zdat udat vdat wdat ['sch'='' @code{len=0}] +Draws vectors @{@var{udat}, @var{vdat}, @var{wdat}@} along a curve @var{xdat}, @var{ydat}, @var{zdat}. The length and color of arrows are proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. See also @code{vect}. @sref{Traj sample} +@end deffn + +@cindex vect +@anchor{vect} +@deffn {MGL command} vect udat vdat ['sch'='' @code{zval=nan flag=0}] +@deffnx {MGL command} vect xdat ydat udat vdat ['sch'='' @code{zval=nan flag=0}] +Draws plane vector field plot for the field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zval}. The length and color of arrows are proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of arrows depend on @ref{meshnum}. See also @ref{flow}, @ref{dew}, @ref{vectc}. @sref{Vect sample} +@end deffn + +@deffn {MGL command} vect udat vdat wdat ['sch'='' @code{flag=0}] +@deffnx {MGL command} vect xdat ydat zdat udat vdat wdat ['sch'='' @code{flag=0}] +This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the length and color of arrows are proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Vect 3D sample} +@end deffn + +@cindex vectc +@anchor{vectc} +@deffn {MGL command} vectc udat vdat ['sch'='' @code{zval=nan}] +@deffnx {MGL command} vectc xdat ydat udat vdat ['sch'='' @code{zval=nan}] +Draws plane vector field plot for the field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. The color of hachures is proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of hachures depend on @var{meshnum}. See also @code{vect, flow, pipe, dew}. @sref{VectC sample} +@end deffn + +@deffn {MGL command} vectc udat vdat wdat ['sch'=''] +@deffnx {MGL command} vectc xdat ydat zdat udat vdat wdat ['sch'=''] +This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the color of hachures is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{VectC 3D sample} +@end deffn + +@cindex vectl +@anchor{vectl} +@deffn {MGL command} vectl udat vdat ['sch'='' @code{zval=nan}] +@deffnx {MGL command} vectl xdat ydat udat vdat ['sch'='' @code{zval=nan}] +Draws plane vector field plot for the field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. The length of hachures is proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of hachures depend on @var{meshnum}. See also @code{vectc, flow, pipe, dew}. @sref{Vect sample} +@end deffn + +@deffn {MGL command} vectl udat vdat wdat ['sch'=''] +@deffnx {MGL command} vectl xdat ydat zdat udat vdat wdat ['sch'=''] +This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the length of hachures is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{VectL 3D sample} +@end deffn + +@cindex dew +@anchor{dew} +@deffn {MGL command} dew udat vdat ['sch'='' @code{zval=nan}] +@deffnx {MGL command} dew xdat ydat udat vdat ['sch'='' @code{zval=nan}] +Draws dew-drops for plane vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zval}. The color of drops is proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of drops depend on @ref{meshnum}. Note that this is very expensive plot in memory usage and creation time! See also @ref{vect}. @sref{Dew sample} +@end deffn + +@cindex flow +@anchor{flow} +@deffn {MGL command} flow udat vdat ['sch'='' @code{num=5 zval=nan}] +@deffnx {MGL command} flow xdat ydat udat vdat ['sch'='' @code{num=5 zval=nan}] +Draws plane flow threads for the vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. Number of threads is proportional to @var{num}. The color of lines is proportional to @math{\sqrt@{udat^2+vdat^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). See also @code{vect, vectc, pipe}. @sref{Flow sample} +@end deffn + +@deffn {MGL command} flow udat vdat wdat ['sch'='' @code{num=3}] +@deffnx {MGL command} flow xdat ydat zdat udat vdat wdat ['sch'='' @code{num=3}] +This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the color is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Flow 3D sample} +@end deffn + +@deffn {MGL command} flow @code{x0 y0} udat vdat ['sch'='' @code{zval=nan}] +@deffnx {MGL command} flow @code{x0 y0} xdat ydat udat vdat ['sch'='' @code{zval=nan}] +Draws plane flow threads for the vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} from point @{@var{x0}, @var{y0}@} at level @var{z=zVal}. The color of lines is proportional to @math{\sqrt@{udat^2+vdat^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). See also @code{vect, vectc, pipe}. @sref{Flow sample} +@end deffn + +@deffn {MGL command} flow @code{x0 y0 z0} udat vdat wdat ['sch'=''] +@deffnx {MGL command} flow @code{x0 y0 z0} xdat ydat zdat udat vdat wdat ['sch'=''] +Draws flow thread from point @{@var{x0}, @var{y0}, @var{z0}@}. Arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the color is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Flow 3D sample} +@end deffn + + +@cindex pipe +@anchor{pipe} +@deffn {MGL command} pipe udat vdat ['sch'='' @code{r0=0.05 num=5 zval=nan}] +@deffnx {MGL command} pipe xdat ydat udat vdat ['sch'='' @code{r0=0.05 num=5 zval=nan}] +Draws plane flow pipes for the vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. Number of pipes is proportional to @var{num}. The color of pipes is proportional to @math{\sqrt@{udat^2+vdat^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). Parameter @var{r0} set the base pipe radius. If @var{r0}<0 then pipe radius is inverse proportional to amplitude. The size of @var{ax} and @var{ay} must be equal. See also @code{vect, vectc, pipe}. @sref{Pipe sample} +@end deffn + +@deffn {MGL command} pipe udat vdat wdat ['sch'='' @code{r0=0.05 num=3}] +@deffnx {MGL command} pipe xdat ydat zdat udat vdat wdat ['sch'='' @code{r0=0.05 num=3}] +This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the color is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Pipe 3D sample} +@end deffn + + +@c ################################################################## +@node Other plotting @MGL{}, Nonlinear fitting @MGL{}, Vector fields @MGL{}, MGL interface +@section Other plotting @MGL{} + +These commands perform miscelaneous plotting. There is unstructured data points plots (Dots), surface reconstruction (Crust), surfaces on the triangular mesh (TriPlot) or quadrangular mesh (QuadPlot), textual formula plotting (Plots by formula), data plots at edges (Dens[XYZ], Cont[XYZ], ContF[XYZ]), simple plot (SimplePlot). Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. @xref{Color scheme}. + +@cindex densx +@cindex densy +@cindex densz +@anchor{densz} @anchor{densy} @anchor{densx} +@deffn {MGL command} densx dat ['sch'='' @code{val=nan}] +@deffnx {MGL command} densy dat ['sch'='' @code{val=nan}] +@deffnx {MGL command} densz dat ['sch'='' @code{val=nan}] +These plotting commands draw density plot in x, y or z plain. If @var{dat} is a tensor (3-dimensional data) then interpolation to a given @var{val} is performed. These commands are useful for creating projections of the 3D data array to the bounding box. See also @code{cont[xyz], contf[xyz]}, @ref{dens}. @sref{Dens projection sample} +@end deffn + +@cindex contx +@cindex conty +@cindex contz +@anchor{contz} @anchor{conty} @anchor{contx} +@deffn {MGL command} contx dat ['sch'='' @code{val=nan num=7}] +@deffnx {MGL command} conty dat ['sch'='' @code{val=nan num=7}] +@deffnx {MGL command} contz dat ['sch'='' @code{val=nan num=7}] +These plotting commands draw contour lines in x, y or z plain. If @var{dat} is a tensor (3-dimensional data) then interpolation to a given @var{val} is performed. These commands are useful for creating projections of the 3D data array to the bounding box. See also @code{dens[xyz], contf[xyz]}, @ref{cont}. @sref{Cont projection sample} +@end deffn + +@cindex contfx +@cindex contfy +@cindex contfz +@anchor{contfz} @anchor{contfy} @anchor{contfx} +@deffn {MGL command} contfx dat ['sch'='' @code{val=nan num=7}] +@deffnx {MGL command} contfy dat ['sch'='' @code{val=nan num=7}] +@deffnx {MGL command} contfz dat ['sch'='' @code{val=nan num=7}] +These plotting commands draw solid contours in x, y or z plain. If @var{dat} is a tensor (3-dimensional data) then interpolation to a given @var{val} is performed. These commands are useful for creating projections of the 3D data array to the bounding box. See also @code{dens[xyz], cont[xyz]}, @ref{contf}. +@end deffn + +@cindex dots +@anchor{dots} +@deffn {MGL command} dots xdat ydat zdat ['sch'=''] +@deffnx {MGL command} dots xdat ydat zdat adat ['sch'=''] +Draws the arbitrary placed points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. Variable @var{adat}[i] set transparency for dots. See also @ref{crust}, @ref{mark}, @ref{plot}. @sref{Dots sample} +@end deffn + +@cindex crust +@anchor{crust} +@deffn {MGL command} crust xdat ydat zdat ['sch'=''] +Reconstructs and draws the surface for arbitrary placed points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If string contain @samp{#} then wire plot is produced. See also @ref{dots}, @ref{triplot}. @sref{Crust sample} +@end deffn + +@cindex triplot +@anchor{triplot} +@deffn {MGL command} triplot idat xdat ydat ['sch'='' @code{zval=nan}] +@deffnx {MGL command} triplot idat xdat ydat zdat ['sch'=''] +@deffnx {MGL command} triplot idat xdat ydat zdat cdat ['sch'=''] +Draws the surface of triangles. Triangle vertexes are set by indexes @var{idat} of data points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If string contain @samp{#} then wire plot is produced. First dimensions of @var{idat} must be 3 or greater. See also @code{dots, crust, quadplot}. Parameter @var{cdat} set the colors of triangles (if @var{idat}.ny=@var{cdat}.nx) or colors of vertexes (if @var{xdat}.nx=@var{cdat}.nx). See also @ref{dots}, @ref{crust}, @ref{quadplot}, @ref{tricont}. +@end deffn + +@cindex tricont +@anchor{tricont} +@deffn {MGL command} tricont vdat idat xdat ydat zdat cdat ['sch'='' @code{zval=nan}] +@deffnx {MGL command} tricont vdat idat xdat ydat zdat ['sch'='' @code{zval=nan}] +@deffnx {MGL command} tricont idat xdat ydat zdat ['sch'='' @code{num=7 zval=nan}] +Draws contour lines for surface of triangles at @var{z} = @var{zVal} (or for @var{z}=@var{vdat}[k] if @code{zval=nan}). Triangle vertexes are set by indexes @var{idat} of data points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k (or @var{num} contours equidistantly distributed in range [@var{Cmin}, @var{Cmax}].). See also @ref{triplot}, @ref{cont}. +@end deffn + +@cindex quadplot +@anchor{quadplot} +@deffn {MGL command} quadplot idat xdat ydat ['sch'='' @code{zval=nan}] +@deffnx {MGL command} quadplot idat xdat ydat zdat ['sch'=''] +@deffnx {MGL command} quadplot idat xdat ydat zdat cdat ['sch'=''] +Draws the surface of quadrangles. Quadrangle vertexes are set by indexes @var{idat} of data points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If string contain @samp{#} then wire plot is produced. First dimensions of @var{idat} must be 4 or greater. See also @code{triplot, dots, crust}. Parameter @var{cdat} set the colors of triangles (if @var{idat}.ny=@var{cdat}.nx) or colors of vertexes (if @var{xdat}.nx=@var{cdat}.nx). See also @ref{triplot}. +@end deffn + +@cindex fplot +@anchor{fplot} +@deffn {MGL command} fplot 'y(x)' ['pen'='' @code{zval=nan num=100}] +Draws command function @samp{y(x)} at plane z=@var{zval} where @samp{x} variable is changed in @code{xrange}. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @ref{plot}. +@end deffn + +@deffn {MGL command} fplot 'x(t)' 'y(t)' 'z(t)' ['pen'='' @code{num=100}] +Draws command parametrical curve @{@samp{x(t)}, @samp{y(t)}, @samp{z(t)}@} where @samp{t} variable is changed in range [0, 1]. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @ref{plot}. +@end deffn + +@cindex fsurf +@anchor{fsurf} +@deffn {MGL command} fsurf 'z(x,y)' ['sch'='' @code{num=100}] +Draws command surface for function @samp{z(x,y)} where @samp{x}, @samp{y} variable are changed in @code{xrange, yrange}. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @ref{surf}. +@end deffn + +@deffn {MGL command} fsurf 'x(u,v)' 'y(u,v)' 'z(u,v)' ['sch'='' @code{num=100}] +Draws command parametrical surface @{@samp{x(u,v)}, @samp{y(u,v)}, @samp{z(u,v)}@} where @samp{u}, @samp{v} variable are changed in range [0, 1]. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @ref{surf}. +@end deffn + + +@c ################################################################## +@node Nonlinear fitting @MGL{}, Data create @MGL{}, Other plotting @MGL{}, MGL interface +@section Nonlinear fitting @MGL{} + +These commands fit data to formula. Fitting goal is to find formula parameters for the best fit the data points, i.e. to minimize the sum @math{\sum_i (f(x_i, y_i, z_i) - a_i)^2/s_i^2}. At this, approximation function @samp{f} can depend only on one argument @samp{x} (1D case), on two arguments @samp{x,y} (2D case) and on three arguments @samp{x,y,z} (3D case). The command @samp{f} also may depend on parameters. Normally the list of fitted parameters is specified by @var{var} string (like, @samp{abcd}). Usually user should supply initial values for fitted parameters by @var{ini} variable. But if he/she don't supply it then the zeros are used. + +Commands @ref{fit} and @ref{fits} do not draw the obtained data themselves. They fill the data @var{out} by formula @samp{f} with found coefficients. At this, the @samp{x,y,z} coordinates are equidistantly distributed in the bounding box. Number of points in @var{out} is selected as maximal value of @var{out} size or 100. Also you may print the last formula with found coefficients by @code{putsfit} command. @sref{Fitting sample} + +The dimensions of arrays must be at least the same as the number of specified arrays @var{xdat}, @var{ydat}, @var{zdat}. Also the fitting only along specified directions will be performed (for example, along x and y if only @var{xdat} and @var{ydat} are specified). If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. + + +@cindex fits +@anchor{fits} +@deffn {MGL command} fits adat sdat 'func' 'var' [ini=0] +@deffnx {MGL command} fits xdat adat sdat 'func' 'var' [ini=0] +@deffnx {MGL command} fits xdat ydat adat sdat 'func' 'var' [ini=0] +@deffnx {MGL command} fits xdat ydat zdat adat sdat 'func' 'var' [ini=0] +Fit data along x-, y- and z-directions for 1d-,2d- or 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) with weight factor @var{sdat}[i,j,k]. +@end deffn + +@cindex fit +@anchor{fit} +@deffn {MGL command} fit adat 'func' 'var' [ini=0] +@deffnx {MGL command} fit xdat adat 'func' 'var' [ini=0] +@deffnx {MGL command} fit xdat ydat adat 'func' 'var' [ini=0] +@deffnx {MGL command} fit xdat ydat zdat adat 'func' 'var' [ini=0] +Fit data along x-, y- and z-directions for 1d-,2d- or 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) with weight factor =1. +@end deffn + +@cindex putsfit +@anchor{putsfit} +@deffn {MGL command} putsfit @code{x y} ['pre'='' 'fnt'='' @code{size=-1}] +Print last fitted formula with found coefficients (as numbers) at position @{@var{x}, @var{y}@}. The string @var{pre} will be printed before formula. All other parameters are the same as in @ref{Text printing @MGL{}}. +@end deffn + + +@c ################################################################## +@node Data create @MGL{}, Data filling @MGL{}, Nonlinear fitting @MGL{}, MGL interface +@section Data create @MGL{} + +@cindex new +@anchor{new} +@deffn {MGL command} new dat [@code{nx=1 ny=1 nz=1}] +Creates or recreates the array @var{dat} with specified size and fills it by zero. This command does nothing if one of parameters @var{nx}, @var{ny}, @var{nz} is zero or negative. +@end deffn + +@cindex var +@anchor{var} +@deffn {MGL command} var dat @code{num v1 [v2=nan]} +Creates new variable with name @var{dat} for one-dimensional array of size @var{num}. Array elements are equidistantly distributed in range [@var{v1}, @var{v2}]. If @var{v2}=@code{nan} then @var{v2=v1} is used. +@end deffn + +@cindex list +@anchor{list} +@deffn {MGL command} list dat @code{v1 ...} +Creates new variable with name @var{dat} and fills it by numeric values of command arguments @code{v1 ...}. Command can create one-dimensional and two-dimensional arrays with arbitrary values. For creating 2d array the user should use delimiter @samp{|} which means that the following values lie in next row. Array sizes are [maximal of row sizes * number of rows]. For example, command @code{list 1 | 2 3} creates the array [1 0; 2 3]. Note, that the maximal number of arguments is 1000. +@end deffn + +@deffn {MGL command} list dat d1 ... +Creates new variable with name @var{dat} and fills it by data values of arrays of command arguments @var{d1 ...}. Command can create two-dimensional or three-dimensional (if arrays in arguments are 2d arrays) arrays with arbitrary values. Minor dimensions of all arrays in arguments should be equal to dimensions of first array d1. In the opposite case the argument will be ignored. Note, that the maximal number of arguments is 1000. +@end deffn + +@cindex copy +@anchor{copy} +@deffn {MGL command} copy dat1 dat2 ['eq'='' @code{on_axis=on}] +@deffnx {MGL command} copy dat1 @code{val} +Creates new variable with name @var{dat1} and fills it by data values of array @var{dat2}. At this, if parameter @var{eq} is specified then the data will be modified by corresponding formula by the same way as in @ref{fill} command (for @code{on_axis=on}) or in @ref{modify} command (for @code{on_axis=off}). +@end deffn + +@cindex idset +@anchor{idset} +@deffn {MGL command} idset dat 'ids' +Set the symbol id for data columns. The string must contain one symbol 'a'...'z' per column (without spaces). +@end deffn + +@cindex info +@anchor{info} +@deffn {MGL command} info dat [@code{detail=off}] +Display information (sizes, maximum/minimum, momentums and so on) about the data dat. Show brief information by default (if @code{detail=off}). +@end deffn + +@deffn {MGL command} info 'text' +Display @var{text} as information (warning). +@end deffn + +@c ------------------------------------------------------------------ +@node Data filling @MGL{}, Rearrange data @MGL{}, Data create @MGL{}, MGL interface +@section Data filling @MGL{} +@cindex fill +@cindex modify + +@cindex fill +@anchor{fill} +@deffn {MGL command} fill dat v1 v2 ['dir'='x'] +Equidistantly fills the data values to range [@var{x1}, @var{x2}] in direction @var{dir}=@{@samp{x},@samp{y},@samp{z}@}. +@end deffn + +@deffn {MGL command} fill dat 'eq' +@deffnx {MGL command} fill dat 'eq' vdat +@deffnx {MGL command} fill dat 'eq' vdat wdat +Command fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Coordinates @samp{x}, @samp{y}, @samp{z} are supposed to be normalized in @emph{bounding box} (in difference from @code{modify} commands). Variable @samp{u} is the original value of the array. Variables @samp{v} and @samp{w} are values of @var{vdat}, @var{wdat}. +@end deffn + +@cindex modify +@anchor{modify} +@deffn {MGL command} modify dat 'eq' [@code{dim=0}] +@deffnx {MGL command} modify dat 'eq' vdat +@deffnx {MGL command} modify dat 'eq' vdat wdat +Command fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. Variable @samp{u} is the original value of the array. If @var{dim}>0 is specified then modification will be fulfilled only for slices >=@var{dim}. +@end deffn + + +@cindex put +@anchor{put} +@deffn {MGL command} put dat @code{val [i=: j=: k=:]} +Function sets value(s) of array @var{dat}[@var{i}, @var{j}, @var{k}] = @var{val}. Negative indexes @var{i}, @var{j}, @var{k}=@samp{:} set the value @var{val} to whole range in corresponding direction(s). For example, @code{put dat val : 0 :} sets @var{dat}[i,0,j]=@var{val} for i=0...(@var{dat}.nx-1), j=0...(@var{dat}.nz-1). +@end deffn + +@deffn {MGL command} put dat vdat [@code{i=: j=: k=:}] +Function copies value(s) from array @var{vdat} to the range of array @var{dat}. Negative indexes @var{i}, @var{j}, @var{k}=@samp{:} set the range in corresponding direction(s). At this minor dimensions of array @var{vdat} should be large than corresponding dimensions of array @var{dat}. For example, @code{put dat v : 0 :} sets @var{dat}[i,0,j]=@var{vdat}.ny>@var{dat}.nz ? @var{vdat}[i,j] : @var{vdat}[i], where i=0...(@var{dat}.nx-1), j=0...(@var{dat}.nz-1) and condition vdat.nx>=dat.nx is true. +@end deffn + + + +@c ------------------------------------------------------------------ +@node Rearrange data @MGL{}, File I/O @MGL{}, Data filling @MGL{}, MGL interface +@section Rearrange data @MGL{} + +@cindex rearrange +@anchor{rearrange} +@deffn {MGL command} rearrange dat @code{mx [my=0 mz=0]} +Rearrange dimensions without changing data array so that resulting sizes should be @var{mx}*@var{my}*@var{mz} < nx*ny*nz. If some of parameter @var{my} or @var{mz} are zero then it will be selected to optimal fill of data array. For example, if @var{my}=0 then it will be change to @var{my}=nx*ny*nz/@var{mx} and @var{mz} will be 1. +@end deffn + +@cindex extend +@anchor{extend} +@deffn {MGL command} extend dat @code{n1 [n2=0]} +Increase the dimensions of the data by inserting new (|@var{n1}|+1)-th slices after (for @var{n1}>0) or before (for @var{n1}<0) of existed one. It is possible to insert 2 dimensions simultaneously for 1d data by using parameter @var{n2}. Data to new slices is copy from existed one. For example, for @var{n1}>0 new array will be +@iftex +@math{a_{ij}^{new} = a_i^{old}} where j=0...@var{n1}. Correspondingly, for @var{n1}<0 new array will be @math{a_{ij}^{new} = a_j^{old}} where i=0...|@var{n1}|. +@end iftex +@ifnottex +a_ij^new = a_i^old where j=0...@var{n1}. Correspondingly, for @var{n1}<0 new array will be a_ij^new = a_j^old where i=0...|@var{n1}|. +@end ifnottex +@end deffn + +@cindex transpose +@anchor{transpose} +@deffn {MGL command} transpose dat ['dim'='yxz'] +Transposes (shift order of) dimensions of the data. New order of dimensions is specified int string @var{dim}. This command may be useful also for the reading of one-dimensional data. +@end deffn + +@cindex squeeze +@anchor{squeeze} +@deffn {MGL command} squeeze dat @code{rx [ry=1 rz=1 sm=off]} +Reduces the data size by excluding data elements which indexes are not divisible by @var{rx}, @var{ry}, @var{rz} correspondingly. Parameter @var{sm} set to use smoothing +@iftex +(i.e. @math{a_{out}[i]=\sum_{j=i}^{i+r}a[j]/r}) or not (i.e. @math{a_{out}[i]=a[j*r]}). +@end iftex +@ifnottex +(i.e. out[i]=\sum_@{j=i@}^@{i+r@} a[j]/r) or not (i.e. out[i]=a[j*r]). +@end ifnottex +@end deffn + +@cindex crop +@anchor{crop} +@deffn {MGL command} crop dat @code{n1 n2} 'dir' +Cuts off edges of the data @var{i}<@var{n1} and @var{i}>@var{n2} if @var{n2}>0 or @var{i}>@code{n[xyz]}-@var{n2} if @var{n2}<=0 along direction @var{dir}. +@end deffn + +@cindex delete +@anchor{delete} +@deffn {MGL command} delete dat +Deletes variable @var{dat} and makes its memory free. Can be useful for huge data arrays. +@end deffn + +@deffn {MGL command} delete dat 'dir' @code{[pos=off num=0]} +Delete @var{num} slices along @var{dir}-direction at position @var{pos}. +@end deffn + +@cindex insert +@anchor{insert} +@deffn {MGL command} insert dat 'dir' @code{[pos=off num=0]} +Insert @var{num} slices along @var{dir}-direction at position @var{pos}. +@end deffn + +@c ------------------------------------------------------------------ +@node File I/O @MGL{}, Make another data @MGL{}, Rearrange data @MGL{}, MGL interface +@section File I/O @MGL{} + +@cindex read +@anchor{read} +@deffn {MGL command} read dat 'fname' +Reads data from tab-separated text file with auto determining sizes of the data. +@end deffn + +@deffn {MGL command} read dat 'fname' @code{mx [my=1 mz=1]} +Reads data from text file with specified data sizes. This command does nothing if one of parameters @var{mx}, @var{my} or @var{mz} is zero or negative. +@end deffn + +@cindex readmat +@anchor{readmat} +@deffn {MGL command} readmat dat 'fname' [@code{dim=2}] +Read data from text file with size specified at beginning of the file by first @var{dim} numbers. At this, variable @var{dim} set data dimensions. +@end deffn + +@cindex readall +@anchor{readall} +@deffn {MGL command} readall dat 'templ' @code{v1 v2 [dv=1 slice=off]} +Join data arrays from several text files. The file names are determined by function call @code{sprintf(fname,templ,val);}, where @var{val} changes from @var{v1} to @var{v2} with step @var{dv}. The data load one-by-one in the same slice if @var{slice}=@code{off} or as slice-by-slice if @var{slice}=@code{on}. +@end deffn + +@deffn {MGL command} readall dat 'templ' @code{[slice=off]} +Join data arrays from several text files which filenames satisfied the template @var{templ} (for example, @var{templ}=@code{"t_*.dat"}). The data load one-by-one in the same slice if @var{slice}=@code{off} or as slice-by-slice if @var{slice}=@code{on}. +@end deffn + +@cindex save +@anchor{save} +@deffn {MGL command} save dat 'fname' +Saves the whole data array to tab-separated text file. +@end deffn + +@cindex readhdf +@anchor{readhdf} +@deffn {MGL command} readhdf dat 'fname' 'dname' +Reads data array named @var{dname} from HDF5 or HDF4 file @var{fname}. +@end deffn + +@cindex savehdf +@anchor{savehdf} +@deffn {MGL command} savehdf dat 'fname' 'dname' +Saves data array named @var{dname} from HDF5 or HDF4 file @var{fname}. +@end deffn + +@cindex import +@anchor{import} +@deffn {MGL command} import dat 'fname' 'sch' [@code{v1=0 v2=1}] +Reads data from bitmap file. The RGB values of bitmap pixels are transformed to float values in range [@var{v1}, @var{v2}] using color scheme @var{sch} (@pxref{Color scheme}). +@end deffn + +@cindex export +@anchor{export} +@deffn {MGL command} export dat 'fname' 'sch' [@code{v1=0 v2=0}] +Saves data matrix to bitmap file. The data values are transformed from range [@var{v1}, @var{v2}] to RGB pixels of bitmap using color scheme @var{sch} (@pxref{Color scheme}). If @var{v1}>=@var{v2} then the values of @var{v1}, @var{v2} are automatically determined as minimal and maximal value of the data array. +@end deffn + +@c ------------------------------------------------------------------ +@node Make another data @MGL{}, Change data @MGL{}, File I/O @MGL{}, MGL interface +@section Make another data @MGL{} + +@cindex combine +@anchor{combine} +@deffn {MGL command} combine res adat bdat +Returns direct multiplication of arrays (like, res[i,j] = adat[i]*bdat[j] and so on). +@end deffn + +@cindex evaluate +@anchor{evaluate} +@deffn {MGL command} evaluate res dat idat [@code{norm=on}] +@deffnx {MGL command} evaluate res dat idat jdat [@code{norm=on}] +@deffnx {MGL command} evaluate res dat idat jdat kdat [@code{norm=on}] +Get array which values is result of interpolation of original array for coordinates from other arrays (for example, res[i,j]=dat[idat[i,j],jdat[i,j]]). All dimensions must be the same for data @var{idat}, @var{jdat}, @var{kdat}. Coordinates from @var{idat}, @var{jdat}, @var{kdat} are supposed to be normalized in range [0,1] (if @var{norm}=@code{true}) or in ranges [0,nx], [0,ny], [0,nz] correspondingly. +@end deffn + +@cindex hist +@anchor{hist} +@deffn {MGL command} hist res dat @code{num v1 v2 [nsub=0]} +@deffnx {MGL command} hist res dat wdat @code{num v1 v2 [nsub=0]} +Creates @var{num}-th points distribution @var{res} of the data values of @var{dat} in range [@var{v1}, @var{v2}]. Array @var{wdat} specifies weights of the data elements (all weight is 1 if @var{wdat} is not specified). Parameter @var{nsub} define the number of additional interpolated points (for smoothness of histogram). +@end deffn + +@deffn {MGL command} hist res xdat adat +@deffnx {MGL command} hist res xdat ydat adat +@deffnx {MGL command} hist res xdat ydat zdat adat +Creates distribution @var{res} of the data values of @var{adat} in axis range [Min, Max]. Array @var{adat} look like weights of the data points. +@end deffn + + +@cindex momentum +@anchor{momentum} +@deffn {MGL command} momentum res dat 'how' ['dir'='z'] +Get momentum (1D-array) of the data along direction @var{dir}. String @var{how} contain kind of momentum. The momentum is defined like as +@iftex +@math{res_k = \sum_{ij} how(x_i,y_j,z_k) a_{ij}/\sum_{ij} a_{ij}} +@end iftex +@ifnottex +res_k = \sum_ij how(x_i,y_j,z_k) a_ij/ \sum_ij a_ij +@end ifnottex +if @var{var}=@samp{z} and so on. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. +@end deffn + +@cindex sum +@anchor{sum} +@deffn {MGL command} sum res dat 'dir' +Gets array which is the result of summation in given direction or direction(s). +@end deffn +@cindex max +@anchor{max} +@deffn {MGL command} max res dat 'dir' +Gets array which is the maximal data values in given direction or direction(s). +@end deffn +@cindex min +@anchor{min} +@deffn {MGL command} min res dat 'dir' +Gets array which is the minimal data values in given direction or direction(s). +@end deffn + +@cindex resize +@anchor{resize} +@deffn {MGL command} resize res dat @code{mx [my=1 mz=1]} +Makes array @var{res} of sizes @var{mx}, @var{my}, @var{mz} with interpolated data of array @var{dat}. +@end deffn + +@cindex subdata +@anchor{subdata} +@deffn {MGL command} subdata res dat @code{xx [yy=: zz=:]} +Extracts sub-array data @var{res} from the original data @var{dat} array keeping fixed positive index. For example @code{subdata a b : 2} extracts 3d row (indexes are zero based), @code{subdata a b 4 :} extracts 5th column, @code{subdata a b : : 3} extracts 4th slice and so on. Note that symbol @samp{:} is defined @samp{:}=@code{-1} in MGL. +@end deffn + +@cindex trace +@anchor{trace} +@deffn {MGL command} trace res dat +Gets array of diagonal elements @var{dat}[i,i] (for 2D case) or @var{dat}[i,i,i] (for 3D case) where i=0...nx-1. Function return copy of @var{dat} for 1D case. Data array must have dimensions @var{dat}.ny, @var{dat}.nz >= @var{dat}.nx or @var{dat}.ny, @var{dat}.nz = 1. +@end deffn + +@cindex transform +@anchor{transform} +@deffn {MGL command} transform dat 'type' real imag +Do integral transformation of complex data @var{real}, @var{imag} on specified direction. The order of transformations is specified in string @var{type}: first character for x-dimension, second one for y-dimension, third one for z-dimension. The possible character are: @samp{f} is forward Fourier transformation, @samp{i} is inverse Fourier transformation, @samp{s} is Sine transform, @samp{c} is Cosine transform, @samp{h} is Hankel transform, @samp{n} or @samp{ } is no transformation. +@end deffn + +@cindex transforma +@anchor{transforma} +@deffn {MGL command} transforma dat 'type' ampl phase +The same as previous but with specified amplitude @var{ampl} and phase @var{phase} of complex numbers. +@end deffn + +@cindex stfad +@anchor{stfad} +@deffn {MGL command} stfad res real imag @code{dn} ['dir'='x'] +Short time Fourier transformation for real and imaginary parts. Output is amplitude of partial Fourier of length @var{dn}. For example if @var{dir}=@samp{x}, result will have size @{int(nx/dn), dn, ny@} and it will contain @math{res[i,j,k]=|\sum_d^dn exp(I*j*d)*(real[i*dn+d,k]+I*imag[i*dn+d,k])|/dn}. +@end deffn + +@cindex pde +@anchor{pde} +@deffn {MGL command} pde res 'ham' ini_re ini_im [@code{dz=0.1 k0=100}] +Solves equation du/dz = i*k0*@var{ham}(p,q,x,y,z,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators. Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Coordinates of the equation (and the solution) are supposed to be in the bounding box. Note, that really this ranges are increased by factor 3/2 for purpose of reducing reflection from boundaries. Parameter @var{dz} set the step along evolutionary coordinate z. At this moment, simplified form of function @var{ham} is supported -- all ``mixed'' terms (like @samp{x*p}->x*d/dx) are excluded. For example, in 2D case this function is effectively @math{ham = f(p,z) + g(x,z,u)}. However commutable combinations (like @samp{x*q}->x*d/dy) are allowed. Here variable @samp{u} is used for field amplitude |u|. This allow one solve nonlinear problems -- for example, for non-linear Shrodinger equation you may set @code{ham='p^2+q^2-u^2'}. You may specify imaginary part for wave absorption, like @code{ham = 'p^2+i*x*(x>0)'}, but only if dependence on variable @samp{i} is linear (i.e. @math{ham = hre+i*him}). @sref{PDE sample} +@end deffn + +@cindex ray +@anchor{ray} +@deffn {MGL command} ray res 'ham' @code{x0 y0 z0 p0 q0 v0 [dt=0.1 tmax=10]} +Solves GO ray equation like d@emph{r}/dt = d @var{ham}/d@emph{p}, d@emph{p}/dt = -d @var{ham}/d@emph{r}. This is Hamiltonian equations for particle trajectory in 3D case. Here @var{ham} is Hamiltonian which may depend on coordiantes @samp{x}, @samp{y}, @samp{z}, momentums @samp{p}=px, @samp{q}=py, @samp{v}=pz and time @samp{t}: @math{ham = H(x,y,z,p,q,v,t)}. The starting point (at @code{t=0}) is defined by variables @{@var{x0}, @var{y0}, @var{z0}, @var{p0}, @var{q0}, @var{v0}@}. Parameters @var{dt} and @var{tmax} specify the integration step and maximal time for ray tracing. Result is array of @{x,y,z,p,q,v,t@} with dimensions @{7 * int(@var{tmax}/@var{dt}+1) @}. See also @ref{pde}. @sref{Beam tracing sample} +@end deffn + +@cindex qo2d +@anchor{qo2d} +@deffn {MGL command} qo2d res 'ham' ini_re ini_im ray [@code{r=1 k0=100} xx=0 yy=0] +Solves equation du/dt = i*k0*@var{ham}(p,q,x,y,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators. Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Parameters @var{ray} set the reference ray, i.e. the ray around which the accompanied coordinate system will be maked. You may use, for example, the array created by @ref{ray} function. Note, that the reference ray @strong{must be} smooth enough to make accompanied coodrinates unambiguity. Otherwise errors in the solution may appear. If @var{xx} and @var{yy} are non-zero then Cartesian coordinates for each point will be written into them. @sref{Beam tracing sample} +@end deffn + +@cindex jacobian +@anchor{jacobian} +@deffn {MGL command} jacobian res xdat ydat [zdat=0] +Computates the Jacobian for transformation @{i,j,k@} to @{@var{xdat},@var{ydat},@var{zdat}@} where initial coordinates @{i,j,k@} are data indexes normalized in range [0,1]. The Jacobian is determined by formula det||@math{dr_\alpha/d\xi_\beta}|| where @math{r}=@{@var{xdat},@var{ydat},@var{zdat}@} and @math{\ xi}=@{i,j,k@}. All dimensions must be the same for all data arrays. Data must be 3D if all 3 arrays @{@var{xdat},@var{ydat},@var{zdat}@} are specified or 2D if only 2 arrays @{@var{xdat},@var{ydat}@} are specified. +@end deffn + + + +@c ------------------------------------------------------------------ +@node Change data @MGL{}, Operators @MGL{}, Make another data @MGL{}, MGL interface +@section Change data @MGL{} + +These commands change the data in some direction like differentiations, integrations and so on. The direction in which the change will applied is specified by the string parameter, which may contain @samp{x}, @samp{y} or @samp{z} characters for 1-st, 2-nd and 3-d dimension correspondingly. + +@cindex cumsum +@anchor{cumsum} +@deffn {MGL command} cumsum dat 'dir' +Cumulative summation of the data in given direction or directions. +@end deffn +@cindex integrate +@anchor{integrate} +@deffn {MGL command} integrate dat 'dir' +Integrates (like cumulative summation) the data in given direction or directions. +@end deffn +@cindex diff +@anchor{diff} +@deffn {MGL command} diff dat 'dir' +Differentiates the data in given direction or directions. +@end deffn +@deffn {MGL command} diff dat xdat ydat [zdat=0] +Differentiates the data @var{dat} specified parametrically in direction @var{xdat} with @var{ydat}, @var{zdat}=constant. Parameter @var{zdat} can be omitted that correspond to 2D case. Parametrical differentiation uses the formula (for 2D case): @math{da/dx = (a_j*y_i-a_i*y_j)/(x_j*y_i-x_i*y_j)} where @math{a_i=da/di, a_j=da/dj} denotes usual differentiation along 1st and 2nd dimensions. The similar formula is used for 3D case. Note, that you may change the order of arguments -- for example, if you have 2D data a(i,j) which depend on coordinates @{x(i,j), y(i,j)@} then usual derivative along @samp{x} will be @code{diff a x y} and usual derivative along @samp{y} will be @code{diff a y x}. +@end deffn + +@cindex diff2 +@anchor{diff2} +@deffn {MGL command} diff2 dat 'dir' +Double-differentiates (like Laplace operator) the data in given direction. +@end deffn + +@cindex sinfft +@anchor{sinfft} +@deffn {MGL command} sinfft dat 'dir' +Do Sine transform of the data in given direction or directions. The Sine transform is @math{\sum a_i \sin(k i)}. +@end deffn +@cindex cosfft +@anchor{cosfft} +@deffn {MGL command} cosfft dat 'dir' +Do Cosine transform of the data in given direction or directions. The Cosine transform is @math{\sum a_i \cos(k i)}. +@end deffn +@cindex hankel +@anchor{hankel} +@deffn {MGL command} hankel dat 'dir' +Do Hankel transform of the data in given direction or directions. The Hankel transform is @math{\sum a_i J_0(k i)}. +@end deffn + + +@cindex swap +@anchor{swap} +@deffn {MGL command} swap dat 'dir' +Swaps the left and right part of the data in given direction (useful for Fourier spectrum). +@end deffn +@cindex roll +@anchor{roll} +@deffn {MGL command} roll dat 'dir' num +Rolls the data along direction 'dir'. Resulting array will be out[i] = ini[(i+num)%nx] if @code{dir='x'}. +@end deffn + +@cindex mirror +@anchor{mirror} +@deffn {MGL command} mirror dat 'dir' +Mirror the left-to-right part of the data in given direction. Looks like change the value index @var{i}->@var{n-i}. +@end deffn + +@cindex sew +@anchor{sew} +@deffn {MGL command} sew dat ['dir'='xyz' @code{da=2*pi}] +Remove value steps (like phase jumps after inverse trigonometric commands) with period @var{da} in given direction. +@end deffn +@cindex smooth +@anchor{smooth} +@deffn {MGL command} smooth data @code{type} ['dir'='xyz'] +Smooths the data on specified direction or directions by method @var{Type}. Now 4 methods are supported: @samp{0} does nothing, @samp{1} linear averaging by 3 points, @samp{2} linear averaging by 5 points, @samp{3} quadratic averaging by 5 points. +@end deffn + +@cindex envelop +@anchor{envelop} +@deffn {MGL command} envelop dat ['dir'='x'] +Find envelop for data values along direction @var{dir}. Only one direction can be specified at once. +@end deffn + +@cindex normsl +@anchor{normsl} +@deffn {MGL command} normsl dat @code{v1 v2} ['dir'='z' @code{keep=on sym=off}] +Normalizes data slice-by-slice along direction @var{dir} the data in slices to range [@var{v1},@var{v2}]. If flag @var{sym}=@code{on} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. If @var{keep} is set then maximal value of k-th slice will be limited by +@iftex +@math{\sqrt{\sum a_{ij}(k)/\sum a_{ij}(0)}}. +@end iftex +@ifnottex +@math{\sqrt@{\sum a_ij(k)/\sum a_ij(0)@}}. +@end ifnottex +@end deffn + +@cindex norm +@anchor{norm} +@deffn {MGL command} norm dat @code{v1 v2 [sym=off dim=0]} +Normalizes the data to range [@var{v1},@var{v2}]. If flag @var{sym}=@code{on} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. Modification will be applied only for slices >=@var{dim}. +@end deffn + +@c ------------------------------------------------------------------ +@node Operators @MGL{}, Program flow @MGL{}, Change data @MGL{}, MGL interface +@section Operators @MGL{} + +@cindex multo +@anchor{multo} +@deffn {MGL command} multo dat dat2 +Multiplies the data by the other one for each element. +@end deffn +@deffn {MGL command} multo dat @code{val} +Multiplies each element by the number. +@end deffn + +@cindex divto +@anchor{divto} +@deffn {MGL command} divto dat dat2 +Divides the data by the other one for each element. +@end deffn +@deffn {MGL command} divto dat @code{val} +Divides each element by the number. +@end deffn + +@cindex addto +@anchor{addto} +@deffn {MGL command} addto dat dat2 +Adds the other data. +@end deffn +@deffn {MGL command} addto dat @code{val} +Adds the number to each element. +@end deffn + +@cindex subto +@anchor{subto} +@deffn {MGL command} subto dat dat2 +Subtracts the other data. +@end deffn +@deffn {MGL command} subto dat @code{val} +Subtracts the number to each element. +@end deffn + +@c ------------------------------------------------------------------ +@node Program flow @MGL{}, Command options @MGL{}, Operators @MGL{}, MGL interface +@section Program flow @MGL{} + +These commands control program flow, like, conditions, cycles, define script arguments and so on. + +@cindex chdir +@anchor{chdir} +@deffn {MGL command} chdir 'path' +Changes the current directory to @var{path}. +@end deffn + +@cindex define +@anchor{define} +@deffn {MGL command} define $N smth +Sets @var{N}-th script argument to @var{smth}. Note, that @var{smth} is used as is (with @samp{'} symbols if present). Here @var{N} is digit (0...9) or alpha (a...z). +@end deffn +@deffn {MGL command} define name smth +Create scalar variable @code{name} which have the numeric value of @code{smth}. Later you can use this variable as usual number. Here @var{N} is digit (0...9) or alpha (a...z). +@end deffn +@cindex defchr +@anchor{defchr} +@deffn {MGL command} defchr $N smth +Sets @var{N}-th script argument to character with value evaluated from @var{smth}. Here @var{N} is digit (0...9) or alpha (a...z). +@end deffn +@cindex defnum +@anchor{defnum} +@deffn {MGL command} defnum $N smth +Sets @var{N}-th script argument to number with value evaluated from @var{smth}. Here @var{N} is digit (0...9) or alpha (a...z). +@end deffn +@cindex defpal +@anchor{defpal} +@deffn {MGL command} defpal $N smth +Sets @var{N}-th script argument to palette character at position evaluated from @var{smth}. Here @var{N} is digit (0...9) or alpha (a...z). +@end deffn + +@cindex call +@anchor{call} +@deffn {MGL command} call 'fname' [ARG1 ARG2 ... ARG9] +Executes function @var{fname} (or script if function is not found). Optional arguments will be passed to functions. See also @ref{func}. +@end deffn +@cindex func +@anchor{func} +@deffn {MGL command} func 'fname' [narg=0] +Define the function @var{fname} and number of required arguments. The arguments will be placed in script parameters $1, $2, ... $9. Note, you should stop script execution before function definition(s) by command @ref{stop}. See also @ref{return}. +@end deffn +@cindex return +@anchor{return} +@deffn {MGL command} return +Return from the function. See also @ref{func}. +@end deffn + + +@cindex if +@anchor{if} +@deffn {MGL command} if dat 'cond' +Starts block which will be executed if @var{dat} satisfy to @var{cond}. +@end deffn +@deffn {MGL command} if @code{val} +Starts block which will be executed if @code{val} is nonzero. +@end deffn +@cindex elseif +@anchor{elseif} +@deffn {MGL command} elseif dat 'cond' +Starts block which will be executed if previous @code{if} or @code{elseif} is false and @var{dat} satisfy to @var{cond}. +@end deffn +@deffn {MGL command} elseif @code{val} +Starts block which will be executed if previous @code{if} or @code{elseif} is false and @code{val} is nonzero. +@end deffn +@cindex else +@anchor{else} +@deffn {MGL command} else +Starts block which will be executed if previous @code{if} or @code{elseif} is false. +@end deffn +@cindex endif +@anchor{endif} +@deffn {MGL command} endif +Finishes @code{if/elseif/else} block. +@end deffn + +@cindex for +@anchor{for} +@deffn {MGL command} for $N @code{v1 v2 [dv=1]} +Starts cycle with $@var{N}-th argument changing from @var{v1} to @var{v2} with the step @var{dv}. Here @var{N} is digit (0...9) or alpha (a...z). +@end deffn +@deffn {MGL command} for $N dat +Starts cycle with $@var{N}-th argument changing for @var{dat} values. Here @var{N} is digit (0...9) or alpha (a...z). +@end deffn +@cindex next +@anchor{next} +@deffn {MGL command} next +Finishes @code{for} cycle. +@end deffn + +@cindex once +@anchor{once} +@deffn {MGL command} once @code{val} +The code between @code{once on} and @code{once off} will be executed only once. Useful for large data manipulation in programs like UDAV. +@end deffn +@cindex stop +@anchor{stop} +@deffn {MGL command} stop +Terminate execution. +@end deffn + +@c ------------------------------------------------------------------ +@node Command options @MGL{}, Suffixes, Program flow @MGL{}, MGL interface +@section Command options @MGL{} + +Command options allow the easy setup of the plot by changing of global settings only for this plot. Options are specified at the end of string. Each option is separated from the previous text by symbol @samp{;}. Options work so that them remember the current settings, change settings as it being set in the option, execute command and return the original settings back. So, the options usage for data handling commands or for graphics setup commands is useless. + +The most useful options are @code{xrange, yrange, zrange}. They sets the boundaries for data change. This boundaries are used for automatically filled variables. So, these options allow one to change the position of some plots. For example, in command @code{plot y; xrange 0.1 0.9} the x coordinate will be equidistantly distributed in range 0.1 ... 0.9. + +The full list of options are: +@cindex alpha +@cindex alphadef +@deffn {MGL option} alpha @code{val} +@deffnx {MGL option} alphadef @code{val} +Sets alpha value (transparency) of the plot. The value should be in range [0, 1]. See also @ref{alphadef}. +@end deffn +@cindex ambient +@deffn {MGL option} ambient @code{val} +Sets brightness of ambient light for the plot. The value should be in range [0, 1]. See also @ref{ambient}. +@end deffn +@cindex crange +@deffn {MGL option} crange @code{val1 val2} +Sets boundaries of color change for the plot. See also @ref{crange}. +@end deffn +@cindex xrange +@deffn {MGL option} xrange @code{val1 val2} +Sets boundaries of x coordinate change for the plot. See also @ref{xrange}. +@end deffn +@cindex yrange +@deffn {MGL option} yrange @code{val1 val2} +Sets boundaries of y coordinate change for the plot. See also @ref{yrange}. +@end deffn +@cindex zrange +@deffn {MGL option} zrange @code{val1 val2} +Sets boundaries of z coordinate change for the plot. See also @ref{zrange}. +@end deffn +@cindex cut +@deffn {MGL option} cut @code{val} +Sets whether to cut or to project the plot points lying outside the bounding box. See also @ref{cut}. +@end deffn +@cindex fontsize +@deffn {MGL option} fontsize @code{val} +Sets the size of text. See also @ref{font}. +@end deffn +@cindex marksize +@deffn {MGL option} marksize @code{val} +Sets the size of marks. See also @ref{marksize}. +@end deffn +@cindex meshnum +@deffn {MGL option} meshnum @code{val} +Work like @ref{meshnum} command. +@end deffn +@cindex legend +@deffn {MGL option} legend 'txt' +Adds string 'txt' to internal legend accumulator. The style of described line and mark is taken from arguments of the last @ref{1D plotting @MGL{}} command. See also @ref{legend}. +@end deffn + +@c ------------------------------------------------------------------ +@node Suffixes, Utilities, Command options @MGL{}, MGL interface +@section Suffixes for variable + +Suffixes can get some numerical value (like its size, maximal or minimal value, the sum of elements and so on) of the data array in variable and use it later as usual number in command arguments. The suffixes start from point @samp{.} right after (without spaces) variable name or its sub-array. For example, @code{a.nx} give the x-size of data @var{a}, @code{b(1).max} give maximal value of second row of variable @var{b}, @code{(c(:,0)^2).sum} give the sum of squares of elements in the first column of @var{c} and so on. + +The full list of suffixes are: +@table @strong +@item nx, ny, nz +Give the data size in x-, y-, z-direction correspondingly. +@item max +Give maximal value of the data. +@item min +Give minimal value of the data. +@item sum +Give sum of data values. +@item a +Give first value of data array. +@item fst +Give first nonzero value of data array. +@item lst +Give last nonzero value of data array. +@item mx, my, mz +Give x-, y-, z-position of data maximum. +@item ax, ay, az, aa +Give x-, y-, z-position of data mass center or average data value. +@item wx, wy, wz, wa +Give width in x-, y-, z-direction or data dispersion value. +@item sx, sy, sz, sa +Give skewness in x-, y-, z-direction or data skewness value. +@item kx, ky, kz, ka +Give kurtosis in x-, y-, z-direction or data kurtosis value. +@end table + +@c ------------------------------------------------------------------ +@node Utilities, , Suffixes, MGL interface +@section Utilities for parsing MGL + +MathGL library provides several tools for parsing MGL scripts. There is tools saving it to bitmap (@code{mgl2png}, @code{mgl2gif}) or vectorial (@code{mgl2eps}, @code{mgl2svg}) images. Tool @code{mglview} show MGL script and allow to rotate and setup the image. Also you can translate MGL script to C++ file by help of @code{mgl2cpp} tool. + +All of this tools have similar set of arguments. First argument is name of script file, next argument is optional output file name, last arguments are options. There are options for setting script parameters (it is @code{$0, $1, ... $9}) and locale settings. The script parameters have format @samp{-Nval}. Here N=0,1...9 is parameter ID and val is its value. For example, option @samp{-1test} set to substitute @samp{test} instead of @code{$1} in the script. Option -Lval set locale to val. For example, @samp{-Lutf8} will set UTF-8 locale for script. + +Additionally you can create animated GIF file or a set of JPEG files with names @samp{frameNNNN.jpg} (here @samp{NNNN} is frame index). You should use @code{mgl2gif} tool and specify the values of @code{$0} parameter for making animation. Values of the parameter @code{$0} can be specified inside the script by comment @code{##a val} for each value @code{val} (one comment for one value) or by option(s) @samp{-Aval}. Also you can specify a cycle for animation by comment @code{##c v1 v2 dv} or by option @code{-Cn1:n2}. Tool @code{mgl2gif} will execute script several times (once for each specified value of @code{$0}) and save result in animated GIF file. For saving each frame in JPEG just add command @code{write ''} at the end of the script. + diff --git a/texinfo/mgl_cmd_ru.texi b/texinfo/mgl_cmd_ru.texi new file mode 100644 index 0000000..cb53add --- /dev/null +++ b/texinfo/mgl_cmd_ru.texi @@ -0,0 +1,2011 @@ +@c ------------------------------------------------------------------ +@chapter Язык MGL + +MathGL имеет встроенный скриптовый язык MGL для обработки и отображения данных. Скрипты MGL можно использовать как независимо (программами UDAV, mgl2png, mgl2eps, mgl2svg и пр., @pxref{Utilities}) так и вызовами библиотеки. + +Язык MGL достаточно простой. Каждая строка -- отдельная команда. Первое слово -- имя команды, а все остальные ее аргументы. Команда может иметь до 1000 аргументов (по крайней мере сейчас). Слова разделяются одно от другого пробелом или символом табуляции. Различий между верхним и нижним индексом нет, т.е. переменные @var{a} и @var{A} идентичны. Символ @samp{#} начинает комментарий -- все символы после него игнорируются до конца строки. Исключением является случай, когда @samp{#} входит в строку. Опции команды указываются после символа @samp{;} (@pxref{Command options @MGL{}}). Символ @samp{:} начинает новую команду (подобно переводу строки) если он расположен не внутри скобок или строки. + +Если строка содержит ссылки на внешние параметры (@samp{$0}, @samp{$1} ... @samp{$9}) или макроопределения (@samp{$a}, @samp{$b} ... @samp{$z}), то текущие значения параметров/макроопределений подставляются в строку вместо ссылки до выполнением команды. Это позволяет использовать один и тот же скрипт при различных входных параметрах командной строки или вводить макроопределения по ходу исполнения команд скрипта. + +Аргументы команды могут быть строками, переменными или числами. +@itemize @bullet +@item +Строка -- произвольный набор символов между метками @samp{'}. + +@item +Обычно переменная имеет имя, состоящее из букв и чисел (должно начинаться с буквы и не быть длиннее 64 символов). В качестве переменной можно использовать временные массивы, включающие в себя: +@itemize @bullet +@item +срезы (``подмассивы'') массивов данных (подобно команде @ref{subdata}). Например, @code{a(1)} или @code{a(1,:)} или @code{a(1,:,:)} -- вторая строка массива @var{a}, @code{a(:,2)} или @code{a(:,2,:)} -- третий столбец, @code{a(:,:,0)} -- первый срез и т.д. Также можно выделить часть массива с m-го по n-ый элемент @code{a(m:n,:,:)} или просто @code{a(m:n)}. + +@item +произвольные комбинации столбцов данных (например, @code{a('n*w^2/exp(t)')}), если столбцы данных были именованы командой @ref{idset} или в файле данных (в строке начинающейся с @code{##}). + +@item +произвольное выражение из существующих переменных и констант. Например, @samp{sqrt(dat(:,5)+1)} даст временный массив данных с элементами равными @code{tmp[i,j] = sqrt(dat[i,5,j]+1)}. + +@item +массивы с элементами заданными в квадратных скобках [], разделенные @samp{,}. При этом внутри выражения не должно быть пробелов! Например, @samp{[1,2,3]} даст временный массив из 3 элементов @{1, 2, 3@}; @samp{[[11,12],[21,22]]} даст матрицу 2*2 и т.д. Элементами такой конструкции могут быть и массивы если их размерности одинаковые, например @samp{[v1,v2,...,vn]}. + +@item +результат команд построения новых данных (@pxref{Make another data}), если они заключены в фигурные скобки @{@}. Например, @samp{@{sum dat 'x'@}} даст временный массив, который есть результат суммирования @var{dat} вдоль 'x'. Это такой же массив как и @var{tmp}, полученный командой @samp{sum tmp dat 'x'}. При этом можно использовать вложенные конструкции, например @samp{@{sum @{max dat 'z'@} 'x'@}}. +@end itemize +Временные массивы не могут стоять в качестве первого аргумента команд, создающих массивы (например, @samp{new}, @samp{read}, @samp{hist} и т.д.). + +@item +К скалярным переменным, кроме собственно чисел, относятся: специальные переменные @code{nan=#QNAN, pi=3.1415926..., on=1, off=0, :=-1}, переменные с суффиксами (@pxref{Suffixes}), переменные определенные командой @ref{define}. Также массивы размером 1x1x1 считаются скалярами (например, @samp{pi/dat.nx}). +@end itemize +Перед первым использованием все переменные должны быть определены с помощью команд, создающих массивы (@ref{new}, @ref{var}, @ref{list}, @ref{copy}, @ref{read}, @ref{hist}, @ref{sum} и др., @pxref{Data create @MGL{}} и @ref{Make another data @MGL{}}). + +Команды могут иметь несколько наборов аргументов (например, @code{plot ydat} и @code{plot xdat ydat}). Все аргументы команды для выбранного набора должны быть указаны, однако часть из них могут иметь значения по умолчанию. Такие аргументы в описании команд будут помещены в квадратные скобки [], например @code{plot ydat ['stl'='' zval=nan]}. При этом запись @code{[arg1 arg2 arg3 ...]} подразумевает @code{[arg1 [arg2 [arg3 ...]]]}, т.е. опускать можно только аргументы с конца, если вы согласны с их значениями по умолчанию. Например, @code{plot ydat '' 1} или @code{plot ydat ''} правильно, а @code{plot ydat 1} не правильно (аргумент @code{'stl'} пропущен). + +Все команды MGL можно разделить на несколько групп. В дальнейшем будет использованы следующие обозначения при описании команд: имя команды выделено жирным, строки заключены в одинарные кавычки '', переменные выделены курсивом, числа (скаляры) выделены моноширинным шрифтом. Необязательные аргументы будут помещены в квадратные скобки [] и показаны их значения по умолчанию. Подробную информацию о цвете и стиле линий (@pxref{Line styles}), цветовых схемах (@pxref{Color scheme}), стиле текста и символах TeX (@pxref{Font styles}), текстовых формулах (@pxref{Textual formulas}) можно найти в соответствующих разделах. + +@menu +@ifset UDAV +* General concepts:: +@end ifset +* Graphics setup @MGL{}:: +* Axis settings @MGL{}:: +* Transformation matrix @MGL{}:: +* Export to file @MGL{}:: +* Primitives drawing @MGL{}:: +* Text printing @MGL{}:: +* Axis and Colorbar @MGL{}:: +* Legend @MGL{}:: +* 1D plotting @MGL{}:: +* 2D plotting @MGL{}:: +* 3D plotting @MGL{}:: +* Dual plotting @MGL{}:: +* Vector fields @MGL{}:: +* Other plotting @MGL{}:: +* Nonlinear fitting @MGL{}:: +* Data create @MGL{}:: +* Data filling @MGL{}:: +* Rearrange data @MGL{}:: +* File I/O @MGL{}:: +* Make another data @MGL{}:: +* Change data @MGL{}:: +* Operators @MGL{}:: +* Program flow @MGL{}:: +* Command options @MGL{}:: +* Suffixes:: +* Utilities:: +@end menu + +@c ################################################################## +@ifset UDAV +@node General concepts, , Utilities, MGL interface +@section Основные принципы + +Возможности библиотеки MathGL довольно богаты -- число только основных типов графиков превышает 50 видов. Кроме того, есть функции для обработки данных, настройки вида графика и пр. и пр. Тем не менее, я старался придерживаться единого стиля в порядке аргументов функций и способе их ``настройки''. В основном все ниже сказанное относится к функциям рисования различных графиков. + +Всего основных концепций (базисных идей) четыре: +@enumerate +@item +@strong{Все настройки графиков (стиль линий, цветовые схемы поверхностей, стиль и цвет текста) задаются строками.} Это обеспечивает: удобство для пользователя -- короткую строку легче читать и здесь тяжелее ошибиться, чем в большом списке параметров; переносимость -- строки выглядят одинаково на всех платформах и не надо заботиться о типе и числе аргументов. +@item +@strong{Все функции имеют ``упрощенный'' и ``продвинутый'' варианты.} Сделано опять из-за удобства. В ``упрощенном'' варианте для построения графика нужны только один-два массив(а) данных, которые автоматически равнораспределяются в заданном диапазоне осей координат. В ``продвинутой'' версии можно не только указать явно диапазон построения графика, но и задать его параметрически. Последнее позволяет легко строить довольно сложные кривые и поверхности. В обоих вариантах функций порядок аргументов стандартен: сначала идут массивы данных, потом необязательный строковый параметр стиля графика, а далее -- второстепенные необязательные параметры для более точной настройки графика. +@item +@strong{Все элементы рисунков векторные.} Изначально библиотека MathGL была ориентированна на работу с научными данными, которые по своей природе векторные (линии, грани, матрицы и т.д.). Поэтому векторность используется во всех рисунках! Причем иногда даже в ущерб производительности (например, при выводе шрифтов). Помимо всего прочего, векторность позволяет легко масштабировать рисунок -- измените размер картинки в 2 раза, и рисунок пропорционально растянется. +@item +@strong{Новые графики не удаляют уже нарисованное.} Этот, в чем-то неожиданный, подход позволяет создавать огромное количество ``комбинированных'' графиков. Например, поверхность с наложенными линиями уровня строится двумя последовательными вызовами функций рисования поверхности и линий уровня (в любом порядке). И совершенно не надо писать специальную функцию (как в Matlab и некоторых других программах) для рисования этого графика. Примеров таких графиков можно привести множество (см. раздел @ref{Hints} и сайт программы @uref{http://mathgl.sf.net/index.html}). +@end enumerate + +Кроме основных концепций я хотел бы остановиться на нескольких, как оказалось, нетривиальных моментах -- способе указания положения графика, осей координат и строковых параметров линий, поверхностей, текста. + +@menu +* Coordinate axes:: +* Line styles:: +* Color scheme:: +* Font styles:: +* Textual formulas:: +@end menu + +@include concept_ru.texi + +@node Graphics setup @MGL{}, Axis settings @MGL{}, General concepts, MGL interface +@end ifset +@ifclear UDAV + +@c ################################################################## +@node Graphics setup @MGL{}, Axis settings @MGL{}, , MGL interface +@end ifclear +@section Настройка графика @MGL{} + +Команды в этой группе влияют на вид всего рисунка. Соответственно они должны располагаться @emph{перед} вызовом функций непосредственно рисующих графики. + +@menu +* Transparency @MGL{}:: +* Lighting @MGL{}:: +* Fog @MGL{}:: +* Default sizes @MGL{}:: +* Zooming @MGL{}:: +* Cutting @MGL{}:: +* Other settings @MGL{}:: +@end menu + +@c ================================================================== +@node Transparency @MGL{}, Lighting @MGL{}, , Graphics setup @MGL{} +@subsection Прозрачность @MGL{} + +Эти команды настраивают тип и степень прозрачности поверхностей. Главной является функция @ref{alpha}, которая включает/выключает прозрачность для всех графиков, созданных после вызова @ref{alpha}. Функция @ref{alphadef} устанавливает величину alpha-канала по умолчанию. Прозрачность можно выключить для отдельного графика с помощью @ref{transparent}. Наконец, функция @ref{transptype} задает тип прозрачности. @sref{Transparent surface sample} + +@cindex alpha +@anchor{alpha} +@deffn {Команда MGL} alpha @code{[val=on]} +Включает/выключает прозрачность для @emph{всего} рисунка. По умолчанию прозрачность выключена. Используйте @code{transparent off} для конкретного графика для выключения прозрачности. +@end deffn +@cindex alphadef +@anchor{alphadef} +@deffn {Команда MGL} alphadef @code{val} +Задает значение прозрачности по умолчанию для всех графиков. Начальное значение 0.5. +@end deffn +@cindex transparent +@anchor{transparent} +@deffn {Команда MGL} transparent @code{val} +Временно включает/возвращает прозрачность графиков. +@end deffn +@cindex transptype +@anchor{transptype} +@deffn {Команда MGL} transptype @code{val} +Задает тип прозрачности. Обычная прозрачность (@samp{0}) -- "закрытые" объекты видны меньше чем закрывающие. "Стеклянная" прозрачность (@samp{1}) -- закрытые и закрывающие объекты единообразно ослабляют интенсивность света (по RGB каналам). "Ламповая" прозрачность (@samp{2}) -- закрытые и закрывающие объекты являются источниками дополнительного освещения (рекомендую установить @code{alphadef 0.3} или меньше в этом случае). @xref{Normal transparency}, @ref{Glass-like transparency}, @ref{Lamp-like transparency}. +@end deffn + +@c ================================================================== +@node Lighting @MGL{}, Fog @MGL{}, Transparency @MGL{}, Graphics setup @MGL{} +@subsection Освещение @MGL{} + +Эти функции настраивают освещение графика. Главная функция @ref{light} включает/выключает освещение графиков построенных после ее вызова. MathGL поддерживает до 10 независимых источников света. Положение, цвет, яркость каждого источника света можно задавать по отдельности. По умолчанию включен только первый (с порядковым номером @code{0}) источник света белого цвета, расположенный сверху. + +@cindex light +@anchor{light} +@deffn {Команда MGL} light @code{[val=on]} +Включает/выключает освещение графика. По умолчанию освещение выключено. +@end deffn +@deffn {Команда MGL} light @code{n val} +Включает/выключает @var{n}-ый источник света. +@end deffn + +@deffn {Команда MGL} light @code{n xpos ypos zpos} ['col'='w' @code{br=0.5}] +Добавляет источник света с номером @var{n} в положение @{@var{xpos}, @var{ypos}, @var{zpos}@} с цветом @var{col} и яркостью @var{br}, которая должна быть в диапазоне [0,1]. +@end deffn + +@cindex ambient +@anchor{ambient} +@deffn {Команда MGL} ambient @code{val} +Задает яркость рассеянного освещения. Значение должно быть в диапазоне [0,1]. +@end deffn + +@c ================================================================== +@node Fog @MGL{}, Default sizes @MGL{}, Lighting @MGL{}, Graphics setup @MGL{} +@subsection Туман @MGL{} + +@cindex fog +@anchor{fog} +@deffn {Команда MGL} fog @code{val [dz=0.25]} +Имитирует туман на графике. Туман начинается на относительном расстоянии @var{dz} от точки обзора и его плотность растет экспоненциально вглубь по закону ~@math{1-exp(-d*z)}. Здесь @emph{z} -- нормализованная на 1 глубина графика. Если @var{d}=@code{0} то туман отсутствует. @sref{Surface in fog sample} +@end deffn + +@c ================================================================== +@node Default sizes @MGL{}, Zooming @MGL{}, Fog @MGL{}, Graphics setup @MGL{} +@subsection Базовые размеры @MGL{} + +Эти команды задают величины большинства параметров графика, включая размеры маркеров, стрелок, толщину линий и т.д. Как и любые другие настройки, они подействуют только на графики созданные после изменения настроек. + +@cindex barwidth +@anchor{barwidth} +@deffn {Команда MGL} barwidth @code{val} +Относительный размер прямоугольников в @code{bars, barh, boxplot}. Значение по умолчанию @code{0.7}. +@end deffn + +@cindex marksize +@anchor{marksize} +@deffn {Команда MGL} marksize @code{val} +Размер маркеров для @ref{1D plotting}. Значение по умолчанию @code{1}. +@end deffn + +@cindex arrowsize +@anchor{arrowsize} +@deffn {Команда MGL} arrowsize @code{val} +Размер стрелок для @ref{1D plotting}, линий и кривых (@pxref{Primitives drawing}). Значение по умолчанию @code{1}. +@end deffn + +@cindex linewidth +@anchor{linewidth} +@deffn {Команда MGL} linewidth @code{val} +Базовая толщина линий. Значения <1 игнорируются. Для значений >1 реальная толщина получается перемножением указанной ширины линии на данное значение. Увеличение ширины линии актуально для больших растровых рисунков. Значение по умолчанию @code{1}. +@end deffn + +@cindex ticklen +@anchor{ticklen} +@deffn {Команда MGL} ticklen @code{val} [@code{stt=1}] +Относительная длина меток осей координат. Значение по умолчанию @code{0.1}. Параметр @var{stt}>0 задает относительную длину подметок, которые в @code{sqrt(1+stt)} раз меньше. +@end deffn + +@cindex tickstl +@anchor{tickstl} +@deffn {Команда MGL} tickstl 'stl' ['sub'=''] +Стиль меток (@var{stl}) и подметок (@var{sub}) осей координат. Если @code{stl=''}, то используется стиль по умолчанию (@samp{k} или @samp{w} в зависимости от типа прозрачности). Если @code{sub=''}, то используется стиль меток (т.е. @var{stl}). +@end deffn + +@c ================================================================== +@node Zooming @MGL{}, Cutting @MGL{}, Default sizes @MGL{}, Graphics setup @MGL{} +@subsection Масштабирование @MGL{} + +Эти команды управляют масштабированием всего рисунка (@ref{zoom}) или отдельной картинки (@ref{plotfactor}). Обычно эти функции используются для удаления пустого места вокруг графиков. + +@cindex plotfactor +@anchor{plotfactor} +@deffn {Команда MGL} plotfactor @code{val} +Масштаб картинки (значение должно быть больше 1). Не рекомендуется устанавливать значения меньше 1.5. Это аналог @ref{zoom}, но применяется только к конкретной картинке, заданной @ref{inplot}. Используйте ноль для включения автоматического масштабирования. +@end deffn + +@cindex zoom +@anchor{zoom} +@deffn {Команда MGL} zoom @code{x1 y1 x2 y2} +Масштабирует весь рисунок. После вызова функции текущий график будет очищен и в дальнейшем рисунок будет содержать только область [x1,x2]*[y1,y2] от исходного рисунка. Координаты @var{x1}, @var{x2}, @var{y1}, @var{y2} меняются в диапазоне от 0 до 1. Внимание! эти настройки не могут быть переписаны никакими другими функциями. Используйте @code{zoom 0 0 1 1} для перехода в масштаб по умолчанию. +@end deffn + +@c ================================================================== +@node Cutting @MGL{}, Other settings @MGL{}, Zooming @MGL{}, Graphics setup @MGL{} +@subsection Обрезание @MGL{} + +Эти команды задают условия когда точка будет исключена (вырезана) из рисования. Замечу, что все точки со значением(-ями) @code{nan} по одной из координат или амплитуде автоматически исключаются из рисования. + +@cindex cut +@anchor{cut} +@deffn {Команда MGL} cut @code{val} +Задает обрезание точек за пределами осей координат. Если @code{on} то такие точки исключаются из рисования (это по умолчанию) иначе они проецируются на ограничивающий прямоугольник. +@end deffn + +@deffn {Команда MGL} cut @code{x1 y1 z1 x2 y2 z2} +Задает границы параллелепипеда внутри которого точки не рисуются. Если границы одинаковы (переменные равны), то параллелепипеда считается пустым. @sref{CutMinMax sample} +@end deffn + +@deffn {Команда MGL} cut 'cond' +Задает условие обрезания по формуле @var{cond}. Это условие исключает точки из рисования если результат вычисления формулы не равен нулю. Установите аргумент @code{''} для выключения условия обрезания. @sref{CutOff sample} +@end deffn + +@c ================================================================== +@node Other settings @MGL{}, , Cutting @MGL{}, Graphics setup @MGL{} +@subsection Прочие настройки @MGL{} + +@cindex font +@anchor{font} +@deffn {Команда MGL} font 'fnt' [@code{val=6}] +Задает стиль и размер шрифта (@pxref{Text printing}). Вначале используется @samp{rC} -- прямой шрифт с выравниванием по центру. По умолчанию размер подписей оси координат в 1.4 раза больше. +@end deffn + +@cindex rotatetext +@anchor{rotatetext} +@deffn {Команда MGL} rotatetext @code{val} +Включает/выключает вращение меток и подписей осей координат вдоль оси. Начальное значение @code{on}. +@end deffn + +@cindex palette +@anchor{palette} +@deffn {Команда MGL} palette 'colors' +Задает палитру как последовательность цветов. Значение по умолчанию @code{"Hbgrcmyhlnqeup"}, что соответствует цветам: темно серый @samp{H}, синий @samp{b}, зеленый @samp{g}, красный @samp{r}, голубой @samp{c}, малиновый @samp{m}, желтый @samp{y}, серый @samp{h}, сине-зеленый @samp{l}, небесно-голубой @samp{n}, оранжевый @samp{q}, желто-зеленый @samp{e}, сине-фиолетовый @samp{u}, фиолетовый @samp{p}. Палитра в основном используется в 1D графиках (@pxref{1D plotting}) для кривых с неопределенным стилем линии. +@end deffn + +@cindex meshnum +@anchor{meshnum} +@deffn {Команда MGL} meshnum @code{num} +Задает ориентировочное число линий в @ref{mesh}, @ref{fall}, @ref{grid}, число стрелок (штрихов) в @ref{vect}, @ref{dew} и число ячеек в @ref{cloud}. По умолчанию (=0) рисуются все линии, стрелки, ячейки. +@end deffn + +@cindex axialdir +@anchor{axialdir} +@deffn {Команда MGL} axialdir 'dir' +Задает ось вращения для @ref{axial}, @ref{torus}. По умолчанию это 'z'. +@end deffn + +@c ================================================================== +@node Axis settings @MGL{}, Transformation matrix @MGL{}, Graphics setup @MGL{}, MGL interface +@section Параметры осей координат @MGL{} + +Этот большой набор команд определяет вид осей и меток координат. Перед построением для каждой точки выполняются 3 преобразования: сначала определяется возможность рисования точки (@pxref{Cutting @MGL{}}), далее применяются формулы перехода к криволинейным координатам и наконец точка отображается. + +@cindex axis +@anchor{axis} +@deffn {Команда MGL} axis @code{x1 y1 x2 y2} +@deffnx {Команда MGL} axis @code{x1 y1 z1 x2 y2 z2} +@cindex ranges +@anchor{ranges} +@deffnx {Команда MGL} ranges @code{x1 x2 y1 y2 [z1=0 z2=0]} +Задает диапазон изменения координат. Если минимальное и максимальное значение координаты равны, то они игнорируются по данному направлению. Также устанавливает размер цветовой шкалы, аналогично команде @code{caxis z1 z2}. Начальные диапазоны равны [-1, 1]. +@end deffn + +@deffn {Команда MGL} axis 'fx' 'fy' ['fz'='' 'fa'=''] +Задает формулы перехода к криволинейным координатам. Каждая строка является математическим выражением, зависящим от старых координат @samp{x}, @samp{y}, @samp{z} и @samp{a} или @samp{c} для цветовой шкалы. Например, для цилиндрических координат будет @code{axis 'x*cos(y)' 'x*sin(y)' 'z'}. Для удаления формул соответствующий параметр должен быть пустым @code{''}. Использование формул преобразования слегка замедляет программу, т.е.. @code{axis '' '' ''} быстрее чем @code{axis '1*x' '1*y' '1*z'}. Параметр @var{fa} задает аналогичную формулу для цветовой шкалы. @xref{Textual formulas}. +@end deffn + +@deffn {Команда MGL} axis @code{how} +Устанавливает одну из предопределенных систем криволинейных координат в зависимости от параметра @var{how}: @samp{0} -- декартова система (нет преобразования координат, наиболее быстрая); @samp{1} -- полярные координаты @math{x_n=x*cos(y),y_n=x*sin(y), z_n=z}; @samp{2} -- сферические координаты @math{x_n=x*sin(y)*cos(z), y_n=x*sin(y)*sin(z), z_n=x*cos(y)}; @samp{3} -- параболические координаты @math{x_n=x*y, y_n=(x*x-y*y)/2, z_n=z}; @samp{4} -- Paraboloidal coordinates @math{x_n=(x*x-y*y)*cos(z)/2, y_n=(x*x-y*y)*sin(z)/2, z_n=x*y}; @samp{5} -- Oblate coordinates @math{x_n=cosh(x)*cos(y)*cos(z), y_n=cosh(x)*cos(y)*sin(z), z_n=sinh(x)*sin(y)}; @samp{6} -- Prolate coordinates @math{x_n=sinh(x)*sin(y)*cos(z), y_n=sinh(x)*sin(y)*sin(z), z_n=cosh(x)*cos(y)}; @samp{7} -- эллиптические координаты @math{x_n=cosh(x)*cos(y), y_n=sinh(x)*sin(y), z_n=z}; @samp{8} -- тороидальные координаты @math{x_n=sinh(x)*cos(z)/(cosh(x)-cos(y)), y_n=sinh(x)*sin(z)/(cosh(x)-cos(y)), z_n=sin(y)/(cosh(x)-cos(y))}; @samp{9} -- бисферические координаты @math{x_n=sin(y)*cos(z)/(cosh(x)-cos(y)), y_n=sin(y)*sin(z)/(cosh(x)-cos(y)), z_n=sinh(x)/(cosh(x)-cos(y))}; @samp{10} -- биполярные координаты @math{x_n=sinh(x)/(cosh(x)-cos(y)), y_n=sin(y)/(cosh(x)-cos(y)), z_n=z}. +@end deffn + +@cindex caxis +@anchor{caxis} +@deffn {Команда MGL} caxis @code{z1 z2} +Задает масштаб цветовой шкалы (c-координаты). Эти значения используются для определения цвета поверхностей и прочих 2D и 3D графиков. Начальный диапазон равен [-1, 1]. +@end deffn + +@cindex origin +@anchor{origin} +@deffn {Команда MGL} origin @code{x0 y0 [z0=nan]} +Задает центр пересечения осей координат. Если одно из значений равно @code{nan}, то выбрается оптимальное положение осей координат по этому направлению. +@end deffn + +@cindex ternary +@anchor{ternary} +@deffn {Команда MGL} ternary @code{val} +Задает рисование треугольных (Ternary) осей координат. Это специальный тип графика для 3 зависимых координат (компонент) @var{a}, @var{b}, @var{c} таких, что @var{a}+@var{b}+@var{c}=1. MathGL использует только 2 независимые координаты @var{a}=x и @var{b}=y поскольку их достаточно для построения всех графиков. При этом третья координата z является независимым параметром для построения линий уровня, поверхностей и т.д. @sref{Ternary plot sample} +@end deffn + +@cindex xrange +@anchor{xrange} +@deffn {Команда MGL} xrange dat [@code{add=off fact=0}] +@cindex yrange +@anchor{yrange} +@deffnx {Команда MGL} yrange dat [@code{add=off fact=0}] +@cindex zrange +@anchor{zrange} +@deffnx {Команда MGL} zrange dat [@code{add=off fact=0}] +@cindex crange +@anchor{crange} +@deffnx {Команда MGL} crange dat [@code{add=off fact=0}] +Задает диапазон изменения x-,y-,z-,c- координат как минимальное и максимальное значение массива @var{dat}. Параметр @var{add} указывает добавлять новый диапазон к существующему или заменять его. Параметр @var{fact} дополнительно расширяет диапазон на величину (@var{Max}-@var{Min})*@var{fact}. +@end deffn + +@deffn {Команда MGL} xrange @code{x1 x2} +@deffnx {Команда MGL} yrange @code{x1 x2} +@deffnx {Команда MGL} zrange @code{x1 x2} +@deffnx {Команда MGL} crange @code{x1 x2} +Задает диапазон изменения x-,y-,z-,c- координат. См. также @ref{axis}. +@end deffn + +@cindex xtick +@anchor{xtick} +@deffn {Команда MGL} xtick @code{val [sub=0 org=nan]} +@cindex ytick +@anchor{ytick} +@deffnx {Команда MGL} ytick @code{val [sub=0 org=nan]} +@cindex ztick +@anchor{ztick} +@deffnx {Команда MGL} ztick @code{val [sub=0 org=nan]} +@cindex ctick +@anchor{ctick} +@deffnx {Команда MGL} ctick @code{val} +Задает шаг меток осей @var{val}, число подметок @var{ns} и начальное положение меток @var{org}. Переменная @var{val} задает шаг меток (если положительна) или их число на оси (если отрицательна). Нулевое значение задает логарифмические метки. Если @var{org}=@code{NAN}, то используется значение из @ref{origin}. +@end deffn + +@deffn {Команда MGL} xtick 'templ' +@deffnx {Команда MGL} ytick 'templ' +@deffnx {Команда MGL} ztick 'templ' +@deffnx {Команда MGL} ctick 'templ' +Задает шаблоны для меток вдоль x-,y-,z-оси или colorbar. Шаблон может содержать и символы TeX. Если @var{xtt}, @var{ytt}, @var{ztt}, @var{ctt}=@code{''}, то используется шаблон по умолчанию (в простейшем случае @samp{%.2g}). Установка шаблона выключает автоматическое улучшение вида меток. +@end deffn + +@deffn {Команда MGL} xtick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...] +@deffnx {Команда MGL} ytick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...] +@deffnx {Команда MGL} ztick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...] +Задает явное положение @var{val} и подписи @var{lbl} для меток вдоль оси. Метки могут содержать и символы TeX. +@end deffn + +@cindex adjust +@anchor{adjust} +@deffn {Команда MGL} adjust ['dir'='xyzc'] +Автоматически задает шаг меток осей, число подметок и начальное положение меток для осей координат @var{dir} в виде наиболее удобном для человека. +@end deffn + + +@c ################################################################## +@node Transformation matrix @MGL{}, Export to file @MGL{}, Axis settings @MGL{}, MGL interface +@section Матрица преобразования @MGL{} + +Эти команды контролируют где и как график будет расположен. Существует определенный порядок вызова этих функций для лучшего вида графика. Вначале должны вызываться команды @ref{subplot} или @ref{inplot} для указания местоположения вывода. После них -- команды вращения @ref{rotate} и сжатия @ref{aspect}. И наконец любые другие функции для рисования графика. Вместо вращения графика можно вызвать команды @ref{columnplot} для расположения графиков в столбец одного над другим или @ref{stickplot} для расположения в линейку. + +@cindex subplot +@anchor{subplot} +@deffn {Команда MGL} subplot @code{nx ny m [dx=0 dy=0]} +Помещает последующий вывод в @var{m}-ую ячейку сетки размером @var{nx}*@var{ny} от всего рисунка. Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться первой для создания "подграфика". С эстетической точки зрения не рекомендуется вызывать эту функцию с различными (или не кратными) размерами сетки. Ячейка может быть дополнительно сдвинута относительно своего обычного положения на относительный размер @var{dx}, @var{dy}. +@end deffn + +@deffn {Команда MGL} subplot @code{nx ny m} 'style' +Аналогично предыдущему, но место для осей/colorbar резервируется только если строка @var{style} содержит: @samp{L} или @samp{<} -- с левого края, @samp{R} или @samp{>} -- с правого края, @samp{A} или @samp{^} -- с верхнего края, @samp{U} или @samp{_} -- с нижнего края. +@end deffn + +@cindex inplot +@anchor{inplot} +@deffn {Команда MGL} inplot @code{x1 x2 y1 y2 [rel=off]} +Помещает последующий вывод в прямоугольную область [@var{x1}, @var{x2}]*[@var{y1}, @var{y2}] (исходный размер [0,1]*[0,1]). Эта функция позволяет поместить график в произвольную область рисунка. Если параметр @var{rel}=@code{on}, то используется позиция относительно текщего @ref{subplot} (или @ref{inplot} с @var{rel}=@code{off}). Функция сбрасывает матрицу трансформации (повороты и сжатие графика) и должна вызываться первой для создания "подграфика". +@end deffn + +@cindex columnplot +@anchor{columnplot} +@deffn {Команда MGL} columnplot @code{num ind [d=0]} +Помещает последующий вывод в @var{ind}-ую строку столбца из @var{num} строк. Положение столбца выбирается относительно последнего вызова @ref{subplot} (или @ref{inplot} с @var{rel}=@code{off}). Параметр @var{d} задает дополнительный зазор между строк. @sref{ColumnPlot sample} +@end deffn + +@cindex stickplot +@anchor{stickplot} +@deffn {Команда MGL} stickplot @code{num ind tet phi} +Помещает последующий вывод в @var{ind}-ую ячейку "бруска" из @var{num} ячеек. При этом сам брусок повернут на углы @var{tet}, @var{phi}. Положение выбирается относительно последнего вызова @ref{subplot} (или @ref{inplot} с @var{rel}=@code{off}). @sref{StickPlot sample} +@end deffn + +@cindex rotate +@anchor{rotate} +@deffn {Команда MGL} rotate @code{tetz tetx [tety=0]} +Вращает систему координат относительно осей @{x, z, y@} последовательно на углы @var{tetx}, @var{tetz}, @var{tety}. +@end deffn + +@deffn {Команда MGL} rotate @code{tet x y z} +Вращает систему координат относительно вектора @{@var{x}, @var{y}, @var{z}@} на угол @var{tet}. +@end deffn + +@cindex aspect +@anchor{aspect} +@deffn {Команда MGL} aspect @code{ax ay [az=1]} +Устанавливает соотношение размеров осей в отношении @var{ax:ay:az}. Для лучшего вида следует вызывать после функции @ref{rotate}. +@end deffn + +@cindex perspective +@anchor{perspective} +@deffn {Команда MGL} perspective @code{val} +Добавляет (включает) перспективу для графика. Параметр @math{val ~ 1/z_@{eff@} \in [0,1)}. По умолчанию (@code{val=0}) перспектива отключена. +@end deffn + +@c ################################################################## +@node Export to file @MGL{}, Primitives drawing @MGL{}, Transformation matrix @MGL{}, MGL interface +@section Экспорт в файл @MGL{} + +@cindex write +@anchor{write} +@deffn {Команда MGL} write 'fname' [@code{solid=off}] +Экспортирует текущий кадр в файл 'fname' (тип определяется по расширению). Параметр @var{solid} задает вывод картинки на текущем фоне (обычно белом) или полупрозрачной. Если 'fname'='', то используется имя @samp{frame####.jpg}, где @samp{####} -- текущий номер кадра. +@end deffn + +@cindex setsize +@anchor{setsize} +@deffn {Команда MGL} setsize @code{w h} +Изменяет размер картинки в пикселях. Функция должна вызываться @strong{перед} любыми функциями построения потому что полностью очищает содержимое рисунка. В некоторых программах исполнение этой команды может запрещено. +@end deffn + + +@c ################################################################## +@node Primitives drawing @MGL{}, Text printing @MGL{}, Export to file @MGL{}, MGL interface +@section Рисование примитивов + +Эти команды рисуют рисуют простые объекты типа линий, точек, сфер, капель, конусов, и т.д. + +@cindex clf +@anchor{clf} +@deffn {Команда MGL} clf +Очищает рисунок и заполняет его цветом по умолчанию (обычно белым). +@end deffn + +@cindex ball +@anchor{ball} +@deffn {Команда MGL} ball @code{x y} ['col'='r'] +@deffnx {Команда MGL} ball @code{x y z} ['col'='r'] +Рисует точку (шарик) с координатами @{@var{x}, @var{y}, @var{z}@} и цветом @var{col}. +@end deffn + +@cindex line +@anchor{line} +@deffn {Команда MGL} line @code{x1 y1 x2 y2} ['stl'=''] +@deffnx {Команда MGL} line @code{x1 y1 z1 x2 y2 z2} ['stl'=''] +Рисует геодезическую линию (декартовых координатах -- прямую) из точки @{@var{x1},@var{y1},@var{z1}@} в @{@var{x2},@var{y2},@var{z2}@} использую стиль линии @var{stl}. Кривая рисуется даже если часть ее лежит вне диапазона осей координат. +@end deffn + +@cindex curve +@anchor{curve} +@deffn {Команда MGL} curve @code{x1 y1 dx1 dy1 x2 y2 dx2 dy2} ['stl'=''] +@deffnx {Команда MGL} curve @code{x1 y1 z1 dx1 dy1 dz1 x2 y2 z2 dx2 dy2 dz2} ['stl'=''] +Рисует кривую Безье из точки @{@var{x1},@var{y1},@var{z1}@} в @{@var{x2},@var{y2},@var{z2}@} использую стиль линии @var{stl}. Касательные в точках пропорциональны @{@var{dx1},@var{dy1},@var{dz1}@}, @{@var{dx2},@var{dy2},@var{dz2}@}. Кривая рисуется даже если часть ее лежит вне диапазона осей координат. +@end deffn + +@cindex facex +@anchor{facex} +@deffn {Команда MGL} facex @code{x0 y0 z0 wy wz} ['stl'='' @code{d1=0 d2=0}] +@cindex facey +@anchor{facey} +@deffnx {Команда MGL} facey @code{x0 y0 z0 wx wz} ['stl'='' @code{d1=0 d2=0}] +@cindex facez +@anchor{facez} +@deffnx {Команда MGL} facez @code{x0 y0 z0 wx wy} ['stl'='' @code{d1=0 d2=0}] +Рисует закрашенный прямоугольник (грань) перпендикулярно оси [x,y,z] в точке @{@var{x0}, @var{y0}, @var{z0}@} цветом @var{stl} и шириной @var{wx}, @var{wy}, @var{wz} вдоль соответствующего направления. При этом цвет может быть один для всей грани, или различным для разных вершин если указаны все 4 цвета (полезно для градиента цвета, например @samp{wwrr}). Параметры @var{d1}!=0, @var{d2}!=0 задают дополнительный сдвиг последней точки (т.е. рисуют четырехугольник). Грань будет нарисована даже если часть ее лежит вне диапазона осей координат. +@end deffn + +@cindex sphere +@anchor{sphere} +@deffn {Команда MGL} sphere @code{x0 y0 r} ['col'='r'] +@deffnx {Команда MGL} sphere @code{x0 y0 z0 r} ['col'='r'] +Рисует сферу радиуса @var{r} с центром в точке @{@var{x}, @var{y}, @var{z}@} цветом @var{stl}. +@end deffn + +@cindex drop +@anchor{drop} +@deffn {Команда MGL} drop @code{x0 y0 dx dy r} ['col'='b' @code{sh=1 asp=1}] +@deffnx {Команда MGL} drop @code{x0 y0 z0 dx dy dz r} ['col'='b' @code{sh=1 asp=1}] +Рисует каплю радиуса @var{r} в точке @{@var{x0},@var{y0},@var{z0}@} вытянутую вдоль направления @{@var{dx},@var{dy},@var{dz}@} цветом @var{col}. Параметр @var{sh} определяет степень вытянутости: @samp{0} -- сфера, @samp{1} -- классическая капля. Параметр @var{asp} определяет относительную ширину капли (аналог "эллиптичности" для сферы). @sref{Drops sample} +@end deffn + +@cindex cone +@anchor{cone} +@deffn {Команда MGL} cone @code{x1 y1 z1 x2 y2 z2 r1} [@code{r2=-1} 'stl'='' @code{edge=off}] +Рисует трубу (или усеченный конус если @var{edge}=@code{off}) между точками @{@var{x1},@var{y1},@var{z1}@}, @{@var{x2},@var{y2},@var{z2}@} с радиусами на концах @var{r1}, @var{r2}. Если @var{r2}<0, то полагается @var{r2}=@var{r1}. Цвет конуса задается строкой @var{stl}. +@end deffn + +@cindex rect +@anchor{rect} +@deffn {Команда MGL} rect @code{x1 y1 x2 y2} ['st'=''] +@deffnx {Команда MGL} rect @code{x1 y1 z1 x2 y2 z2} ['st'=''] +Рисует закрашенный прямоугольник (грань) с противоположными вершинами в точках @{@var{x1},@var{y1},@var{z1}@}, @{@var{x2},@var{y2},@var{z2}@} цветом @var{stl}. При этом цвет может быть один для всей грани, или различным для разных вершин если указаны все 4 цвета (полезно для градиента цвета, например @samp{wwrr}). Грань будет нарисована даже если часть ее лежит вне диапазона осей координат. +@end deffn + +@c ################################################################## +@node Text printing @MGL{}, Axis and Colorbar @MGL{}, Primitives drawing @MGL{}, MGL interface +@section Вывод текста @MGL{} + +Команды для вывода текста позволяют вывести строку текста в произвольном месте рисунка, в произвольном направлении и вдоль произвольной кривой. Можно использовать произвольное начертание шрифта и многие ТеХ-ие команды (детальнее @pxref{Font styles}). Аргумент @var{size} определяет размер текста: размер шрифта если положителен или относительный размер (=-@var{size}*@var{fontsize}) если отрицателен. + +Параметры шрифта задаются строкой, которая может содержать символы стиля (@samp{rbiwou}) и/или выравнивания (@samp{LRC}). Также строка может содержать символы цвета @samp{wkrgbcymhRGBCYMHW} (@pxref{Line styles}) после символа @samp{:}. Стили шрифта: @samp{r} -- прямой, @samp{i} -- курсив, @samp{b} -- жирный, @samp{w} -- контурный, @samp{o} -- надчеркнутый, @samp{u} -- подчеркнутый. По умолчанию используется прямой шрифт. Типы выравнивания: @samp{L} -- по левому краю (по умолчанию), @samp{C} -- по центру, @samp{R} -- по правому краю. Например, строка @samp{iC:b} соответствует курсиву синего цвета с выравниванием по центру. По умолчанию используются параметры, определенные командой @ref{font}. + +Если строка содержит символы @samp{aA}, то текст выводится в абсолютных координатах (полагаются в диапазоне [0,1]). При этом используются координаты относительно рисунка (если указано @samp{A}) или относительно последнего @ref{subplot}/@ref{inplot} (если указано @samp{a}). + +@cindex text +@anchor{text} +@deffn {Команда MGL} text @code{x y} 'text' ['fnt'='' @code{size=-1.4}] +@deffnx {Команда MGL} text @code{x y z} 'text' ['fnt'='' @code{size=-1.4}] +Выводит строку @var{text} от точки @{@var{x},@var{y},@var{z}@} шрифтом @var{fnt} и размером @var{size}. +@end deffn + +@deffn {Команда MGL} text @code{x y dx dy} 'text' [@code{size=-1.4}] +@deffnx {Команда MGL} text @code{x y z dx dy dz} 'text' [@code{size=-1.4}] +Выводит строку @var{text} от точки @{@var{x},@var{y},@var{z}@} вдоль направления @{@var{dx},@var{dy},@var{dz}@} шрифтом @var{fnt} и размером @var{size}. +@end deffn + +@deffn {Команда MGL} text ydat 'text' ['fnt'='' @code{size=-1 zval=nan}] +@deffnx {Команда MGL} text xdat ydat 'text' ['fnt'='' @code{size=-1 zval=nan}] +@deffnx {Команда MGL} text xdat ydat zdat 'text' ['fnt'='' @code{size=-1}] +Выводит строку @var{text} вдоль кривой @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} шрифтом @var{font}. Строка @var{font} может содержать символы: @samp{t} для вывода текста под кривой (по умолчанию), или @samp{T} для вывода текста над кривой. Если массив @var{xdat} не указан, то используется массив со значениями равно распределенными вдоль оси x. Если массив @var{zdat} не указан, то используется @var{zdat}[i] = @var{zval}. @sref{Text sample} +@end deffn + +@cindex title +@anchor{title} +@deffn {Команда MGL} title 'text' ['fnt'='' @code{size=-2}] +Выводит строку @var{text} как заголовок (сверху рисунка). Может использоваться в любом месте (даже внутри @ref{subplot}). +@end deffn + +@cindex fgets +@anchor{fgets} +@deffn {Команда MGL} fgets @code{x y} 'fname' [@code{n=0} 'fnt'='' @code{size=-1.4}] +@deffnx {Команда MGL} fgets @code{x y z} 'fname' [@code{n=0} 'fnt'='' @code{size=-1.4}] +Выводит @var{n}-ую строку файла @var{fname} от точки @{@var{x},@var{y},@var{z}@} шрифтом @var{fnt} и размером @var{size}. +@end deffn + + +@c ################################################################## +@node Axis and Colorbar @MGL{}, Legend @MGL{}, Text printing @MGL{}, MGL interface +@section Оси и Colorbar @MGL{} + +Эти команды рисуют объекты для "измерения" типа осей координат, цветовой таблицы (colorbar), сетку по осям, обрамляющий параллелепипед и подписи по осям координат. См. также @ref{Axis settings @MGL{}}. + +@cindex axis +@c @anchor{} +@deffn {Команда MGL} axis ['dir'='xyz' @code{adjust=off}] +Рисует оси координат и метки на них (@pxref{Axis settings @MGL{}}) в направлениях, указанных строкой @var{dir}. Если строка содержит символ @samp{_}, то подписи меток отображаться не будут. Шрифт подписей определяется командой @ref{font}. Метки будут "подогнаны" если @var{adjust}=@code{on} (с помощью вызова @code{adjust 'dir'}). +@end deffn + +@cindex colorbar +@anchor{colorbar} +@deffn {Команда MGL} colorbar ['sch'='' @code{pos=0}] +Рисует полосу соответствия цвета и числовых значений (colorbar) для цветовой схемы @var{sch} (используется текущая для @code{sch=''}) с краю от графика. Параметр @var{pos} задает местоположение: @samp{0} - справа (по умолчанию), @samp{1} - слева, @samp{2} - сверху, @samp{3} - снизу. Если строка @var{sch} содержит @samp{<>^_}, то параметр @var{pos} определяется как: @code{pos=0} для @samp{>} (справа), @code{pos=1} для @samp{<} (слева), @code{pos=2} для @samp{^} (сверху), @code{pos=3} для @samp{_} (снизу). Если строка содержит @samp{A}, то используются абсолютные координаты (относительно рисунка). @sref{Dens sample} +@end deffn + +@deffn {Команда MGL} colorbar vdat ['sch'='' @code{pos=0}] +Аналогично предыдущему, но для цветовой схемы без сглаживания с заданными значениями @var{vdat}. @sref{ContD sample} +@end deffn + +@deffn {Команда MGL} colorbar 'sch' @code{pos x y w h} +Аналогично первому, но в произвольном месте графика @{@var{x}, @var{y}@} (полагаются в диапазоне [0,1]). Параметры @var{w}, @var{h} задают относительную ширину и высоту colorbar. +@end deffn + +@cindex grid +@anchor{grid} +@deffn {Команда MGL} grid ['dir'='xyz' 'pen'='B'] +Рисует линии сетки в направлениях перпендикулярным @var{dir}. Шаг сетки такой же как у меток осей координат. Стиль линий задается параметром @var{pen} (по умолчанию -- сплошная темно синяя линия @samp{B-}). +@end deffn + +@cindex box +@anchor{box} +@deffn {Команда MGL} box ['stl'='k' @code{ticks=on}] +Рисует ограничивающий параллелепипед цветом 'stl'. При @code{ticks=on} рисуются метки в соответствии с текущими настройками осей координат @ref{axis}. +@end deffn + +@cindex xlabel +@anchor{xlabel} +@deffn {Команда MGL} xlabel 'text' [@code{pos=0 size=-1.4 shift=0}] +@cindex ylabel +@anchor{ylabel} +@deffnx {Команда MGL} ylabel 'text' [@code{pos=0 size=-1.4 shift=0}] +@cindex zlabel +@anchor{zlabel} +@deffnx {Команда MGL} zlabel 'text' [@code{pos=0 size=-1.4 shift=0}] +@cindex tlabel +@anchor{tlabel} +@deffnx {Команда MGL} tlabel 'text' [@code{pos=0 size=-1.4 shift=0}] +Выводит подпись @var{text} для x-,y-,z-,t-оси (где @samp{t} -- ``тернарная'' ось @math{t=1-x-y}). Параметр @var{pos} задает положение подписи: при @var{pos}=0 -- по центру оси, при @var{pos}>0 -- около максимальных значений, при @var{pos}<0 -- около минимальных значений. Параметр @var{size} задает размер шрифта (по умолчанию в 1.4 раза больше чем у меток). @xref{Text printing @MGL{}}. +@end deffn + +@c ################################################################## +@node Legend @MGL{}, 1D plotting @MGL{}, Axis and Colorbar @MGL{}, MGL interface +@section Легенда @MGL{} + +Эти команды обеспечивают рисование легенды графика (полезно для @ref{1D plotting}). Запись в легенде состоит из двух строк: одна для стиля линии и маркеров, другая с текстом описания (с включенным разбором TeX-их команд), накапливаемые во внутренние массивы с помощью команды @ref{addlegend} или опции @ref{legend}. Положение легенды можно задать автоматически или вручную. Параметры @var{font} и @var{size} задают стиль и размер шрифта. Параметр @var{llen} задает относительную ширину примера линии. Ели стиль линии пустой, то соответствующий текст печатается без отступа. Если строка @var{font} содержит символ @samp{A}, то координаты легенды считаются относительно картинки (а не текущего subplot). @sref{Legend sample} + +@cindex legend +@anchor{legend} +@deffn {Команда MGL} legend [@code{pos=3} 'fnt'='rL' @code{size=-1 llen=0.1}] +Рисует легенду из накопленных записей шрифтом @var{fnt} размером @var{size}. Параметр @var{pos} задает положение легенды: @samp{0} -- в нижнем левом углу, @samp{1} -- нижнем правом углу, @samp{2} -- верхнем левом углу, @samp{3} -- верхнем правом углу (по умолчанию). +@end deffn + +@deffn {Команда MGL} legend @code{x y} ['fnt'='rL' @code{size=-1 llen=0.1}] +Рисует легенду из накопленных записей шрифтом @var{font} размером @var{size}. Положение легенды задается параметрами @var{x}, @var{y}, которые полагаются нормированными в диапазоне [0,1]. +@end deffn + +@cindex addlegend +@anchor{addlegend} +@deffn {Команда MGL} addlegend 'text' 'stl' +Добавляет описание @var{text} кривой со стилем @var{stl} (@pxref{Line styles}) во внутренний массив записей легенды. Максимальное число записей 100. +@end deffn + +@cindex clearlegend +@anchor{clearlegend} +@deffn {Команда MGL} clearlegend +Очищает внутренний массив записей легенды. +@end deffn + +@cindex legendbox +@anchor{legendbox} +@deffn {Команда MGL} legendbox @code{val} +Включает/выключает рисование прямоугольника вокруг легенды. По умолчанию (=@code{on}) прямоугольник рисуется. +@end deffn + +@cindex legendmarks +@anchor{legendmarks} +@deffn {Команда MGL} legendmarks @code{val} +Задает число маркеров в легенде. По умолчанию используется 1 маркер. +@end deffn + +@c ################################################################## +@node 1D plotting @MGL{}, 2D plotting @MGL{}, Legend @MGL{}, MGL interface +@section 1D графики @MGL{} + +Эти команды строят графики для одномерных (1D) массивов. Одномерными считаются массивы, зависящие только от одного параметра (индекса) подобно кривой в параметрической форме @{x(i),y(i),z(i)@}, i=1...n. Есть 5 основных типов 1D графиков: линия (@ref{plot}), линия с заполнением (@ref{area}), ступеньки (@ref{step}), прямоугольники (@ref{bars}, @ref{barh}) и вертикальные линии (@ref{stem}). Все эти типы графиков имеют похожий интерфейс. Есть версии для рисования в пространстве и на плоскости. В последнем случае имеется возможность использования только одного массива. Стиль линии и маркеров указывается строковой переменной. Если она равна @code{''}. Кроме того, есть еще несколько типов графиков для одномерных массивов, имеющих другой интерфейс и вид: поверхность вращения кривой (@ref{torus}), диаграмма (@ref{chart}), размер ошибки (@ref{error}), маркеры переменного размера (@ref{mark}), трубками (@ref{tube}) и т.д. @sref{1D plot sample} + +График рисуется для каждой строки если один из массивов матрица. Размер по 1-ой координате @strong{должен быть одинаков} для всех массивов @code{xdat.nx=ydat.nx=zdat.nx}. Если массив @var{xdat} не указан, то используется массив со значениями равно распределенными вдоль оси x. Если массив @var{zdat} не указан, то используется @var{zdat}[i] = @var{zval}. Строка @var{stl} задает цвет и стиль линии и маркеров (@pxref{Line styles}). По умолчанию (@code{stl=''}) рисуется сплошная линия с текущим цветом из палитры. + +@cindex plot +@anchor{plot} +@deffn {Команда MGL} plot ydat ['stl'='' @code{zval=nan}] +@deffnx {Команда MGL} plot xdat ydat ['stl'='' @code{zval=nan}] +@deffnx {Команда MGL} plot xdat ydat zdat ['stl'=''] +Рисует ломанную линию между точками @{@var{x}[i], @var{y}[i], @var{z}[i]@}. См. также @ref{area}, @ref{step}, @ref{stem}, @ref{tube}, @ref{mark}, @ref{error}, @ref{belt}, @ref{tens}. @sref{Plot sample} +@end deffn + + +@cindex radar +@anchor{radar} +@deffn {Команда MGL} radar adat ['stl'='' @code{r=-1}] +Рисует radar chart, представляющий собой ломанную с вершинами на радиальных линиях (типа ломанной в полярных координатах). График рисуется для каждой строки если один из массивов матрица. Параметр @var{r} задает дополнительный сдвиг данных (т.е. используется @var{a}+@var{r} вместо @var{a}). Если @code{r<0}, то @code{r=max(0, -min(a)}. Если @var{stl} содержит символ @samp{#}, то также рисуется "сетка" (радиальные линии и круг для @var{r}). См. также @ref{plot}. @sref{Radar sample} +@end deffn + +@cindex tens +@anchor{tens} +@deffn {Команда MGL} tens ydat cdat ['stl'='' @code{zval=nan}] +@deffnx {Команда MGL} tens xdat ydat cdat ['stl'='' @code{zval=nan}] +@deffnx {Команда MGL} tens xdat ydat zdat cdat ['stl'=''] +Рисует ломанную линию по точкам @{@var{x}[i], @var{y}[i], @var{z}[i]@} с цветом, определяемым массивом @var{c}[i] (типа графика натяжений). См. также @ref{plot}, @ref{mesh}, @ref{fall}. @sref{Tens sample} +@end deffn + +@cindex area +@anchor{area} +@deffn {Команда MGL} area ydat ['stl'='' @code{zval=nan}] +@deffnx {Команда MGL} area xdat ydat ['stl'='' @code{zval=nan}] +@deffnx {Команда MGL} area xdat ydat zdat ['stl'=''] +Рисует ломанную линию по точками @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} и закрашивает ее вниз до плоскости осей координат. Можно использовать градиентное закрашивание если число указанных цветов в @var{stl} равно удвоенному числу кривых для построения. Если строка содержит символ @samp{a}, то линии рисуются одна поверх другой (с суммированием) -- того же эффекта можно достичь вызовом @code{cumsum ydat 'y'} перед построением графика. См. также @ref{plot}, @ref{bars}, @ref{stem}, @ref{region}. @sref{Area sample} +@end deffn + +@cindex region +@anchor{region} +@deffn {Команда MGL} region fdat gdat ['stl'='' @code{inside=off}] +@deffnx {Команда MGL} region xdat fdat gdat ['stl'='' @code{inside=off}] +Закрашивает область между 2 кривыми @{@var{xdat}[i], @var{fdat}[i]@} и @{@var{xdat}[i], @var{gdat}[i]@}. При @code{inside=off} закрашивается только область y12. Размеры массивов по 2-му индексу @var{tr}, @var{g1}, @var{g2} и размер по 3-му индексу массива @var{adat} должны быть одинаковы. См. также @ref{surf3}. +@end deffn + + +@c ################################################################## +@node Dual plotting @MGL{}, Vector fields @MGL{}, 3D plotting @MGL{}, MGL interface +@section Парные графики @MGL{} + +Эти команды строят графики для двух связанных массивов. Есть несколько основных типов 3D графиков: поверхность и поверхность уровня с окраской по второму массиву (@ref{surfc}, @ref{surf3c}), поверхность и поверхность уровня с прозрачностью по второму массиву (@ref{surfa}, @ref{surf3a}), плитки переменного размера (@ref{tiles}), диаграмма точечного отображения (@ref{map}), STFA диаграмма (@ref{stfa}). В командах @ref{surf3a} и @ref{surf3c} значения уровней можно задавать автоматически и вручную. Каждый тип графика имеет похожий интерфейс. Есть версия для рисования одного массива с автоматическими координатами и версия для параметрически заданного массива. + +Строка @var{sch} задает цветовую схему (@pxref{Color scheme}). Предыдущая цветовая схема используется по умолчанию. Массивы @var{x}, @var{y}, @var{z} могут быть векторами (не 3d массивами как @var{a}). Если массивы @var{xdat}, @var{ydat}, @var{zdat} не указаны, то используются массивы со значениями равно распределенными вдоль осей x, y, z. + +@cindex surfc +@anchor{surfc} +@deffn {Команда MGL} surfc zdat cdat ['sch'=''] +@deffnx {Команда MGL} surfc xdat ydat zdat cdat ['sch'=''] +Рисует параметрически заданную поверхность @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} с цветом, заданным массивом @var{cdat}[i,j]. Если @var{sch} содержит @samp{#}, то на поверхности рисуется сетка. См. также @ref{surf}, @ref{surfa}, @ref{surf3c}. @sref{SurfC sample} +@end deffn + +@cindex surf3c +@anchor{surf3c} +@deffn {Команда MGL} surf3c adat cdat @code{val} ['sch'=''] +@deffnx {Команда MGL} surf3c xdat ydat zdat adat cdat @code{val} ['sch'=''] +Рисует поверхность уровня для 3d массива, заданного параметрически @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) при @var{a}(x,y,z)=@var{val}. Аналогично @ref{surf3}, но цвет задается массивом @var{cdat}. Если @var{sch} содержит @samp{#}, то рисуется сетчатая поверхность. См. также @ref{surf3}, @ref{surfc}, @ref{surf3a}. @sref{Surf3C sample} +@end deffn + +@deffn {Команда MGL} surf3c adat cdat ['sch'='' @code{num=5}] +@deffnx {Команда MGL} surf3c xdat ydat zdat adat cdat ['sch'='' @code{num=5}] +Рисует @var{num} поверхностей уровня равномерно распределенных в интервале цветовой шкалы (см. @ref{caxis}). +@end deffn + +@cindex surfa +@anchor{surfa} +@deffn {Команда MGL} surfa zdat cdat ['sch'=''] +@deffnx {Команда MGL} surfa xdat ydat zdat cdat ['sch'=''] +Рисует параметрически заданную поверхность @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} с прозрачностью, заданным массивом @var{cdat}[i,j]. Если @var{sch} содержит @samp{#}, то на поверхности рисуется сетка. См. также @ref{surf}, @ref{surfc}, @ref{surf3a}. @sref{SurfA sample} +@end deffn + +@cindex surf3a +@anchor{surf3a} +@deffn {Команда MGL} surf3a adat cdat @code{val} ['sch'=''] +@deffnx {Команда MGL} surf3a xdat ydat zdat adat cdat @code{val} ['sch'=''] +Рисует поверхность уровня для 3d массива, заданного параметрически @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) при @var{a}(x,y,z)=@var{val}. Аналогично @ref{surf3}, но прозрачность задается массивом @var{cdat}. Если @var{sch} содержит @samp{#}, то рисуется сетчатая поверхность. См. также @ref{surf3}, @ref{surfa}, @ref{surf3c}. @sref{Surf3A sample} +@end deffn + +@deffn {Команда MGL} surf3a adat cdat ['sch'='' @code{num=5}] +@deffnx {Команда MGL} surf3a xdat ydat zdat adat cdat ['sch'='' @code{num=5}] +Рисует @var{num} поверхностей уровня равномерно распределенных в интервале цветовой шкалы (см. @ref{caxis}). +@end deffn + +@cindex tiles +@anchor{tiles} +@deffn {Команда MGL} tiles zdat rdat ['sch'=''] +@deffnx {Команда MGL} tiles xdat ydat zdat rdat ['sch'=''] +Рисует плитки для параметрически заданной поверхности @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. Аналогично @ref{tile}, но размер плиток задается массивов @var{rdat}. Это создает эффект "прозрачности" при экспорте в файлы EPS. См. также @ref{surfa}, @ref{tile}. @sref{TileS sample} +@end deffn + +@cindex map +@anchor{map} +@deffn {Команда MGL} map udat vdat ['sch'='' @code{pnts=on}] +@deffnx {Команда MGL} map xdat ydat udat vdat ['sch'='' @code{pnts=on}] +Визуализирует точечное отображение для матриц @{@var{udat}, @var{vdat} @} параметрически зависящих от координат @var{xdat}, @var{ydat}. Исходное положение ячейки задает ее цвет. Высота пропорциональна якобиану Jacobian(udat,vdat). График является аналогом диаграммы Арнольда. Если @code{pnts=off}, то рисуются грани, иначе цветные точки рисуются в узлах матриц (полезно для "запутанного" отображения). @sref{Map sample} +@end deffn + +@cindex stfa +@anchor{stfa} +@deffn {Команда MGL} stfa re im @code{dn} ['sch'='' @code{pnts=on}] +@deffnx {Команда MGL} stfa xdat ydat re im @code{dn} ['sch'='' @code{pnts=on}] +Рисует спектрограмму комплексного массива @var{re}+i*@code{im} для Фурье размером @var{dn} точек. Параметр @var{dn} -- любое четное число. Например в 1D случае, результатом будет график плотности от массива @math{res[i,j]=|\sum_d^dn exp(I*j*d)*(re[i*dn+d]+I*im[i*dn+d])|/dn} размером @{int(nx/dn), dn, ny@}. Массивы @var{re}, @var{im} параметрически зависят от координат @var{xdat}, @var{ydat}. @sref{STFA sample} +@end deffn + + + + +@c ################################################################## +@node Vector fields @MGL{}, Other plotting @MGL{}, Dual plotting @MGL{}, MGL interface +@section Векторные поля @MGL{} + +Эти функции рисуют графики для 2D и 3D векторных полей. Есть несколько типов графиков: просто векторное поле (@ref{vect}), вектора вдоль траектории (@ref{traj}), векторное поле каплями (@ref{dew}), нити тока (@ref{flow}), трубки тока (@ref{pipe}). Каждый тип графика имеет похожий интерфейс. Есть версия для рисования одного массива с автоматическими координатами и версия для параметрически заданного массива. + +Строка @var{sch} задает цветовую схему (@pxref{Color scheme}). Предыдущая цветовая схема используется по умолчанию. Все размеры массивов @var{ax} и @var{ay} должны быть одинаковы. Младшие размерности массивов @var{x}, @var{y} и @var{ax} должны быть одинаковы. Массивы @var{x} и @var{y} могут быть векторами (не матрицами как @var{ax}). График строится для каждого z среза @var{ax}, @var{ay} для 2D случаев. + +@cindex traj +@anchor{traj} +@deffn {Команда MGL} traj xdat ydat udat vdat ['sch'='' @code{zval=nan len=0}] +@deffnx {Команда MGL} traj xdat ydat zdat udat vdat wdat ['sch'='' @code{len=0}] +Рисует вектора @{@var{udat}, @var{vdat}, @var{wdat}@} вдоль кривой @{@var{xdat}, @var{ydat}, @var{zdat}@}. Длина векторов пропорциональна @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. Строка @var{pen} задает цвет (@pxref{Line styles}). По умолчанию (@code{pen=''}). Параметр @var{len} задает фактор длины векторов (если не нуль) или выбирать длину пропорционально расстоянию между точками кривой (если @var{len}=0). См. также @ref{vect}. @sref{Traj sample} +@end deffn + +@cindex vect +@anchor{vect} +@deffn {Команда MGL} vect udat vdat ['sch'='' @code{zval=nan flag=0}] +@deffnx {Команда MGL} vect xdat ydat udat vdat ['sch'='' @code{zval=nan flag=0}] +Рисует векторное поле @{@var{udat}, @var{vdat}@} параметрически зависящее от координат @var{xdat}, @var{ydat} на плоскости при @var{z}=@var{zval}. Длина и цвет векторов пропорциональна @math{\sqrt@{ax^2+ay^2@}}. Число рисуемых векторов зависит от @ref{meshnum}. Параметр @var{flag} побитовый флаг для настройки вид векторов: @code{1} -- двуцветный вектор, @code{2} -- одинаковая длина векторов, @code{4} -- рисует стрелку в точку сетки, @code{8} -- рисует стрелку с серединой в точке сетки, @code{16} -- рисует штрихи вместо стрелок. См. также @ref{flow}, @ref{dew}, @ref{vectc}. @sref{Vect sample} +@end deffn + +@deffn {Команда MGL} vect udat vdat wdat ['sch'='' @code{flag=0}] +@deffnx {Команда MGL} vect xdat ydat zdat udat vdat wdat ['sch'='' @code{flag=0}] +Это 3D версия графика. Здесь массивы @var{udat}, @var{vdat}, @var{wdat} должны быть 3d массивами, а длина и цвет пропорциональны @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Vect 3D sample} +@end deffn + +@cindex vectc +@anchor{vectc} +@deffn {Команда MGL} vectc udat vdat ['sch'='' @code{zval=nan}] +@deffnx {Команда MGL} vectc xdat ydat udat vdat ['sch'='' @code{zval=nan}] +Аналогично @ref{vect} c @code{flag=2+16=18}. @sref{VectC sample} +@end deffn + +@deffn {Команда MGL} vectc udat vdat wdat ['sch'=''] +@deffnx {Команда MGL} vectc xdat ydat zdat udat vdat wdat ['sch'=''] +Это 3D версия графика. Здесь массивы @var{udat}, @var{vdat}, @var{wdat} должны быть 3d массивами, а длина и цвет пропорциональны @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{VectC 3D sample} +@end deffn + +@cindex vectl +@anchor{vectl} +@deffn {Команда MGL} vectl udat vdat ['sch'='' @code{zval=nan}] +@deffnx {Команда MGL} vectl xdat ydat udat vdat ['sch'='' @code{zval=nan}] +Аналогично @ref{vect} c @code{flag=1+16=17}. @sref{VectL sample} +@end deffn + +@deffn {Команда MGL} vectl udat vdat wdat ['sch'=''] +@deffnx {Команда MGL} vectl xdat ydat zdat udat vdat wdat ['sch'=''] +Это 3D версия графика. Здесь массивы @var{udat}, @var{vdat}, @var{wdat} должны быть 3d массивами, а длина и цвет пропорциональны @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{VectL 3D sample} +@end deffn + +@cindex dew +@anchor{dew} +@deffn {Команда MGL} dew udat vdat ['sch'='' @code{zval=nan}] +@deffnx {Команда MGL} dew xdat ydat udat vdat ['sch'='' @code{zval=nan}] +Рисует капли для векторного поля @{@var{udat}, @var{vdat}@}, параметрически зависящего от координат @var{xdat}, @var{ydat} при @var{z=zval}. Замечу, что график требует много памяти и процессорного времени для своего создания! Цвет капель пропорционален @math{\sqrt@{ax^2+ay^2@}}. Число капель определяется @ref{meshnum}. См. также @ref{vect}. @sref{Dew sample} +@end deffn + +@cindex flow +@anchor{flow} +@deffn {Команда MGL} flow udat vdat ['sch'='' @code{num=5 zval=nan}] +@deffnx {Команда MGL} flow xdat ydat udat vdat ['sch'='' @code{num=5 zval=nan}] +Рисует нити тока для векторного поля @{@var{udat}, @var{vdat}@}, параметрически зависящего от координат @var{xdat}, @var{ydat} на плоскости при z = @var{zval}. Число нитей пропорционально @var{num}. При @var{num}>0 нитей могут стартовать и изнутри сетки, в противном случае только с краев. Цвет нитей пропорционален @math{\sqrt@{udat^2+vdat^2@}}. Теплые цвета соответствуют нормальному току (типа стока). Холодные цвета соответствуют обратному току (типа источника). См. также @ref{pipe}, @ref{vect}. @sref{Flow sample} +@end deffn + +@deffn {Команда MGL} flow udat vdat wdat ['sch'='' @code{num=3}] +@deffnx {Команда MGL} flow xdat ydat zdat udat vdat wdat ['sch'='' @code{num=3}] +Это 3D версия графика. Здесь массивы @var{udat}, @var{vdat}, @var{wdat} должны быть 3d массивами, а цвет пропорционален @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Flow 3D sample} +@end deffn + +@deffn {Команда MGL} flow @code{x0 y0} udat vdat ['sch'='' @code{zval=nan}] +@deffnx {Команда MGL} flow @code{x0 y0} xdat ydat udat vdat ['sch'='' @code{zval=nan}] +Рисует нить тока из точки @{@var{x0}, @var{y0}@} для векторного поля @{@var{udat}, @var{vdat}@}, параметрически зависящего от координат @var{xdat}, @var{ydat} на плоскости при z = @var{zval}. Цвет нити пропорционален @math{\sqrt@{udat^2+vdat^2@}}. Теплые цвета соответствуют нормальному току (типа стока). Холодные цвета соответствуют обратному току (типа источника). +@end deffn + +@deffn {Команда MGL} flow @code{x0 y0 z0} udat vdat wdat ['sch'=''] +@deffnx {Команда MGL} flow @code{x0 y0 z0} xdat ydat zdat udat vdat wdat ['sch'=''] +Это 3D версия графика. Здесь массивы @var{udat}, @var{vdat}, @var{wdat} должны быть 3d массивами, а цвет пропорционален @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. +@end deffn + + +@cindex pipe +@anchor{pipe} +@deffn {Команда MGL} pipe udat vdat ['sch'='' @code{r0=0.05 num=5 zval=nan}] +@deffnx {Команда MGL} pipe xdat ydat udat vdat ['sch'='' @code{r0=0.05 num=5 zval=nan}] +Рисует трубки тока для векторного поля @{@var{udat}, @var{vdat}@}, параметрически зависящего от координат @var{xdat}, @var{ydat} на плоскости при z = @var{zval}. Число трубок пропорционально @var{num}. При @var{num}>0 нитей могут стартовать и изнутри сетки, в противном случае только с краев. Цвет и радиус трубок пропорционален @math{\sqrt@{udat^2+vdat^2@}}. Теплые цвета соответствуют нормальному току (типа стока). Холодные цвета соответствуют обратному току (типа источника). Параметр @var{r0} задает радиус трубок. При @var{r0}<0 радиус трубок обратно пропорционален их амплитуде. См. также @ref{flow}, @ref{vect}. @sref{Pipe sample} +@end deffn + +@deffn {Команда MGL} pipe udat vdat wdat ['sch'='' @code{r0=0.05 num=3}] +@deffnx {Команда MGL} pipe xdat ydat zdat udat vdat wdat ['sch'='' @code{r0=0.05 num=3}] +Это 3D версия графика. Здесь массивы @var{udat}, @var{vdat}, @var{wdat} должны быть 3d массивами, а цвет пропорционален @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Pipe 3D sample} +@end deffn + + +@c ################################################################## +@node Other plotting @MGL{}, Nonlinear fitting @MGL{}, Vector fields @MGL{}, MGL interface +@section Прочие графики @MGL{} + +Это команды, не относящиеся к какой-то специальной категории. Сюда входят функции построения графиков по текстовым формулам (@ref{fplot}, @ref{fsurf}), рисования поверхностей из треугольников (@ref{triplot}), произвольных точек в пространстве (@ref{dots}) и реконструкции по ним поверхности (@ref{crust}), графики плотности и линии уровня на плоскостях, перпендикулярных осям x, y или z (dens[xyz], cont[xyz], contf[xyz]). Каждый тип графика имеет похожий интерфейс. Есть версия для рисования одного массива с автоматическими координатами и версия для параметрически заданного массива. Строка @var{sch} задает цветовую схему (@pxref{Color scheme}). Предыдущая цветовая схема используется по умолчанию. + +@cindex densx +@cindex densy +@cindex densz +@anchor{densx} @anchor{densy} @anchor{densz} +@deffn {Команда MGL} densx dat ['sch'='' @code{val=nan}] +@deffnx {Команда MGL} densy dat ['sch'='' @code{val=nan}] +@deffnx {Команда MGL} densz dat ['sch'='' @code{val=nan}] +Рисуют график плотности на x, y или z плоскостях. Если @var{dat} -- 3d массив, то выполняется интерполяция к заданному срезу @var{val}. Функции полезны для создания проекций 3D массивов на оси координат. См. также @code{cont[xyz], contf[xyz]}, @ref{dens}. @sref{Dens projection sample} +@end deffn + +@cindex contx +@cindex conty +@cindex contz +@anchor{contz} @anchor{conty} @anchor{contx} +@deffn {Команда MGL} contx dat ['sch'='' @code{val=nan num=7}] +@deffnx {Команда MGL} conty dat ['sch'='' @code{val=nan num=7}] +@deffnx {Команда MGL} contz dat ['sch'='' @code{val=nan num=7}] +Рисуют линии уровня на x, y или z плоскостях. Если @var{dat} -- 3d массив, то выполняется интерполяция к заданному срезу @var{val}. Функции полезны для создания проекций 3D массивов на оси координат. См. также @code{dens[xyz], contf[xyz]}, @ref{cont}. @sref{Cont projection sample} +@end deffn + +@cindex contfx +@cindex contfy +@cindex contfz +@anchor{contfz} @anchor{contfy} @anchor{contfx} +@deffn {Команда MGL} contfx dat ['sch'='' @code{val=nan num=7}] +@deffnx {Команда MGL} contfy dat ['sch'='' @code{val=nan num=7}] +@deffnx {Команда MGL} contfz dat ['sch'='' @code{val=nan num=7}] +Рисуют закрашенные контуры уровня на x, y или z плоскостях. Если @var{dat} -- 3d массив, то выполняется интерполяция к заданному срезу @var{val}. Функции полезны для создания проекций 3D массивов на оси координат. См. также @code{dens[xyz], cont[xyz]}, @ref{contf}. +@end deffn + +@cindex dots +@anchor{dots} +@deffn {Команда MGL} dots xdat ydat zdat ['sch'=''] +@deffnx {Команда MGL} dots xdat ydat zdat adat ['sch'=''] +Рисует произвольно расположенные точки @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. Если определен массив @var{adat}[i], то он задает прозрачность точек. См. также @ref{crust}, @ref{mark}, @ref{plot}. @sref{Dots sample} +@end deffn + +@cindex crust +@anchor{crust} +@deffn {Команда MGL} crust xdat ydat zdat ['sch'=''] +Реконструирует и рисует поверхность по произвольно расположенным точкам @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. Если строка содержит @samp{#}, то рисуется сетчатая поверхность. См. также @ref{dots}, @ref{triplot}. @sref{Crust sample} +@end deffn + +@cindex triplot +@anchor{triplot} +@deffn {Команда MGL} triplot idat xdat ydat ['sch'='' @code{zval=nan}] +@deffnx {Команда MGL} triplot idat xdat ydat zdat ['sch'=''] +@deffnx {Команда MGL} triplot idat xdat ydat zdat cdat ['sch'=''] +Рисует поверхность из треугольников. Вершины треугольников задаются индексами @var{idat} в массиве точек @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. Если строка содержит @samp{#}, то рисуется сетчатая поверхность. Размер по 1-му индексу массива @var{idat} должен быть 3 или больше. Массивы @var{xdat}, @var{ydat}, @var{zdat} должны иметь одинаковые размеры. Массив @var{cdat} задает цвет треугольников (если @var{idat}.ny=@var{cdat}.nx) или цвет вершин (если @var{xdat}.nx=@var{cdat}.nx). См. также @ref{dots}, @ref{crust}, @ref{quadplot}, @ref{tricont}. +@end deffn + +@cindex tricont +@anchor{tricont} +@deffn {Команда MGL} tricont vdat idat xdat ydat zdat cdat ['sch'='' @code{zval=nan}] +@deffnx {Команда MGL} tricont vdat idat xdat ydat zdat ['sch'='' @code{zval=nan}] +@deffnx {Команда MGL} tricont idat xdat ydat zdat ['sch'='' @code{num=7 zval=nan}] +Рисует линии уровня поверхности из треугольников при @var{z} = @var{zval} (или для z=@var{vdat}[k] если @code{zval==NAN}). Вершины треугольников задаются индексами @var{idat} в массиве точек @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. Размер по 1-му индексу массива @var{idat} должен быть 3 или больше. Массивы @var{xdat}, @var{ydat}, @var{zdat} должны иметь одинаковые размеры. Массив @var{cdat} (если указан) задает цвет треугольников (если @var{idat}.ny=@var{cdat}.nx) или цвет вершин (если @var{xdat}.nx=@var{cdat}.nx). См. также @ref{triplot}, @ref{cont}. +@end deffn + +@cindex quadplot +@anchor{quadplot} +@deffn {Команда MGL} quadplot idat xdat ydat ['sch'='' @code{zval=nan}] +@deffnx {Команда MGL} quadplot idat xdat ydat zdat ['sch'=''] +@deffnx {Команда MGL} quadplot idat xdat ydat zdat cdat ['sch'=''] +Рисует поверхность из четырехугольников. Вершины треугольников задаются индексами @var{idat} в массиве точек @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. Если строка содержит @samp{#}, то рисуется сетчатая поверхность. Размер по 1-му индексу массива @var{idat} должен быть 4 или больше. Массивы @var{xdat}, @var{ydat}, @var{zdat} должны иметь одинаковые размеры. Массив @var{cdat} задает цвет четырехугольников (если @var{idat}.ny=@var{cdat}.nx) или цвет вершин (если @var{xdat}.nx=@var{cdat}.nx). См. также @ref{triplot}. +@end deffn + +@cindex fplot +@anchor{fplot} +@deffn {Команда MGL} fplot 'y(x)' ['pen'='' @code{zval=nan num=100}] +Рисует функцию @samp{y(x)} в плоскости z=@var{zval} с координатой @samp{x} в диапазоне x-оси координат. Параметр @var{num} задает минимальное число точек по координате для графика. См. также @ref{plot}. +@end deffn + +@deffn {Команда MGL} fplot 'x(t)' 'y(t)' 'z(t)' ['pen'='' @code{num=100}] +Рисует параметрическую кривую @{@samp{x(t)}, @samp{y(t)}, @samp{z(t)}@}, где координата @samp{t} меняется в диапазоне [0, 1]. Параметр @var{num} задает минимальное число точек по координате для графика. См. также @ref{plot}. +@end deffn + +@cindex fsurf +@anchor{fsurf} +@deffn {Команда MGL} fsurf 'z(x,y)' ['sch'='' @code{num=100}] +Рисует поверхность @samp{z(x,y)} с координатами @samp{x}, @samp{y} в диапазоне x-,y-осей координат. Параметр @var{num} задает минимальное число точек по координатам для графика. См. также @ref{surf}. +@end deffn + +@deffn {Команда MGL} fsurf 'x(u,v)' 'y(u,v)' 'z(u,v)' ['sch'='' @code{num=100}] +Рисует параметрическую поверхность @{@samp{x(u,v)}, @samp{y(u,v)}, @samp{z(u,v)}@}, где координаты @samp{u}, @samp{v} меняются в диапазоне [0, 1]. Параметр @var{num} задает минимальное число точек по координатам для графика. См. также @ref{surf}. +@end deffn + + +@c ################################################################## +@node Nonlinear fitting @MGL{}, Data create @MGL{}, Other plotting @MGL{}, MGL interface +@section Nonlinear fitting @MGL{} + +Эти команды подбирают параметры функций для наилучшей аппроксимации данных, т.е. минимизируют сумму @math{\sum_i (f(x_i, y_i, z_i) - a_i)^2/s_i^2}. При этом аппроксимирующая функция @samp{f} может зависеть от одного аргумента @samp{x} (1D случай), от двух аргументов @samp{x,y} (2D случай) или от трех аргументов @samp{x,y,z} (3D случай). Функция @samp{f} также может зависеть от параметров. Список параметров задается строкой @var{var} (например, @samp{abcd}). Обычно пользователь должен предоставить начальные значения параметров в переменной @var{ini}. Однако, при его отсутствии используются нулевые значения. + +Команды @ref{fit} и @ref{fits} не рисуют полученные массивы. Они заполняют массив @var{fit} по формуле @samp{f} с найденными коэффициентами. При этом, координаты @samp{x,y,z} равно распределены в вдоль осей координат. Число точек в @var{fit} выбирается максимальным из размера массива @var{fit} и 100. Формулу с найденными коэффициентами можно вывести с помощью команды @ref{putsfit}. @sref{Fitting sample} + +Размерность массивов должны быть не меньше, чем число указанных массивов @var{xdat}, @var{ydat}, @var{zdat}. Также подбор коэффициентов будет осуществляться только вдоль указанных направлений (например, вдоль x и y если указаны только @var{xdat} и @var{ydat}). Если массив @var{xdat} не указан, то используется массив со значениями равно распределенными вдоль оси x. + +@cindex fits +@anchor{fits} +@deffn {Команда MGL} fits adat sdat 'func' 'var' [ini=0] +@deffnx {Команда MGL} fits xdat adat sdat 'func' 'var' [ini=0] +@deffnx {Команда MGL} fits xdat ydat adat sdat 'func' 'var' [ini=0] +@deffnx {Команда MGL} fits xdat ydat zdat adat sdat 'func' 'var' [ini=0] +"Подгоняют" формулу вдоль x-, y- и z-направлений для массива заданного параметрически @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]) с весовыми коэффициентами @var{sdat}[i,j,k]. +@end deffn + +@cindex fit +@anchor{fit} +@deffn {Команда MGL} fit adat 'func' 'var' [ini=0] +@deffnx {Команда MGL} fit xdat adat 'func' 'var' [ini=0] +@deffnx {Команда MGL} fit xdat ydat adat 'func' 'var' [ini=0] +@deffnx {Команда MGL} fit xdat ydat zdat adat 'func' 'var' [ini=0] +"Подгоняют" формулу вдоль x-, y- и z-направлений для массива заданного параметрически @var{a}[i,j,k](@var{x}[i,j,k], @var{y}[i,j,k], @var{z}[i,j,k]) с весовыми коэффициентами равными 1. +@end deffn + +@cindex putsfit +@anchor{putsfit} +@deffn {Команда MGL} putsfit @code{x y} ['pre'='' 'fnt'='' @code{size=-1}] +Печатает последнюю подобранную формулу с найденными коэффициентами в точке @{@var{x}, @var{y}@}. Строка @var{pre} будет напечатана перед формулой. Все другие параметры такие же как в @ref{Text printing @MGL{}}. +@end deffn + + +@c ################################################################## +@node Data create @MGL{}, Data filling @MGL{}, Nonlinear fitting @MGL{}, MGL interface +@section Создание данных @MGL{} + +@cindex new +@anchor{new} +@deffn {Команда MGL} new dat [@code{nx=1 ny=1 nz=1}] +Создает/пересоздает массив с именем @var{dat} данных указанного размера и заполняет его нулями. Ничего не делает при @var{nx}, @var{ny}, @var{nz} отрицательных или равных нулю. +@end deffn + +@cindex var +@anchor{var} +@deffn {Команда MGL} var dat @code{num v1 [v2=nan]} +Создает одномерный массив с именем @var{dat} размером @code{num} и заполняет его равномерно в диапазоне [@var{v1}, @var{v2}]. Если @var{v2}=@code{nan}, то используется @var{v2=v1}. +@end deffn + +@cindex list +@anchor{list} +@deffn {Команда MGL} list dat @code{v1 ...} +Создает массив с именем @var{dat} и заполняет его числовыми значениями аргументов @code{v1 ...}. Команда может создавать 1d- и 2d-массивы. Для создания 2d-массивов требуется указать разделитель строк данных @samp{|}. Размер массива будет [максимальное число чисел в строке * число строк]. Например, команда @code{list 1 | 2 3} создаст массив [1 0; 2 3]. Отмечу, что максимальное число аргументов 1000. +@end deffn + +@deffn {Команда MGL} list dat d1 ... +Создает массив с именем @var{dat} и заполняет его числами из массивов @code{d1 ...}. Команда может создавать 2d- и 3d-массивы (если аргументы 2d массивы). Младшие размерности всех массивов в аргументах должны быть равны размерности @var{d1}. Отмечу, что максимальное число аргументов 1000. +@end deffn + +@cindex copy +@anchor{copy} +@deffn {Команда MGL} copy dat dat2 ['eq'='' @code{on_axis=on}] +@deffnx {Команда MGL} copy dat @code{val} +Создает массив с именем @var{dat} и копирует в него данные из массива @var{dat2}. При этом, если указан параметр @var{eq}, то данные будут изменены по формуле аналогично команде @ref{fill} (для @code{on_axis=on}) или @ref{modify} (для @code{on_axis=off}). +@end deffn + +@cindex idset +@anchor{idset} +@deffn {Команда MGL} idset dat 'ids' +Устанавливает символьные обозначения для колонок данных. Строка должна содержать символы 'a'...'z' один на колонку (без пробелов). +@end deffn + +@cindex info +@anchor{info} +@deffn {Команда MGL} info dat [@code{detail=off}] +Выводит информацию о массиве (размер, максимальное/минимальное значение, моменты и пр.). При @code{detail=off} показывается только краткая информация. +@end deffn + +@deffn {Команда MGL} info 'text' +Выводит текст @var{text} как информацию (предупреждение). +@end deffn + +@c ------------------------------------------------------------------ +@node Data filling @MGL{}, Rearrange data @MGL{}, Data create @MGL{}, MGL interface +@section Заполнение данных @MGL{} +@cindex fill +@cindex modify + +@cindex fill +@anchor{fill} +@deffn {Команда MGL} fill dat v1 v2 ['dir'='x'] +Заполняет значениями равно распределенными в диапазоне [@var{v1}, @var{v2}] в направлении @var{dir}=@{@samp{x},@samp{y},@samp{z}@}. +@end deffn + +@deffn {Команда MGL} fill dat 'eq' [vdat=0 wdat=0] +Заполняет значениями вычисленными по формуле @var{eq}. Формула представляет собой произвольное выражение, зависящее от переменных @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Координаты @samp{x}, @samp{y}, @samp{z} полагаются меняющимися в диапазоне осей координат (в отличие от @ref{modify}). Переменная @samp{u} -- значения исходного массива, переменные @samp{v}, @samp{w} -- значения массивов @var{vdat}, @var{wdat}. Последние могут быть опущены. +@end deffn + +@cindex modify +@anchor{modify} +@deffn {Команда MGL} modify dat 'eq' [@code{dim=0}] +@deffnx {Команда MGL} modify dat 'eq' vdat [wdat=0] +Заполняет значениями вычисленными по формуле @var{eq}. Формула представляет собой произвольное выражение, зависящее от переменных @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Координаты @samp{x}, @samp{y}, @samp{z} полагаются меняющимися в диапазоне [0,1] (в отличие от @ref{fill}). Переменная @samp{u} -- значения исходного массива, переменные @samp{v}, @samp{w} -- значения массивов @var{vdat}, @var{wdat}. Последние могут быть опущены. Если указан @var{dim}>0, то изменяются только слои >=@var{dim}. +@end deffn + + +@cindex put +@anchor{put} +@deffn {MGL command} put dat @code{val [i=: j=: k=:]} +Присваивает значения (под-)массива @var{dat}[@var{i}, @var{j}, @var{k}] = @var{val}. Индексы @var{i}, @var{j}, @var{k} равные @samp{:} задают значениия @var{val} для всего диапазона соответствующего направления(ий). Например, @code{put dat val : 0 :} задает @var{dat}[i,0,j]=@var{val} для i=0...(@var{dat}.nx-1), j=0...(@var{dat}.nz-1). +@end deffn + +@deffn {MGL command} put dat vdat [@code{i=: j=: k=:}] +Копирует значения из массива @var{vdat} в диапазон значений массива @var{dat}. Индексы @var{i}, @var{j}, @var{k} равные @samp{:} задают диапазон изменения значений в соответствующих направление(ях). Младшие размерности массива @var{vdat} должны быть больше выбранного диапазона массива @var{dat}. Например, @code{put dat v : 0 :} присвоит @var{dat}[i,0,j]=@var{vdat}.ny>@var{dat}.nz ? @var{vdat}[i,j] : @var{vdat}[i], где i=0...(@var{dat}.nx-1), j=0...(@var{dat}.nz-1) и условие vdat.nx>=dat.nx выполнено. +@end deffn + + + +@c ------------------------------------------------------------------ +@node Rearrange data @MGL{}, File I/O @MGL{}, Data filling @MGL{}, MGL interface +@section Изменение размеров данных @MGL{} + +@cindex rearrange +@anchor{rearrange} +@deffn {Команда MGL} rearrange dat @code{mx [my=0 mz=0]} +Изменяет размерность данных без изменения самого массива данных, так что результирующий массив @var{mx}*@var{my}*@var{mz} < nx*ny*nz. Если один из параметров @var{my} или @var{mz} ноль, то он будет выбран оптимальным образом. Например, если @var{my}=0, то будет @var{my}=nx*ny*nz/@var{mx} и @var{mz}=1. +@end deffn + +@cindex extend +@anchor{extend} +@deffn {Команда MGL} extend dat @code{n1 [n2=0]} +Увеличивает размер данных путем вставки (|@var{n1}|+1) новых срезов после (для @var{n1}>0) или перед (для @var{n1}<0) существующими данными. Можно добавить сразу 2 размерности для 1d массива, используя второй параметр @var{n2}. Данные в новые срезы будут скопированы из существующих. Например, для @var{n1}>0 новый массив будет +@iftex +@math{a_{ij}^{new} = a_i^{old}} where j=0...@var{n1}. Соответственно, для @var{n1}<0 новый массив будет @math{a_{ij}^{new} = a_j^{old}}, где i=0...|@var{n1}|. +@end iftex +@ifnottex +a_ij^new = a_i^old where j=0...@var{n1}. Соответственно, для @var{n1}<0 новый массив будет a_ij^new = a_j^old, где i=0...|@var{n1}|. +@end ifnottex +@end deffn + +@cindex transpose +@anchor{transpose} +@deffn {Команда MGL} transpose dat ['dim'='yxz'] +Транспонирует (меняет порядок размерностей) массив данных. Новый порядок размерностей задается строкой @var{dim}. +@end deffn + +@cindex squeeze +@anchor{squeeze} +@deffn {Команда MGL} squeeze dat @code{rx [ry=1 rz=1 sm=off]} +Уменьшает размер данных путем удаления элементов с индексами не кратными @var{rx}, @var{ry}, @var{rz} соответственно. Параметр @var{smooth} задает использовать сглаживания +@iftex +(т.е. @math{a_{out}[i]=\sum_{j=i,i+r}a[j]/r}) или нет (т.е. @math{a_{out}[i]=a[j*r]}). +@end iftex +@ifnottex +(т.е. out[i]=\sum_@{j=i,i+r@} a[j]/r) или нет (т.е. out[i]=a[j*r]). +@end ifnottex +@end deffn + +@cindex crop +@anchor{crop} +@deffn {Команда MGL} crop dat @code{n1 n2} 'dir' +Обрезает границы данных при @var{i}<@var{n1} и @var{i}>@var{n2} (при @var{n2}>0) или @var{i}>@code{n[xyz]}-@var{n2} (при @var{n2}<=0) вдоль направления @var{dir}. +@end deffn + +@cindex delete +@anchor{delete} +@deffn {Команда MGL} delete dat +Удаляет массив @var{dat} и освобождает использованную память. Может быть полезно для больших неиспользуемых массивов. +@end deffn + +@deffn {Команда MGL} delete dat 'dir' @code{[pos=off num=0]} +Удаляет @var{num} срезов вдоль направления @var{dir} с позиции @var{pos}. +@end deffn + +@cindex insert +@anchor{insert} +@deffn {Команда MGL} insert dat 'dir' @code{[pos=off num=0]} +Вставляет @var{num} срезов вдоль направления @var{dir} с позиции @var{pos} и заполняет их нулями. +@end deffn + +@c ------------------------------------------------------------------ +@node File I/O @MGL{}, Make another data @MGL{}, Rearrange data @MGL{}, MGL interface +@section Чтение/сохранение данных @MGL{} + +@cindex read +@anchor{read} +@deffn {Команда MGL} read dat 'fname' +Читает данные из текстового файла с разделителями символом пробела/табуляции с автоматическим определением размера массива. Двойной перевод строки начинает новый срез данных (по направлению z). +@end deffn + +@deffn {Команда MGL} read dat 'fname' @code{mx [my=1 mz=1]} +Читает данные из текстового файла с заданными размерами. Ничего не делается если параметры @var{mx}, @var{my} или @var{mz} равны нулю или отрицательны. +@end deffn + +@cindex readmat +@anchor{readmat} +@deffn {Команда MGL} readmat dat 'fname' [@code{dim=2}] +Читает данные из текстового файла с размерами, указанными в первых @var{dim} числах файла. При этом переменная @var{dim} задает размерность (1d, 2d, 3d) данных. +@end deffn + +@cindex readall +@anchor{readall} +@deffn {Команда MGL} readall dat 'templ' @code{v1 v2 [dv=1 slice=off]} +Объединяет данные из нескольких текстовых файлов. Имена файлов определяются вызовом функции @code{sprintf(fname,templ,val);}, где @var{val} меняется от @var{v1} до @var{v2} с шагом @var{dv}. Данные загружаются один за другим в один и тот же срез данных (при @var{slice}=@code{off}) или срез-за-срезом (при @var{slice}=@code{on}). +@end deffn + +@deffn {Команда MGL} readall dat 'templ' @code{[slice=off]} +Объединяет данные из нескольких текстовых файлов, чьи имена удовлетворяют шаблону @var{templ} (например, @var{templ}=@code{"t_*.dat"}). Данные загружаются один за другим в один и тот же срез данных (при @var{slice}=@code{off}) или срез-за-срезом (при @var{slice}=@code{on}). +@end deffn + +@cindex save +@anchor{save} +@deffn {Команда MGL} save dat 'fname' +Сохраняет массив данных в текстовый файл. +@end deffn + +@cindex readhdf +@anchor{readhdf} +@deffn {Команда MGL} readhdf dat 'fname' 'dname' +Читает массив с именем @var{dname} из HDF5 или HDF4 файла @var{fname}. +@end deffn + +@cindex savehdf +@anchor{savehdf} +@deffn {Команда MGL} savehdf dat 'fname' 'dname' +Сохраняет массив под именем @var{dname} в HDF5 или HDF4 файл @var{fname}. +@end deffn + +@cindex import +@anchor{import} +@deffn {Команда MGL} import dat 'fname' 'sch' [@code{v1=0 v2=1}] +Читает данные из растрового файла. RGB значения пикселов преобразуются в число в диапазоне [@var{v1}, @var{v2}] используя цветовую схему @var{sch} (@pxref{Color scheme}). +@end deffn + +@cindex export +@anchor{export} +@deffn {Команда MGL} export dat 'fname' 'sch' [@code{v1=0 v2=0}] +Сохраняет данные в растровый файл. Числовые значения, нормированные в диапазон [@var{v1}, @var{v2}], преобразуются в RGB значения пикселов, используя цветовую схему @var{sch} (@pxref{Color scheme}). Если @var{v1}>=@var{v2}, то значения @var{v1}, @var{v2} определяются автоматически как минимальное и максимальное значение данных. +@end deffn + +@c ------------------------------------------------------------------ +@node Make another data @MGL{}, Change data @MGL{}, File I/O @MGL{}, MGL interface +@section Создание новых данных @MGL{} + +@cindex combine +@anchor{combine} +@deffn {Команда MGL} combine res adat bdat +Возвращает в массиве данных @var{res} прямое произведение массивов (наподобие, res[i,j] = adat[i]*bdat[j] и т.д.). +@end deffn + +@cindex evaluate +@anchor{evaluate} +@deffn {Команда MGL} evaluate res dat idat [@code{norm=on}] +@deffnx {Команда MGL} evaluate res dat idat jdat [@code{norm=on}] +@deffnx {Команда MGL} evaluate res dat idat jdat kdat [@code{norm=on}] +Возвращает массив данных @var{res}, полученный в результате интерполяции исходного массива в точках других массивов (например, res[i,j]=dat[idat[i,j],jdat[i,j]]). Размеры массивов @var{idat}, @var{jdat}, @var{kdat} должны совпадать. Координаты в @var{idat}, @var{jdat}, @var{kdat} полагаются нормированными в диапазон [0,1] (при @var{norm}=@code{on}) или в диапазоны [0,nx], [0,ny], [0,nz] соответственно. +@end deffn + +@cindex hist +@anchor{hist} +@deffn {Команда MGL} hist res dat @code{num v1 v2 [nsub=0]} +@deffnx {Команда MGL} hist res dat wdat @code{num v1 v2 [nsub=0]} +Возвращает распределение (гистограмму) @var{res} из @var{num} точек от значений массива @var{dat} в диапазоне [@var{v1}, @var{v2}]. Массив @var{wdat} задает веса элементов (все веса равны 1 если @var{wdat} не указан). Параметр @var{nsub} задает число дополнительных точек интерполяции (для сглаживания получившейся гистограммы). +@end deffn + +@deffn {Команда MGL} hist res xdat adat +@deffnx {Команда MGL} hist res xdat ydat adat +@deffnx {Команда MGL} hist res xdat ydat zdat adat +Возвращает распределение (гистограмму) @var{res} от значений массива @var{adat}, параметрически зависящего от координат @{@var{xdat},@var{ydat},@var{zdat}@} в диапазоне осей координат. Массив @var{adat} играет роль веса точки. Число точек в результате @var{res} -- максимум из размера @var{res} и 100. +@end deffn + + +@cindex momentum +@anchor{momentum} +@deffn {Команда MGL} momentum res dat 'how' ['dir'='z'] +Возвращает в массиве данных @var{res} момент (1d массив) данных @var{dat} вдоль направления @var{dir}. Строка @var{how} определяет тип момента. Момент определяется как +@iftex +@math{res_k = \sum_{ij} how(x_i,y_j,z_k) dat_{ij}/\sum_{ij} a_{ij}} +@end iftex +@ifnottex +res_k = \sum_ij how(x_i,y_j,z_k) dat_ij/ \sum_ij a_ij +@end ifnottex +если @var{dir}=@samp{z} и т.д. Координаты @samp{x}, @samp{y}, @samp{z} -- индексы массива в диапазоне [0,1]. +@end deffn + +@cindex sum +@anchor{sum} +@deffn {Команда MGL} sum res dat 'dir' +Возвращает в массиве данных @var{res} результат суммирования @var{dat} вдоль направления(ий) @var{dir}. +@end deffn + +@cindex max +@anchor{max} +@deffn {Команда MGL} max res dat 'dir' +Возвращает в массиве данных @var{res} максимальное значение @var{dat} вдоль направления(ий) @var{dir}. +Gets array which is the maximal data values in given direction or direction(s). +@end deffn + +@cindex min +@anchor{min} +@deffn {Команда MGL} min res dat 'dir' +Возвращает в массиве данных @var{res} минимальное значение @var{dat} вдоль направления(ий) @var{dir}. +@end deffn + +@cindex resize +@anchor{resize} +@deffn {Команда MGL} resize res dat @code{mx [my=1 mz=1]} +Возвращает массив данных @var{res} размером @var{mx}, @var{my}, @var{mz} со значениями полученными интерполяцией значений массива @var{dat}. +@end deffn + +@cindex subdata +@anchor{subdata} +@deffn {Команда MGL} subdata res dat @code{xx [yy=: zz=:]} +Возвращает в @var{res} подмассив массива данных @var{dat} с фиксированными значениями индексов с положительными значениями. Например, @code{subdata a b : 2} выделяет третью строку (индексы начинаются с нуля), @code{subdata a b 4 :} выделяет 5-ую колонку, @code{subdata a b : : 3} выделяет 4-ый срез и т.д. +@end deffn + +@cindex trace +@anchor{trace} +@deffn {Команда MGL} trace res dat +Возвращает массив @var{ref} диагональных элементов @var{dat}[i,i] (для 2D данных) или @var{dat}[i,i,i] (для 3D данных) где i=0...nx-1. В 1D случае возвращается сам массив данных @var{dat}. Размеры массива данных должен быть @var{dat}.ny, @var{dat}.nz >= @var{dat}.nx или @var{dat}.ny, @var{dat}.nz = 1. +@end deffn + +@cindex transform +@anchor{transform} +@deffn {Команда MGL} transform dat 'type' real imag +Выполняет интегральное преобразование комплексных данных @var{real}, @var{imag} в выбранном направлении и возвращает модуль результата в @var{res}. Порядок и тип преобразований задается строкой @var{type}: первый символ для x-направления, второй для y-направления, третий для z-направления. Возможные символы: @samp{f} -- прямое преобразование Фурье, @samp{i} -- обратное преобразование Фурье, @samp{s} -- синус преобразование, @samp{c} -- косинус преобразование, @samp{h} -- преобразование Ханкеля, @samp{n} или @samp{ } -- нет преобразования. +@end deffn + +@cindex transforma +@anchor{transforma} +@deffn {Команда MGL} transforma dat 'type' ampl phase +Аналогично предыдущему с заданными амплитудой @var{ampl} и фазой @var{phase} комплексных чисел. +@end deffn + +@cindex stfad +@anchor{stfad} +@deffn {Команда MGL} stfad res real imag @code{dn} ['dir'='x'] +Выполняет оконное преобразование Фурье длиной @var{dn} для комплексных данных @var{real}, @var{imag} и возвращает модуль результата в @var{res}. Например, для @var{dir}=@samp{x} результат будет иметь размер @{int(nx/dn), dn, ny@} и будет равен @math{res[i,j,k]=|\sum_d^dn exp(I*j*d)*(real[i*dn+d,k]+I*imag[i*dn+d,k])|/dn}. +@end deffn + +@cindex pde +@anchor{pde} +@deffn {Команда MGL} pde res 'ham' ini_re ini_im [@code{dz=0.1 k0=100}] +Решает уравнение в частных производных du/dz = i*k0*@var{ham}(p,q,x,y,z,|u|)[u], где p=-i/k0*d/dx, q=-i/k0*d/dy -- псевдо-дифференциальные операторы. Параметры @var{ini_re}, @var{ini_im} задают начальное распределение поля. Координаты в уравнении и в решении полагаются в диапазоне осей координат. Замечу, что внутри этот диапазон увеличивается в 3/2 раза для уменьшения отражения от границ расчетного интервала. Параметр @var{dz} задает шаг по эволюционной координате z. В данный момент использован упрощенный алгоритм, когда все ``смешанные'' члена (типа @samp{x*p}->x*d/dx) исключаются. Например, в 2D случае это функции типа @math{ham = f(p,z) + g(x,z,u)}. При этом допускаются коммутирующие комбинации (типа @samp{x*q}->x*d/dy). Переменная @samp{u} используется для обозначения амплитуды поля |u|. Это позволяет решать нелинейные задачи -- например, нелинейное уравнение Шредингера @code{ham='p^2+q^2-u^2'}. Также можно указать мнимую часть для поглощения (типа @code{ham = 'p^2+i*x*(x>0)'}), но только если зависимость от @samp{i} линейная, т.е. @math{ham = hre+i*him}. @sref{PDE sample} +@end deffn + +@cindex ray +@anchor{ray} +@deffn {Команда MGL} ray res 'ham' @code{x0 y0 z0 p0 q0 v0 [dt=0.1 tmax=10]} +Решает систему геометрооптических уравнений d@emph{r}/dt = d @var{ham}/d@emph{p}, d@emph{p}/dt = -d @var{ham}/d@emph{r}. Это гамильтоновы уравнения для траектории частицы в 3D случае. Гамильтониан @var{ham} может зависеть от координат @samp{x}, @samp{y}, @samp{z}, импульсов @samp{p}=px, @samp{q}=py, @samp{v}=pz и времени @samp{t}: @math{ham = H(x,y,z,p,q,v,t)}. Начальная точка (при @code{t=0}) задается переменными @{@var{x0}, @var{y0}, @var{z0}, @var{p0}, @var{q0}, @var{v0}@}. Параметры @var{dt} и @var{tmax} задают шаг и максимальное время интегрирования. Результат @var{res} -- массив @{x,y,z,p,q,v,t@} с размером @{7 * int(@var{tmax}/@var{dt}+1) @}. @sref{Beam tracing sample} +@end deffn + +@cindex qo2d +@anchor{qo2d} +@deffn {Команда MGL} qo2d res 'ham' ini_re ini_im ray [@code{r=1 k0=100} xx=0 yy=0] +Решает уравнение в частных производных du/dt = i*k0*@var{ham}(p,q,x,y,|u|)[u] в сопровождающей системе координат, где p=-i/k0*d/dx, q=-i/k0*d/dy -- псевдо-дифференциальные операторы. Параметры @var{ini_re}, @var{ini_im} задают начальное распределение поля. Параметр @var{ray} задает опорный луч для сопровождающей системы координат. Можно использовать луч найденный с помощью @code{ray}. Опорный луч должен быть достаточно гладкий, чтобы система координат была однозначной и для исключения ошибок интегрирования. Если массивы @var{xx} и @var{yy} указаны, то в них записываются декартовы координаты для каждой точки найденного решения. См. также @ref{pde}. @sref{Beam tracing sample} +@end deffn + +@cindex jacobian +@anchor{jacobian} +@deffn {Команда MGL} jacobian res xdat ydat [zdat=0] +Вычисляет якобиан преобразования @{i,j,k@} в @{@var{xdat},@var{ydat},@var{zdat}@}, где координаты @{i,j,k@} полагаются нормированными в интервал [0,1]. Якобиан находится по формуле det||@math{dr_\alpha/d\xi_\beta}||, где @math{r}=@{@var{xdat},@var{ydat},@var{zdat}@} и @math{\xi}=@{i,j,k@}. Все размерности всех массивов должны быть одинаковы. Данные должны быть трехмерными если указаны все 3 массива @{@var{xdat},@var{ydat},@var{zdat}@} или двумерными если только 2 массива @{@var{xdat},@var{ydat}@}. +@end deffn + + + +@c ------------------------------------------------------------------ +@node Change data @MGL{}, Operators @MGL{}, Make another data @MGL{}, MGL interface +@section Изменение данных @MGL{} + +Эти команды изменяют данные вдоль заданного направления(ий) типа например дифференцирования, интегрирования и т.д. Направление указывается строкой @var{dir}, которая может содержать символы @samp{x}, @samp{y} и/или @samp{z}, вдоль которых изменения будут применены. + +@cindex cumsum +@anchor{cumsum} +@deffn {Команда MGL} cumsum dat 'dir' +Суммирует с накоплением в выбранном направлении(ях). +@end deffn +@cindex integrate +@anchor{integrate} +@deffn {Команда MGL} integrate dat 'dir' +Выполняет интегрирование (подобно суммированию с накоплением) в выбранном направлении(ях). +@end deffn +@cindex diff +@anchor{diff} +@deffn {Команда MGL} diff dat 'dir' +Выполняет дифференцирование в выбранном направлении(ях). +@end deffn +@deffn {Команда MGL} diff dat xdat ydat [zdat=0] +Выполняет дифференцирование данных @var{dat}, параметрически зависящих от координат, в направлении @var{xdat} с @var{ydat}, @var{zdat}=constant. Параметр @var{zdat} может быть опущен, что соответствует 2D случаю. Используются следующие формулы (2D случай): @math{da/dx = (a_j*y_i-a_i*y_j)/(x_j*y_i-x_i*y_j)}, где @math{a_i=da/di, a_j=da/dj} обозначает дифференцирование вдоль 1-ой и 2-ой размерности. Похожие формулы используются и в 3D случае. Порядок аргументов можно менять -- например, если данные a(i,j) зависят от координат @{x(i,j), y(i,j)@}, то обычная производная по @samp{x} будет равна @code{diff a x y}, а обычная производная по @samp{y} будет равна @code{diff a y x}. +@end deffn + +@cindex diff2 +@anchor{diff2} +@deffn {Команда MGL} diff2 dat 'dir' +Выполняет двойное дифференцирование (как в операторе Лапласа) в выбранном направлении(ях). +@end deffn + +@cindex sinfft +@anchor{sinfft} +@deffn {Команда MGL} sinfft dat 'dir' +Выполняет синус преобразование в выбранном направлении(ях). Синус преобразование есть @math{\sum a_i \sin(k i)}. +@end deffn +@cindex cosfft +@anchor{cosfft} +@deffn {Команда MGL} cosfft dat 'dir' +Выполняет косинус преобразование в выбранном направлении(ях). Синус преобразование есть @math{\sum a_i \cos(k i)}. +@end deffn +@cindex hankel +@anchor{hankel} +@deffn {Команда MGL} hankel dat 'dir' +Выполняет преобразование Ханкеля в выбранном направлении(ях). Преобразование Ханкеля есть @math{\sum a_i J_0(k i)}. +@end deffn + + +@cindex swap +@anchor{swap} +@deffn {Команда MGL} swap dat 'dir' +Меняет местами левую и правую части данных в выбранном направлении(ях). Полезно для отображения результата FFT. +@end deffn +@cindex roll +@anchor{roll} +@deffn {Команда MGL} roll dat 'dir' num +Сдвигает данные на @var{num} ячеек в выбранном направлении(ях). Соответствует замене индекса на @var{i}->(@var{i}+@var{num})%@var{n}. +@end deffn + +@cindex mirror +@anchor{mirror} +@deffn {Команда MGL} mirror dat 'dir' +Отражает данные в выбранном направлении(ях). Соответствует замене индекса на @var{i}->@var{n}-@var{i}. +@end deffn + +@cindex sew +@anchor{sew} +@deffn {Команда MGL} sew dat ['dir'='xyz' @code{da=2*pi}] +Удаляет скачки данных (например, скачки фазы после обратных тригонометрических функций) с периодом @var{da} в выбранном направлении(ях). +@end deffn + +@cindex smooth +@anchor{smooth} +@deffn {Команда MGL} smooth data @code{type} ['dir'='xyz'] +Сглаживает данные в выбранном направлении(ях) методом @var{type}. Сейчас поддерживаются 4 метода: @code{0} ничего не делает, @code{1} линейное усреднение по 3 точкам, @code{2} линейное усреднение по 5 точкам, @code{3} квадратичное усреднение по 5 точкам. +@end deffn + +@cindex envelop +@anchor{envelop} +@deffn {Команда MGL} envelop dat ['dir'='x'] +Находит огибающую данных в выбранном направлении. Только одно направление может быть выбрано за раз. +@end deffn + +@cindex normsl +@anchor{normsl} +@deffn {Команда MGL} normsl dat @code{v1 v2} ['dir'='z' @code{keep=on sym=off}] +Нормирует данные срез-за-срезом в выбранном направлении @var{dir} в интервал [@var{v1},@var{v2}]. Если @var{sym}=@code{on}, то используется симметричный интервал [-max(|v1|,|v2|), max(|v1|,|v2|)]. Если @var{keep}=@code{on}, то максимальное значение k-го среза ограничено величиной +@iftex +@math{\sqrt{\sum a_{ij}(k)/\sum a_{ij}(0)}}. +@end iftex +@ifnottex +@math{\sqrt@{\sum a_ij(k)/\sum a_ij(0)@}}. +@end ifnottex +@end deffn + +@cindex norm +@anchor{norm} +@deffn {Команда MGL} norm dat @code{v1 v2 [sym=off dim=0]} +Нормирует данные в интервал [@var{v1},@var{v2}]. Если @var{sym}=@code{on}, то используется симметричный интервал [-max(|v1|,|v2|), max(|v1|,|v2|)]. Изменения применяются только к срезам >=@var{dim}. +@end deffn + +@c ------------------------------------------------------------------ +@node Operators @MGL{}, Program flow @MGL{}, Change data @MGL{}, MGL interface +@section Операторы @MGL{} + +@cindex multo +@anchor{multo} +@deffn {Команда MGL} multo dat dat2 +Поэлементно умножает массив @var{dat} на @var{dat2}. +@end deffn +@deffn {Команда MGL} multo dat @code{val} +Умножает каждый элемент на число. +@end deffn + +@cindex divto +@anchor{divto} +@deffn {Команда MGL} divto dat dat2 +Поэлементно делит массив @var{dat} на @var{dat2}. +@end deffn +@deffn {Команда MGL} divto dat @code{val} +Делит каждый элемент на число. +@end deffn + +@cindex addto +@anchor{addto} +@deffn {Команда MGL} addto dat dat2 +Поэлементно прибавляет @var{dat2} к массиву @var{dat}. +@end deffn +@deffn {Команда MGL} addto dat @code{val} +Прибавляет число к каждому элементу. +@end deffn + +@cindex subto +@anchor{subto} +@deffn {Команда MGL} subto dat dat2 +Поэлементно вычитает @var{dat2} из массива @var{dat}. +@end deffn +@deffn {Команда MGL} subto dat @code{val} +Вычитает число из каждого элемента. +@end deffn + +@c ------------------------------------------------------------------ +@node Program flow @MGL{}, Command options @MGL{}, Operators @MGL{}, MGL interface +@section Программирование @MGL{} + +Эти команды управляют порядком выполнения других команд (условия, циклы, подпрограммы), (пере-)определяют аргументы скрипта и пр. + +@cindex chdir +@anchor{chdir} +@deffn {Команда MGL} chdir 'path' +Переходит в папку @var{path}. +@end deffn + +@cindex define +@anchor{define} +@deffn {Команда MGL} define $N smth +Задает @var{N}-ый аргумент скрипта равным @var{smth}. Отмечу, что @var{smth} используется как есть (с символами @samp{'} если присутствуют). Выполняется только подстановка других макроопределений $0...$9, $a...$z. Здесь @var{N} это цифра (0...9) или буква (a...z). +@end deffn +@deffn {Команда MGL} define name smth +Определяет константу (скаляр) с именем @code{name} и числовым значением @code{smth}. Позднее она может быть использована как обычное число. +@end deffn +@cindex defchr +@anchor{defchr} +@deffn {Команда MGL} defchr $N smth +Задает @var{N}-ый аргумент скрипта равным символу с UTF кодом @var{smth}. Здесь @var{N} это цифра (0...9) или буква (a...z). +@end deffn +@cindex defnum +@anchor{defnum} +@deffn {Команда MGL} defnum $N smth +Задает @var{N}-ый аргумент скрипта равным числовому значению @var{smth}. Здесь @var{N} это цифра (0...9) или буква (a...z). +@end deffn +@cindex defpal +@anchor{defpal} +@deffn {Команда MGL} defpal $N smth +Задает @var{N}-ый аргумент скрипта равным символу палитры с индексом, найденным из @var{smth}. Здесь @var{N} это цифра (0...9) или буква (a...z). +@end deffn + +@cindex call +@anchor{call} +@deffn {Команда MGL} call 'fname' [ARG1 ARG2 ... ARG9] +Переходит к выполнению (вызывает) подпрограммы @var{fname} (или внешнего скрипта, если функция не была найдена). Опциональные аргументы передаются в подпрограмму. См. также @ref{func}. +@end deffn +@cindex func +@anchor{func} +@deffn {Команда MGL} func 'fname' [narg=0] +Определяет подпрограмму с именем @var{fname} и задает число требуемых аргументов. Аргументы будут помещены в параметры скрипта $1, $2, ... $9. Отмечу, что выполнение основной программы должно быть остановлено до начала определений подпрограмм. См. также @ref{stop}, @ref{return}. +@end deffn +@cindex return +@anchor{return} +@deffn {Команда MGL} return +Возвращается из подпрограммы. +@end deffn + + +@cindex if +@anchor{if} +@deffn {Команда MGL} if dat 'cond' +Начинает блок команд, выполняемый если каждый элемент @var{dat} удовлетворяет условию @var{cond}. +@end deffn +@deffn {Команда MGL} if @code{val} +Начинает блок команд, выполняемый если @code{val} не ноль. +@end deffn +@cindex elseif +@anchor{elseif} +@deffn {Команда MGL} elseif dat 'cond' +Начинает блок команд, выполняемый если предыдущий @code{if} или @code{elseif} не был выполнен и каждый элемент @var{dat} удовлетворяет условию @var{cond}. +@end deffn +@deffn {Команда MGL} elseif @code{val} +Начинает блок команд, выполняемый если предыдущий @code{if} или @code{elseif} не был выполнен и @code{val} не ноль. +@end deffn +@cindex else +@anchor{else} +@deffn {Команда MGL} else +Начинает блок команд, выполняемый если предыдущий @code{if} или @code{elseif} не был выполнен. +@end deffn +@cindex endif +@anchor{endif} +@deffn {Команда MGL} endif +Заканчивает определение блока @code{if/elseif/else}. +@end deffn + +@cindex for +@anchor{for} +@deffn {Команда MGL} for $N @code{v1 v2 [dv=1]} +Начинает блок команд, выполняемый в цикле с $@var{N}-ым аргументом изменяющимся от @var{v1} до @var{v2} с шагом @var{dv}. Здесь @var{N} это цифра (0...9) или буква (a...z). +@end deffn +@deffn {Команда MGL} for $N dat +Начинает блок команд, выполняемый в цикле с $@var{N}-ым аргументом пробегающим значения массива @var{dat}. Здесь @var{N} это цифра (0...9) или буква (a...z). +@end deffn +@cindex next +@anchor{next} +@deffn {Команда MGL} next +Заканчивает блок цикла @code{for}. +@end deffn + +@cindex once +@anchor{once} +@deffn {Команда MGL} once @code{val} +Определяет код (между @code{once on} и @code{once off}) который будет выполнен только один раз. Полезно для работы с большими данными в программах типа UDAV. +@end deffn +@cindex stop +@anchor{stop} +@deffn {Команда MGL} stop +Останавливает выполнение скрипта. +@end deffn + +@c ------------------------------------------------------------------ +@node Command options @MGL{}, Suffixes, Program flow @MGL{}, MGL interface +@section Опции команд @MGL{} + +Опции команд позволяют легко настроить вид отдельного графика не меняя глобальных настроек для все рисунка. Опции указываются после команды. Каждая опция отделяется от предыдущей символом @samp{;}. Опции работают так, что запоминают текущие настройки рисунка, применяют собственные настройки, выполняют команду и возвращают глобальные настройки обратно. Поэтому использование опций для команд обработки данных или настройки графика бесполезно. + +Наиболее часто используемые опции -- @code{xrange, yrange, zrange}, устанавливающие границы изменения осей координат (и тем самым автоматических массивов). Например, команда @code{plot y; xrange 0.1 0.9} построит кривую с x-координатой равно распределенной в интервале 0.1 ... 0.9, а не вдоль текущей оси x. + +Полный список опций: +@cindex alpha +@cindex alphadef +@deffn {Опция MGL} alpha @code{val} +@deffnx {Опция MGL} alphadef @code{val} +Задает величину прозрачности поверхности. Значение должно быть в диапазоне [0, 1]. См. также @ref{alphadef} +@end deffn +@cindex ambient +@deffn {Опция MGL} ambient @code{val} +Задает яркость фонового освещения. Значение должно быть в диапазоне [0, 1]. См. также @ref{ambient} +@end deffn +@cindex crange +@deffn {Опция MGL} crange @code{val1 val2} +Задает границы цветовой шкалы. См. также @ref{crange} +@end deffn +@cindex xrange +@deffn {Опция MGL} xrange @code{val1 val2} +Задает границы изменения координаты x. См. также @ref{xrange} +@end deffn +@cindex yrange +@deffn {Опция MGL} yrange @code{val1 val2} +Задает границы изменения координаты y. См. также @ref{yrange} +@end deffn +@cindex zrange +@deffn {Опция MGL} zrange @code{val1 val2} +Задает границы изменения координаты z. См. также @ref{zrange} +@end deffn +@cindex cut +@deffn {Опция MGL} cut @code{val} +Задает обрезание точек за пределами осей координат. См. также @ref{cut} +@end deffn +@cindex fontsize +@deffn {Опция MGL} fontsize @code{val} +Задает размер текста. См. также @ref{font} +@end deffn +@cindex marksize +@deffn {Опция MGL} marksize @code{val} +Задает размер маркеров. См. также @ref{marksize} +@end deffn +@cindex meshnum +@deffn {Опция MGL} meshnum @code{val} +Задает ориентировочное число линий, стрелок, ячеек и пр. См. также @ref{meshnum} +@end deffn +@cindex legend +@deffn {Опция MGL} legend 'txt' +Добавляет строку 'txt' во внутренний массив записей легенды. Стиль линии и маркера аргумента последней вызванной команды построения @ref{1D plotting @MGL{}}. См. также @ref{legend} +@end deffn + +@c ------------------------------------------------------------------ +@node Suffixes, Utilities, Command options @MGL{}, MGL interface +@section Суффиксы переменных + +Суффиксы позволяют быстро получить числовую характеристику (размер, максимальное или минимальное значение, сумму элементов и т.д.) массива данных и использовать ее как число (скаляр) в аргументах. Суффиксы начинаются с точки @samp{.} сразу после (без пробелов) имени переменной и временного массива. Например, @code{a.nx} даст размер массива @var{a} по оси х, @code{b(1).max} даст максимальное значение второй строки массива @var{b}, @code{(c(:,0)^2).sum} даст сумму квадратов элементов первой колонки массива @var{c} и т.д. + +Полный список суффиксов: +@table @strong +@item nx, ny, nz +Размер массива в направлении x, y, z соответственно. +@item max +Максимальное значение массива. +@item min +Минимальное значение массива. +@item sum +Сумма элементов массива. +@item a +Первый элемент массива (элемент с индексами 0,0,0). +@item fst +Первое не нулевое значение массива. +@item lst +Последнее не нулевое значение массива. +@item mx, my, mz +Положение максимума в направлении x, y, z соответственно. +@item ax, ay, az, aa +Положение центра масс в направлении x, y, z соответственно или среднее значение массива. +@item wx, wy, wz, wa +Ширина в направлении x, y, z соответственно или дисперсия элементов массива. +@item sx, sy, sz, sa +Асимметрия в направлении x, y, z соответственно или элементов массива. +@item kx, ky, kz, ka +Эксцесс в направлении x, y, z соответственно или элементов массива. +@end table + +@c ------------------------------------------------------------------ +@node Utilities, , Suffixes, MGL interface +@section Утилиты для MGL + +MathGL содержит несколько программ для работы со скриптами MGL. Есть утилита для сохранения в растровое (@code{mgl2png}, @code{mgl2gif}) или векторное (@code{mgl2eps}, @code{mgl2svg}) изображения. Программа @code{mglview} показывает результат выполнения скрипта MGL и позволяет вращать и настраивать график. Также можно транслировать MGL скрипт в C++ файл с помощью программы @code{mgl2cpp}. + +Все эти программы имеют схожий набор аргументов. Первым идет имя скрипта, а вторым идет имя выходного файлы (может быть опущено), последние аргументы -- опции скрипта и программы. К опциям относятся параметры скрипта (это @code{$0, $1, ... $9}) и настройки локали. Параметры скрипта имеют формат @samp{-Nval}, где N=0,1...9 -- номер параметра, val -- его значние. Например, опция @samp{-1test} заменит @code{$1} на @samp{test} в скрипте. Опция -Lval устанавливает локаль в значение val. Например, @samp{-Lutf8} будет использовать UTF-8 в скрипте. + +Также можно создавать анимированные изображения GIF или набор JPEG файлов с именами @samp{frameNNNN.jpg} (где @samp{NNNN} -- номер кадра). Для этого в скрипте надо указать параметры анимации для каждого кадра (строками с коментариями @code{##a val} или опциями @samp{-Aval}) или в цикле (строкой с комментарием @code{##с v1 v2 [dv]} или опцию @samp{-Cn1:n2}), которые будут подставлены в качестве параметра @code{$0} при последовательном вызове скрипта. Для сохранения кадров в JPEG просто добавьте команду @code{write ''} в конце скрипта. + + diff --git a/texinfo/mgl_en.texi b/texinfo/mgl_en.texi index 5a7d32a..66c5f81 100644 --- a/texinfo/mgl_en.texi +++ b/texinfo/mgl_en.texi @@ -1,1639 +1,104 @@ -@c ------------------------------------------------------------------ -@node MGL interface, Samples, Other classes, Top -@chapter MGL interface +\input texinfo +@setfilename mgl_en.info +@set VERSION 1.11 +@settitle MGL script language for version @value{VERSION} +@syncodeindex pg cp +@comment %**end of header + +@copying +This manual is for MathGL (version @value{VERSION}), a collection of classes and routines for scientific plotting. Please report any errors in this manual to @email{mathgl.abalakin@@gmail.org}. + +Copyright @copyright{} 2008 Alexey Balakin. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with the Front-Cover Texts being ``A GNU Manual,'' +and with the Back-Cover Texts as in (a) below. A copy of the +license is included in the section entitled ``GNU Free Documentation +License.'' + +(a) The FSF's Back-Cover Text is: ``You have the freedom to +copy and modify this GNU manual. Buying copies from the FSF +supports it in developing GNU and promoting software freedom.'' +@end quotation +@end copying + +@c @dircategory MathGL documentation system +@c @direntry +@c * MathGL: (mathgl). The library for scientific graphics. +@c @end direntry + +@titlepage +@title MGL script language +@subtitle for version @value{VERSION} +@author A.A. Balakin (@uref{http://mathgl.sourceforge.net/}) +@page +@vskip 0pt plus 1filll +@insertcopying +@end titlepage + +@contents -MathGL library supports (from version 1.3) the simplest scripts for data handling and plotting. These scripts can be used independently (with the help of mgl2png, mgl2eps, mgl2svg programs and others) or in the frame of the library using. - -MGL script language is rather simple. Each string is a command. First word of string is the name of command. Other words are command arguments. Command may have up to 1000 arguments (at least for now). Words are separated from each other by space or tabulation symbol. The upper or lower case of words is sufficient, i.e. variables a and A are different variables. Symbol @samp{#} starts the comment (all characters after # will be ignored). The exception is situation when # is a part of some string. Also options can be specified at the end of string (after symbol @samp{;}, @pxref{Command options (MGL)}). Symbol @samp{:} starts new command (like new line character) if it is not placed inside a string or inside brackets. - -If string contain references to external parameters (substrings @samp{$0}, @samp{$1} ... @samp{$9}) then before execution the values of parameter will be substituted instead of reference. It allows to use the same MGL script for different parameters (filenames, paths, condition and so on). - -Argument can be a string, a variable name or a number. -@itemize @bullet -@item -The string is any symbols between ordinary marks @samp{'}. - -@item -Variable name is arbitrary combination of symbols (except spaces and @samp{'}) started from a letter and with length less than 64. It is possible to use sub-arrays (like in @code{subdata} command) as command argument. For example, @code{a(1)} or @code{a(1,:)} or @code{a(1,:,:)} is second row, @code{a(:,2)} or @code{a(:,2,:)} is third column, @code{a(:,:,0)} is first slice and so on. Also you can extract a part of array from m-th to n-th element by code @code{a(m:n,:,:)} or just @code{a(m:n)}. - -If names for data columns was specified (by set_id command or in the file at string started with @code{##}) then it is possible to use any column combinations defined by formulas, like @code{a('n*w^2/exp(t)')}. - -Also, any expression (without spaces) of existed variables produce temporary variable. For example, @samp{sqrt(dat(:,5)+1)} will produce temporary variable with data values equal to @code{tmp[i,j] = sqrt(dat[i,5,j]+1)}. Such variables can not be used as 1st argument for commands which create (return) the data (like @samp{new}, @samp{read}, @samp{hist} and so on). - -Finally, you can put code for making new data inside @{@}. For example, @samp{@{sum dat 'x'@}} produce temporary variable which contain result of summation of @var{dat} along direction 'x'. This is the same array @var{tmp} as produced by command @samp{sum tmp dat 'x'}. You can use nested constructions, like @samp{@{sum @{max dat 'z'@} 'x'@}}. - -@item -Special names @code{nan=#QNAN, pi=3.1415926..., on=1, off=0, :=-1} are treated as number if they were not redefined by user. Variables with suffixes are treated as numbers (@pxref{Suffixes}). Names defined by @code{define} command are treated as number. Also results of formulas with sizes 1x1x1 are treated as number (for example, @samp{pi/dat.nx}). -@end itemize -Before the first using all variables must be defined with the help of commands, like, @code{new, var, list, copy} or @code{read}. - -All MGL commands can be divided on several groups. I will use the following notation for a command description: command names are bold, strings are denoted by commas, variable names are italic, numbers are typewriter. Optional arguments are placed in square brackets and default values for them are shown. Detailed description of color, line styles, color schemes, font types, TeX-like symbols and formulas can be found in corresponding section. - -@menu -* Graphics setup (MGL):: -* Axis settings (MGL):: -* Transformation matrix (MGL):: -* Export to file (MGL):: -* Primitives drawing (MGL):: -* Text printing (MGL):: -* Axis and Colorbar (MGL):: -* Legend (MGL):: -* 1D plotting (MGL):: -* 2D plotting (MGL):: -* 3D plotting (MGL):: -* Dual plotting (MGL):: -* Vector fields (MGL):: -* Other plotting (MGL):: -* Nonlinear fitting (MGL):: -* Data create (MGL):: -* Data filling (MGL):: -* Rearrange data (MGL):: -* File I/O (MGL):: -* Make another data (MGL):: -* Commands on direction (MGL):: -* Operators (MGL):: -* Program flow (MGL):: -* Command options (MGL):: -* Suffixes:: -* Utilities:: -@end menu - - -@c ################################################################## -@node Graphics setup (MGL), Axis settings (MGL), , MGL interface -@section Graphics setup (MGL) - -Coomands in this group influences on overall graphics appearance. So all of them should be placed @emph{before} any actual plotting commands. - -@menu -* Transparency (MGL):: -* Lighting (MGL):: -* Fog (MGL):: -* Default sizes (MGL):: -* Zooming (MGL):: -* Cutting (MGL):: -* Other settings (MGL):: -@end menu - -@c ================================================================== -@node Transparency (MGL), Lighting (MGL), , Graphics setup (MGL) -@subsection Transparency (MGL) -@cindex alpha -@cindex alphadef -@cindex transparent -@cindex transptype - -There are several commands for setup transparency. The general command is @code{alpha} which switch on/off the transparency for overall plot. It influence only for graphics which created after @code{alpha} call (with one exeption, mglGraphGL). Command @code{alphadef} specify the default value of alpha-channel. You may switch off transparency of selected plot by command @code{transparent}. Finally, command @code{transptype} set the kind of transparency. @sref{Transparent surface sample} - -@deffn {MGL command} alpha @code{[val=on]} -Sets the transparency on/off. It is recommended to call this command before any plotting command. Default value is @code{off}. Use @code{transparent off} in particular plot to disable its transparency. -@end deffn -@deffn {MGL command} alphadef @code{val} -Default value of alpha channel (transparency) for all plotting commands. Initial value is 0.5. -@end deffn -@deffn {MGL command} transparent @code{val} -Temporary switches transparency on/off for the plot. -@end deffn -@deffn {MGL command} transptype @code{val} -This command set the transparency type. Normal transparency (@samp{0}) -- below things is less visible than upper ones. It does not look well in OpenGL mode (mglGraphGL) for several surfaces. Glass-like transparency (@samp{1}) -- below and upper things are commutable and just decrease intensity of light by RGB channel. Lamp-like transparency (@samp{2}) -- below and upper things are commutable and are the source of some additional light. I recommend to set @code{alphadef 0.3} or less for lamp-like transparency. -@end deffn - -@c ================================================================== -@node Lighting (MGL), Fog (MGL), Transparency (MGL), Graphics setup (MGL) -@subsection Lighting (MGL) -@cindex light -@cindex ambient - -There are several commands for setup lighting. The general command is @code{light} which switch on/off the lighting for overall plot. It influence only for graphics which created after @code{light} call (with one exeption, mglGraphGL). Generally MathGL support up to 10 independent light sources. But in OpenGL mode only 8 of light sources is used due to OpenGL limitations. The position, color, brightness of each light source can be set separately. By default only one light source is active. It is source number @code{0} with white color, located at top of the plot. - -@deffn {MGL command} light @code{[val=on]} -Sets the using of light on/off for overall plot. It is recommended to call this command before any plotting command. Default value is lightning off. -@end deffn -@deffn {MGL command} light @code{num val} -Switch on/off @var{num}-th light source separately. -@end deffn - -@deffn {MGL command} light @code{num xpos ypos zpos} ['col'='w' @code{br=0.5}] -The command adds a light source with identification @var{num} at position @{@var{xpos}, @var{ypos}, @var{zpos}@}. The color of light is @var{col} (white by default). The brightness of light is @var{br} which must be in range [0,1]. -@end deffn - -@deffn {MGL command} ambient @code{val} -Sets the brightness of ambient light. The value should be in range [0,1]. Initial value is 0.5. -@end deffn - -@c ================================================================== -@node Fog (MGL), Default sizes (MGL), Lighting (MGL), Graphics setup (MGL) -@subsection Fog (MGL) -@cindex fog - -@deffn {MGL command} fog @code{val [dz=0.25]} -Command imitate a fog in the plot. Fog start from relative distance @var{dz} from view point and its density growths exponentially in depth. So that the fog influence is determined by law ~ 1-exp(-@emph{val*z}). Here @emph{z} is normalized to 1 depth of the plot. If value @var{val}=@code{0} then the fog is absent. @sref{Surface in fog sample} -@end deffn - -@c ================================================================== -@node Default sizes (MGL), Zooming (MGL), Fog (MGL), Graphics setup (MGL) -@subsection Default sizes (MGL) -@cindex marksize -@cindex arrowsize -@cindex linewidth -@cindex ticklen -@cindex tickstl - -These commands control the default (initial) values for most graphics parameters including sizes of markers, arrows, linewidth and so on. As any other settings these ones will influence only on plots created after the settings change. - -@deffn {MGL command} barwidth @code{val} -Sets relative width of rectangles in @code{bars, barh, boxplot}. Default value is @code{0.7}. -@end deffn - -@deffn {MGL command} marksize @code{val} -The size of marks. Default value is @code{1}. -@end deffn - -@deffn {MGL command} arrowsize @code{val} -The size of arrows for lines and curves. Default value is @code{1}. -@end deffn - -@deffn {MGL command} linewidth @code{val} -The variable define the base width for all lines. The value <1 is ignored. Increase of this variables is actual for large bitmap pictures. Default value is @code{1}. -@end deffn - -@deffn {MGL command} ticklen @code{val} [@code{stt=1}] -The relative length of axis ticks. Default value is @code{0.1}. Parameter @var{stt}>0 set relative length of subticks which is in @code{sqrt(1+stt)} times smaller. -@end deffn - -@deffn {MGL command} tickstl 'stl' ['sub'=''] -The line style of axis ticks (@var{stl}) and subticks (@var{sub}). If @var{stl}='' then default style is used (@samp{k} or @samp{w} depending on transparency type). If @var{sub}='' then ticks style is used (i.e. @var{stl}). -@end deffn - -@c ================================================================== -@node Zooming (MGL), Cutting (MGL), Default sizes (MGL), Graphics setup (MGL) -@subsection Zooming (MGL) -@cindex plotfactor -@cindex zoom - -These commands control the overall zooming of the picture or the sub-picture. Normally you can use these variables and commands for removing ``white'' spaces around a plot. - -@deffn {MGL command} plotfactor @code{val} -The factor of plot size. It is not recommended to set it lower then 1.6. This is some analogue of command @code{zoom} but applied not to overall image but for each @code{inplot}. Use negative value to enable automatic @code{plotfactor} selection. -@end deffn - -@deffn {MGL command} zoom @code{x1 y1 x2 y2} -The command changes the scale of graphics that correspond to zoom in/out of the picture. After command call the current plot will be cleared and further the picture will contain plotting from its part [x1,x2]*[y1,y2]. Here picture coordinates @var{x1}, @var{x2}, @var{y1}, @var{y2} changes from 0 to 1. Use @code{zoom 0 0 1 1} to return default view. -@end deffn - -@c ================================================================== -@node Cutting (MGL), Other settings (MGL), Zooming (MGL), Graphics setup (MGL) -@subsection Cutting (MGL) -@cindex cut - -These commands set the condition when the points are excluded (cutted) from the drawing. - -@deffn {MGL command} cut @code{val} -Determines how points outside bounding box are drawn. If it is @code{true} then points are excluded from plot (it is default) otherwise the points are projected to edges of bounding box. -@end deffn - -@deffn {MGL command} cut @code{x1 y1 z1 x2 y2 z2} -Lower and upper edge of the box in which never points are drawn. If both edges are the same (the variables are equal) then the cutting box is empty. @sref{CutMinMax sample} -@end deffn - -@deffn {MGL command} cut 'cond' -Command set the cutting off condition by formula @var{cond}. This condition determine will point be plotted or not. If value of formula is nonzero then point is omitted, otherwise it plotted. Set argument as @code{''} to disable cutting off condition. @sref{CutOff sample} -@end deffn - -@c ================================================================== -@node Other settings (MGL), , Cutting (MGL), Graphics setup (MGL) -@subsection Other settings (MGL) -@cindex font -@cindex rotatetext -@cindex palette -@cindex meshnum -@cindex axialdir - -@deffn {MGL command} font 'fnt' [@code{val=6}] -Font style for text and labels (see text). Initial style is 'fnt'='rC' give Roman font with centering. Parameter @code{val} sets the size of font for tick and axis labels. Default font size of axis labels is 1.4 times large than for tick labels. For more detail, @pxref{Font style}. -@end deffn - -@deffn {MGL command} rotatetext @code{val} -Set to use or not text rotation along axis. Initial value is @code{on}. -@end deffn - -@deffn {MGL command} palette 'colors' -Set the palette as selected colors. Default value is @code{'Hbgrcmyhlnqeup'}. The palette is used mostly in 1D plots for curves which styles are not specified. -@end deffn - -@deffn {MGL command} meshnum @code{num} -Sets approximate number of lines in @code{mesh, fall, grid} and also the number of hachures in @code{vect, vectc, dew} and the number of cells in @code{cloud}. By default (=0) it draws all lines/hachures/cells. -@end deffn - -@deffn {MGL command} axialdir 'dir' -Set direction around which curve rotated in @code{axial, torus}. Default value is 'z'. -@end deffn - -@c ================================================================== -@node Axis settings (MGL), Transformation matrix (MGL), Graphics setup (MGL), MGL interface -@section Axis settings (MGL) -@cindex axis -@cindex caxis -@cindex xrange -@cindex yrange -@cindex zrange -@cindex crange -@cindex xtick -@cindex ytick -@cindex ztick -@cindex ctick -@cindex origin -@cindex adjust - -These large set of commands control how the axis and ticks will be drawn. Note that there is 3-step transformation of data coordinates are performed. Firstly, coordinates are projected and cutting is applied (@pxref{Cutting (MGL)}), after it transformation formulas are applied, and finally the data was normalized in bounding box. - -@deffn {MGL command} axis @code{x1 y1 x2 y2} -@deffnx {MGL command} axis @code{x1 y1 z1 x2 y2 z2} -@deffnx {MGL command} ranges @code{x1 x2 y1 y2 [z1=0 z2=0]} -Sets the ranges of coordinates changing. Also it sets the range for coloring (analogous to @code{caxis z1 z2}). Initial ranges are [-1, 1]. -@end deffn - -@deffn {MGL command} axis 'fx' 'fy' ['fz'='' 'fa'=''] -Sets the transformation formulas for curvilinear coordinates. Each string should contain mathematical expression for real coordinate depending on internal coordinates 'x', 'y', 'z' and 'a' or 'c' for colorbar. For example, the cylindrical coordinates are introduced as @code{axis 'x*cos(y)' 'x*sin(y)' 'z'}. For removing of formulas the corresponding parameter should be @code{''}. The using of transformation formulas will slightly slowing the program, i.e. @code{axis '' '' ''} is faster than @code{axis '1*x' '1*y' '1*z'}. Initially all formulas are absent (Cartesian coordinates are used). For more details about functions and formulas, @pxref{mglFormula class}. -@end deffn - -@deffn {MGL command} axis @code{how} -Sets one of the predefined transformation formulas for curvilinear coordinate. Paramater @var{how} define the coordinates: @code{0} -- Cartesian coordinates (no transformation); @code{1} -- Polar coordiantes @math{x_n=x*cos(y),y_n=x*sin(y), z_n=z}; @code{2} -- Spherical coordinates @math{x_n=x*sin(y)*cos(z), y_n=x*sin(y)*sin(z), z_n=x*cos(y)}; @code{3} -- Parabolic coordinates @math{x_n=x*y, y_n=(x*x-y*y)/2, z_n=z}; @code{4} -- Paraboloidal coordinates @math{x_n=(x*x-y*y)*cos(z)/2, y_n=(x*x-y*y)*sin(z)/2, z_n=x*y}; @code{5} -- Oblate coordinates @math{x_n=cosh(x)*cos(y)*cos(z), y_n=cosh(x)*cos(y)*sin(z), z_n=sinh(x)*sin(y)}; @code{6} -- Prolate coordinates @math{x_n=sinh(x)*sin(y)*cos(z), y_n=sinh(x)*sin(y)*sin(z), z_n=cosh(x)*cos(y)}; @code{7} -- Elliptic coordinates @math{x_n=cosh(x)*cos(y), y_n=sinh(x)*sin(y), z_n=z}; @code{8} -- Toroidal coordinates @math{x_n=sinh(x)*cos(z)/(cosh(x)-cos(y)), y_n=sinh(x)*sin(z)/(cosh(x)-cos(y)), z_n=sin(y)/(cosh(x)-cos(y))}; @code{9} -- Bispherical coordinates @math{x_n=sin(y)*cos(z)/(cosh(x)-cos(y)), y_n=sin(y)*sin(z)/(cosh(x)-cos(y)), z_n=sinh(x)/(cosh(x)-cos(y))}; @code{10} -- Bipolar coordinates @math{x_n=sinh(x)/(cosh(x)-cos(y)), y_n=sin(y)/(cosh(x)-cos(y)), z_n=z}. -@end deffn - -@deffn {MGL command} caxis @code{z1 z2} -Sets the range for surface coloring. Initial range is [-1, 1]. -@end deffn - -@deffn {MGL command} origin @code{x0 y0 [z0=nan]} -Center of axis cross section. If one of values is @code{nan} then MathGL library try to select optimal axis position. -@end deffn - -@deffn {MGL command} ternary @code{val} -The command sets to draws Ternary plot. This special plot is for 3 dependent coordinates (components) @var{a}, @var{b}, @var{c} so that @var{a}+@var{b}+@var{c}=1. MathGL uses only 2 independent coordinates @var{a}=x and @var{b}=y since it is enough to plot everything. At this third coordinate z act as another parameter to produce contour lines, surfaces and so on. @sref{Ternary plot sample} -@end deffn - -@deffn {MGL command} xrange dat [@code{add=off fact=0}] -@deffnx {MGL command} yrange dat [@code{add=off fact=0}] -@deffnx {MGL command} zrange dat [@code{add=off fact=0}] -@deffnx {MGL command} crange dat [@code{add=off fact=0}] -Sets the range for x-,y-,z- coordinate or coloring as minimal and maximal values of data @var{dat}. Parameter @code{add=on} shows that the new range will be joined to existed one (nut will not replace it). Parameter @var{fact} add additional range increase on value (@var{Max}-@var{Min})*@var{fact}. -@end deffn - -@deffn {MGL command} xrange @code{x1 x2} -@deffnx {MGL command} yrange @code{x1 x2} -@deffnx {MGL command} zrange @code{x1 x2} -@deffnx {MGL command} crange @code{x1 x2} -Sets the range for x-,y-,z- coordinate or coloring. See also axis. -@end deffn - -@deffn {MGL command} xtick @code{val [sub=0 org=nan]} -@deffnx {MGL command} ytick @code{val [sub=0 org=nan]} -@deffnx {MGL command} ztick @code{val [sub=0 org=nan]} -@deffnx {MGL command} ctick @code{val} -Sets step for x-, y-, z-axis ticks or colorbar ticks (if @var{val}>0) or it's number (if @var{val}<0) in corresponding direction. Zero value @var{val}=0 sets logarithmic ticks. Parameter @var{sub} sets the number of sub-ticks. Parameter @var{org} set the starting points for ticks. If not @code{org=nan} then the value from @code{origin} is used. -@end deffn - -@deffn {MGL command} xtick 'templ' -@deffnx {MGL command} ytick 'templ' -@deffnx {MGL command} ztick 'templ' -@deffnx {MGL command} ctick 'templ' -Sets the template for x-, y-, z-axis ticks or colorbar ticks. It may contain TeX symbols also. If @var{templ}=@code{''} then default template is used (in simplest case it is @samp{%.2g}) with automatic detaching of common multiplier or common component. -@end deffn - -@deffn {MGL command} xtick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...] -@deffnx {MGL command} ytick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...] -@deffnx {MGL command} ztick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...] -Sets manual positions @var{val1},@var{val2},... and labels @var{lbl1},@var{lbl2},... for ticks along x-, y-, z-axis. Labels may contain TeX symbols also. -@end deffn - -@deffn {MGL command} adjust ['dir'='xyzc'] -Set the ticks step, number of sub-ticks and initial ticks position to be the most human readable for the axis along direction(s) @var{dir}. -@end deffn - - -@c ################################################################## -@node Transformation matrix (MGL), Export to file (MGL), Axis settings (MGL), MGL interface -@section Transformation matrix (MGL) -@cindex aspect -@cindex rotate -@cindex subplot -@cindex inplot -@cindex identity -@cindex perspective - -These commands control how and where further plotting will be placed. There is a curtain order of calling of these commands for the better plot view. First one should be @code{subplot} or @code{inplot} for specifying the place. After it a @code{rotate} and @code{aspect}. And finally any other plotting commands may be called. Alternatevely you can use @code{columnplot} for position plots in the column one by another without gap between plot axis (bounding boxes). - -@deffn {MGL command} subplot @code{nx ny m [dx=0 dy=0]} -Puts further plotting in a @var{m}-th cell of @var{nx}*@var{ny} grid of the whole frame area. This command set off any aspects or rotations. So it should be used first for creating the subplot. From the aesthetical point of view it is not recommended to use this command with different matrices in the same frame. The position of the cell can be shifted from its default position by relative size @var{dx}, @var{dy}. -@end deffn - -@deffn {MGL command} inplot @code{x1 x2 y1 y2 [rel=off]} -Puts further plotting in some region of the whole frame surface. This command allows one to create a plot in arbitrary place of the screen. The position is defined by rectangular coordinates [@var{x1}, @var{x2}]*[@var{y1}, @var{y2}]. The coordinates @var{x1}, @var{x2}, @var{y1}, @var{y2} are normalized to interval [0, 1]. If parameter @var{rel}=@code{on} then the relative position to current @code{subplot} is used. This command set off any aspects or rotations. So it should be used first for creating subplot. -@end deffn - -@deffn {MGL command} columnplot @code{num ind} -Puts further plotting in @var{ind}-th cell of column with @var{num} cells. The position is relative to previous @code{subplot} call (or @code{inplot} with @code{rel=off}). -@end deffn - -@deffn {MGL command} stickplot @code{num ind tet phi} -Puts further plotting in @var{ind}-th cell of stick with @var{num} cells. At this, stick is rotated on angles @var{tet}, @var{phi}. The position is relative to previous @code{subplot} call (or @code{inplot} with @code{rel=off}). -@end deffn - -@deffn {MGL command} rotate @code{tetz tetx [tety=0]} -Rotates a further plotting relative to each axis (x, z, y) consecutively on angles @var{tetx}, @var{tetz}, @var{tety}. -@end deffn - -@deffn {MGL command} rotate @code{tet x y z} -Rotates a further plotting around vector @{x,y,z@} on angle @var{tet}. -@end deffn - -@deffn {MGL command} aspect @code{ax ay [az=1]} -Defines aspect ratio for the plot. The viewable axes will be related one to another as the ratio @var{ax:ay:az}. For the best effect it should be used after @code{rotate} command. -@end deffn - -@deffn {MGL command} perspective @code{val} -Add (switch on) the perspective to plot. The parameter @math{val ~ 1/z_@{eff@} \in [0,1)}. By default (@code{val=0}) the perspective is off. -@end deffn - -@c ################################################################## -@node Export to file (MGL), Primitives drawing (MGL), Transformation matrix (MGL), MGL interface -@section Export to file (MGL) -@cindex write -@cindex setsize - -@deffn {MGL command} write 'fname' [@code{solid=off}] -Exports current picture/frame to file 'fname' (file type is determined by extension). Solid (usually white) background will be used if @code{solid=on}. If 'fname'='' then the file @samp{frameNNNN.jpg} is used, where @samp{NNNN} is current frame id. -@end deffn - -@deffn {MGL command} setsize @code{w h} -Sets size of picture in pixels. This function call @strong{must be} placed before any plotting command because it completely remove picture content. In some program the call of this function is forbidden. -@end deffn - - -@c ################################################################## -@node Primitives drawing (MGL), Text printing (MGL), Export to file (MGL), MGL interface -@section Primitives drawing -@cindex ball -@cindex clf -@cindex line -@cindex curve -@cindex facex -@cindex facey -@cindex facez -@cindex cone -@cindex drop -@cindex sphere - -These commands draw some simple objects like line, point, sphere, drop, cone and so on. - -@deffn {MGL command} clf -Clear the picture by removes all drawing from it. Does not change transformation matrix. -@end deffn - -@deffn {MGL command} ball @code{x y} ['col'='r'] -@deffnx {MGL command} ball @code{x y z} ['col'='r'] -Draws a point (ball) at position @{@var{x}, @var{y}, @var{z}@} with color defined by string @var{col}. -@end deffn - -@deffn {MGL command} line @code{x1 y1 x2 y2} ['stl'=''] -@deffnx {MGL command} line @code{x1 y1 z1 x2 y2 z2} ['stl'=''] -Draws a geodesic line (straight line in Cartesian coordinates) from point @{@var{x1},@var{y1},@var{z1}@} to @{@var{x2},@var{y2},@var{z2}@} using line style @var{stl}. -@end deffn - -@deffn {MGL command} curve @code{x1 y1 dx1 dy1 x2 y2 dx2 dy2} ['stl'=''] -@deffnx {MGL command} curve @code{x1 y1 z1 dx1 dy1 dz1 x2 y2 z2 dx2 dy2 dz2} ['stl'=''] -Draws Bezier-like curve from point @{@var{x1},@var{y1},@var{z1}@} to @{@var{x2},@var{y2},@var{z2}@} using line style @var{stl}. At this tangent is co-directed with @{@var{dx1},@var{dy1},@var{dz1}@}, @{@var{dx2},@var{dy2},@var{dz2}@} and proportional to its amplitude. -@end deffn - -@deffn {MGL command} facex @code{x0 y0 z0 wy wz} ['stl'='' @code{d1=0 d2=0}] -@deffnx {MGL command} facey @code{x0 y0 z0 wx wz} ['stl'='' @code{d1=0 d2=0}] -@deffnx {MGL command} facez @code{x0 y0 z0 wx wy} ['stl'='' @code{d1=0 d2=0}] -Draws the solid rectangle (face) perpendicular to [x,y,z]-axis correspondingly at position @{@var{x0}, @var{y0}, @var{z0}@} with color @var{stl} and with widths @var{wx}, @var{wy}, @var{wz} along corresponding directions. At this colors can be the same for all vertexes or different if all 4 colors are specified for each vertex. Parameters @var{d1}!=0, @var{d2}!=0 set additional shift of the last vertex (i.e. to draw quadrangle). -@end deffn - -@deffn {MGL command} sphere @code{x0 y0 r} ['col'='r'] -@deffnx {MGL command} sphere @code{x0 y0 z0 r} ['col'='r'] -Draw the sphere with radius @var{r} and center at point @{@var{x0}, @var{y0}, @var{z0}@} and color @var{stl}. -@end deffn - -@deffn {MGL command} drop @code{x0 y0 dx dy r} ['col'='b' @code{sh=1 asp=1}] -@deffnx {MGL command} drop @code{x0 y0 z0 dx dy dz r} ['col'='b' @code{sh=1 asp=1}] -Draw the drop with radius @var{r} at point @{@var{x0},@var{y0},@var{z0}@} elongated in direction @{@var{dx},@var{dy},@var{dz}@} and with color @var{col}. Parameter @var{sh} set the degree of drop oblongness: @samp{0} is sphere, @samp{1} is maximally oblongness drop. Parameter @var{asp} set relative width of the drop (this is analogue of ``ellipticity'' for the sphere). @sref{Drops sample} -@end deffn - -@deffn {MGL command} cone @code{x1 y1 z1 x2 y2 z2 r1} [@code{r2=-1} 'st'='' @code{edge=off}] -Draw tube (or truncated cone if @var{edge}=@code{off}) between points @{@var{x1},@var{y1},@var{z1}@}, @{@var{x2},@var{y2},@var{z2}@} with radiuses at the edges @var{r1}, @var{r2}. If @var{r2}<0 then it is supposed that @var{r2}=@var{r1}. The cone color is defined by string @var{stl}. -@end deffn - -@deffn {MGL command} rect @code{x1 y1 x2 y2} ['st'=''] -@deffnx {MGL command} rect @code{x1 y1 z1 x2 y2 z2} ['st'=''] -Draw rectangle from point @{@var{x1},@var{y1},@var{z1}@} to point @{@var{x2},@var{y2},@var{z2}@} using colors @var{stl}. If @var{stl} have 4 or more colors then it defines colors for each rectangle vertex (useful for making gradients, like @samp{wwrr}) else first color is used for whole rectangle. -@end deffn - -@c ################################################################## -@node Text printing (MGL), Axis and Colorbar (MGL), Primitives drawing (MGL), MGL interface -@section Text printing (MGL) -@cindex fgets -@cindex text -@cindex title - -These commands draw the text. There are commands for drawing text in arbitrary place, in arbitrary direction and along arbitrary curve. It is possible to use arbitrary font-faces and parse many TeX commands. The Unicode text is supported. So sometimes you need to specify locale. The @code{size} argument control the size of text: if positive it give the value, if negative it give the value relative to defined by @code{font} command. @xref{Font style}. - -@deffn {MGL command} text @code{x y} 'text' ['fnt'='' @code{size=-1.4}] -@deffnx {MGL command} text @code{x y z} 'text' ['fnt'='' @code{size=-1.4}] -Draws unrotated text string @var{text} at position @{@var{x},@var{y},@var{z}@} with specified style @var{fnt} and @var{size}. By default parameters from @code{font} command are used. -@end deffn - -@deffn {MGL command} text @code{x y dx dy} 'text' [@code{size=-1.4}] -@deffnx {MGL command} text @code{x y z dx dy dz} 'text' [@code{size=-1.4}] -The command plots the string @var{text} at position @{@var{x},@var{y},@var{z}@} along direction @{@var{dx},@var{dy},@var{dz}@} with specified style @var{fnt} and @var{size}. By default parameters from @code{font} command are used. -@end deffn - -@deffn {MGL command} title 'text' ['fnt'='' @code{size=-2}] -Print string @var{text} as title of the picture (at the top of the picture). Can be used at any place (even inside @code{subplot}). -@end deffn - -@deffn {MGL command} fgets @code{x y} 'fname' [@code{n=0} 'fnt'='' @code{size=-1.4}] -@deffnx {MGL command} fgets @code{x y z} 'fname' [@code{n=0} 'fnt'='' @code{size=-1.4}] -Draws unrotated @var{n}-th line of file @var{fname} at position @{@var{x},@var{y},@var{z}@} with specified @var{size}. By default parameters from @code{font} command are used. -@end deffn - - -@deffn {MGL command} text xdat 'text' ['fnt'='' @code{size=-1 zval=nan}] -@deffnx {MGL command} text xdat ydat 'text' ['fnt'='' @code{size=-1 zval=nan}] -@deffnx {MGL command} text xdat ydat zdat 'text' ['fnt'='' @code{size=-1}] -The command draws @var{text} along the curve between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} by font style @var{fnt} and with size @var{size}. The string @var{fnt} may contain symbols @samp{t} for printing the text under the curve (default), or @samp{T} for printing the text above the curve. The sizes of 1st dimension must be equal for all arrays @var{xdat.nx=ydat.nx=zdat.nx}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{z}[i] = @var{zval} is used. @sref{Text sample} -@end deffn - -@c ################################################################## -@node Axis and Colorbar (MGL), Legend (MGL), Text printing (MGL), MGL interface -@section Axis and Colorbar (MGL) -@cindex axis -@cindex box -@cindex grid -@cindex colorbar -@cindex xlabel -@cindex ylabel -@cindex zlabel -@cindex tlabel - -These commands draw the ``things for measuring'', like axis with ticks, colorbar with ticks, grid along axis, bounding box and labels for axis. For more information @pxref{Axis settings (MGL)}. - -@deffn {MGL command} axis ['dir'='xyz' @code{adjust=off}] -Draws axes with ticks (@pxref{Axis settings (MGL)}) in directions determined by string parameter @var{dir}.If string contain the symbol @samp{_} then tick labels are not printed. Font for ticks labels is determined by command @code{font}. Ticks will be automatically adjusted if @var{adjust}=@code{on} (by call of @code{adjust 'dir'}). -@end deffn - -@deffn {MGL command} colorbar ['sch'='' @code{pos=0}] -Draws colorbar with color scheme @var{sch} (current scheme if @code{sch=''}) at edge of plot. Parameter @var{pos} specifies the position of colorbar: @samp{0} - at right (default), @samp{1} - at left, @samp{2} - at top, @samp{3} - at bottom. @sref{Dens sample} -@end deffn - -@deffn {MGL command} colorbar 'sch' @code{pos x y w h} -Draws colorbar with color scheme @var{sch} (current scheme if not specified) at arbitrary position of subplot @{@var{x}, @var{y}@} (supposed to be in range [0,1]). Parameter @var{pos} specifies the position of colorbar labels: @samp{0} - at left, @samp{1} - at right, @samp{2} - at bottom, @samp{3} - at top. Parameters @var{w}, @var{h} set the relative width and height of the colorbar. -@end deffn - -@deffn {MGL command} colorbar vdat ['sch'='' @code{pos=0}] -Draws colorbar with sharp colors @var{sch} (current palette if @code{sch=NULL}) for values @var{vdat} at edge of plot. Parameter @var{pos} specifies the position of colorbar: @samp{0} - at right (default), @samp{1} - at left, @samp{2} - at top, @samp{3} - at bottom. @sref{Dens sample} -@end deffn - -@deffn {MGL command} grid ['dir'='xyz' 'pen'='B'] -Draws grid lines perpendicular to direction determined by string parameter @var{dir}. The step of grid lines is the same as tick step for an @code{axis}. The style of lines is determined by @var{pen} parameter. -@end deffn - -@deffn {MGL command} box ['stl'='k' @code{ticks=on}] -Draws bounding box outside the plotting volume with line style 'stl'. -@end deffn - -@deffn {MGL command} xlabel 'text' [@code{pos=1 size=-1.4 shift=0}] -@deffnx {MGL command} ylabel 'text' [@code{pos=1 size=-1.4 shift=0}] -@deffnx {MGL command} zlabel 'text' [@code{pos=1 size=-1.4 shift=0}] -@deffnx {MGL command} tlabel 'text' [@code{pos=1 size=-1.4 shift=0}] -Prints the label @var{text} for x-,y-,z-,t-axis (here @samp{t} is ``ternary'' axis @math{t=1-x-y}). The position of label is determined by @var{pos} parameter. If @var{pos}=0 then label is printed at the center of axis. If @var{pos}>0 then label is printed at the maximum of axis (default). If @var{pos}<0 then label is printed at the minimum of axis. The font size is 1.4 times larger than the one for ticks @code{font}. Parameter @code{shift} specify additional shifting of the label. @xref{Text printing (MGL)}. -@end deffn - -@c ################################################################## -@node Legend (MGL), 1D plotting (MGL), Axis and Colorbar (MGL), MGL interface -@section Legend (MGL) -@cindex legend -@cindex addlegend -@cindex clearlegend - -These commands draw legend to the graph (useful for @ref{1D plotting (MGL)}). Legend entry is a pair of strings: one for style of the line, another one with description text (with included LaTeX parsing). The array of string are accumulated first to the internal arrays (by command @code{addlegend}) and are plotted later. The position of the legend can be selected automatic or manually. Parameters @var{fnt} and @var{size} specify the font style and size. Parameter @var{llen} set the relative width of the line sample and the text indent (default value is 0.1). If line style string for entry is empty then the corresponding text is printed without indent. @sref{Legend sample} - -@deffn {MGL command} legend [@code{pos=3} 'fnt'='rL' @code{size=-1 llen=0.1}] -Draws legend of accumulated legend entries by font @var{fnt} with specified @var{size}. Parameter @var{pos} sets the position of the legend: @samp{0} is bottom left corner, @samp{1} is bottom right corner, @samp{2} is top left corner, @samp{3} is top right corner (is default). -@end deffn - -@deffn {MGL command} legend @code{x y} ['fnt'='rL' @code{size=-1 llen=0.1}] -Draws legend of accumulated legend entries by font @var{fnt} with @var{size}. Position of legend is determined by parameter @var{x}, @var{y} which supposed to be normalized to interval [0,1]. -@end deffn - -@deffn {MGL command} addlegend 'text' 'stl' -Adds string @var{text} to internal legend accumulator. The style of described line and mark is specified in string @var{stl} (@pxref{Line styles}). Maximal number of entries is 100. -@end deffn - -@deffn {MGL command} clearlegend -Clears saved legend strings. -@end deffn - -@deffn {MGL command} legendbox @code{val} -Switches on/off the drawing of a box near legend. By default, the box is drawn. -@end deffn - - - -@c ################################################################## -@node 1D plotting (MGL), 2D plotting (MGL), Legend (MGL), MGL interface -@section 1D plotting (MGL) -@cindex plot -@cindex tens -@cindex area -@cindex bars -@cindex barh -@cindex stem -@cindex step -@cindex torus -@cindex chart -@cindex mark -@cindex textmark -@cindex error -@cindex tube -@cindex region - -These commands perform plotting of 1D data. 1D means that data depended from only 1 parameter like parametric curve @{x(i),y(i),z(i)@}, i=1...n. Most of plotting type has similar interface. There are 3D version and two 2D versions. One of last requires single array. The parameters of line and marks are specified by the string argument. If the string parameter is NULL then solid line with color from palette Pal is used (@pxref{Palette and colors}). Also there are some special 1d plots having slightly different interface: surface of curve rotation (Torus), chart (Chart) and error boxes (Error), marks with variable size (Mark), tubes (Tube) and so on. @xref{Line styles}. - -The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @var{x.nx=y.nx=z.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=NULL}) solid line with color from palette is used (@pxref{Palette and colors}). - -@deffn {MGL command} plot ydat ['stl'='' @code{zval=nan}] -@deffnx {MGL command} plot xdat ydat ['stl'='' @code{zval=nan}] -@deffnx {MGL command} plot xdat ydat zdat ['stl'=''] -Draws continuous lines between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{tens, radar, area, step, stem, tube, mark, error, belt}. @sref{Plot sample} -@end deffn - - -@deffn {MGL command} radar adat ['stl'='' @code{r=-1}] -Draws radar chart which is continuous lines between points located on an radial lines (like plot in Polar coordinates). The plots are drawn for each row if one of the data is the matrix. Parameter @var{r} set the additional shift of data (i.e. the data @var{adat}+@var{r} is used instead of @var{adat}). If @code{r<0} then @code{r=max(0, -min(adat)}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). If @var{pen} containt @samp{#} symbol then "grid" (radial lines and circle for @var{r}) is drawn See also @code{plot}. @sref{Radar sample} -@end deffn - -@deffn {MGL command} tens ydat cdat ['stl'='' @code{zval=nan}] -@deffnx {MGL command} tens xdat ydat cdat ['stl'='' @code{zval=nan}] -@deffnx {MGL command} tens xdat ydat zdat cdat ['stl'=''] -Draws continuous lines between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} with color defined by @var{cdat}[i] (look like tension plot). If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{plot, mesh, fall}. @sref{Tens sample} -@end deffn - -@deffn {MGL command} area ydat ['stl'='' @code{zval=nan}] -@deffnx {MGL command} area xdat ydat ['stl'='' @code{zval=nan}] -@deffnx {MGL command} area xdat ydat zdat ['stl'=''] -Draws continuous lines between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} and fills it down to axis (to axis plane in 3D). If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{plot, bars, stem, region}. @sref{Area sample} -@end deffn - -@deffn {MGL command} region fdat gdat ['stl'='' @code{inside=off}] -@deffnx {MGL command} region xdat fdat gdat ['stl'='' @code{inside=off}] -Fills area between curves @{@var{xdat}[i], @var{fdat}[i]@} and @{@var{xdat}[i], @var{gdat}[i]@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. Parameter @code{inside=off} set to fill are with y1adat (minimum, lower quartile (Q1), median (Q2), upper quartile (Q3) and maximum) along second (j-th) direction. -@end deffn - -@c ################################################################## -@node 2D plotting (MGL), 3D plotting (MGL), 1D plotting (MGL), MGL interface -@section 2D plotting (MGL) -@cindex mesh -@cindex fall -@cindex belt -@cindex surf -@cindex boxs -@cindex tile -@cindex dens -@cindex cont -@cindex contf -@cindex contd -@cindex axial -@cindex grid - -These commands perform plotting of 2D data. 2D means that data depend from 2 independent parameters like matrix @math{f(x_i,y_j), i=1...n, j=1...m}. There are 6 generally different types of data representations: simple mesh lines plot (Mesh), surface plot (Surf), surface plot by boxes (Boxs), surface plot by tiles (Tile), waterfall-like plot (Fall), belt plot (Belt), density plot (Dens), contour lines plot (Cont), solid contours plot (ContF) and its rotational figure (Axial). Cont, ContF and Axial commands have variants for automatic and manual selection of level values for contours. Also there are commands for plotting data grid lines according to the data format (Grid) for enhancing density or contour plots. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. - -String parameter @var{sch} sets the color scheme (@pxref{Color scheme}). Previous color scheme is used by default. The minor dimensions of arrays @var{xdat}, @var{ydat}, @var{zdat} should be equal @var{xdat.nx=zdat.nx && ydat.nx=zdat.ny} or @var{xdat.nx=ydat.nx=zdat.nx && xdat.ny=ydat.ny=zdat.ny}. Arrays @var{xdat} and @var{ydat} can be vectors (not matrices as @var{zdat}). If array @var{xdat}, @var{ydat} is not specified then its an automatic arrays are used with values equidistantly distributed along x, y. Graphics are plotted for each z-slice of the data. - -@deffn {MGL command} mesh zdat ['sch'=''] -@deffnx {MGL command} mesh xdat ydat zdat ['sch'=''] -Draws mesh lines for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @code{surf, fall, meshnum, cont, tens}. @sref{Mesh sample} -@end deffn - -@deffn {MGL command} fall zdat ['sch'=''] -@deffnx {MGL command} fall xdat ydat zdat ['sch'=''] -Draws fall lines for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. If @var{sch} contain @samp{x} then lines are drawn along x-direction else (by default) lines are drawn along y-direction. See also @code{belt, mesh, meshnum, tens}. @sref{Fall sample} -@end deffn - -@deffn {MGL command} belt zdat ['sch'=''] -@deffnx {MGL command} belt xdat ydat zdat ['sch'=''] -Draws belts for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. If @var{sch} contain @samp{x} then belts are drawn along x-direction else (by default) lines are drawn along y-direction. See also @code{fall, surf, plot, meshnum}. @sref{Belt sample} -@end deffn - -@deffn {MGL command} surf zdat ['sch'=''] -@deffnx {MGL command} surf xdat ydat zdat ['sch'=''] -Draws surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @code{mesh, dens, belt, tile, boxs, surfc, surfa}. @sref{Surf sample} -@end deffn - -@deffn {MGL command} boxs zdat ['sch'=''] -@deffnx {MGL command} boxs xdat ydat zdat ['sch'=''] -Draws vertical boxes for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @code{surf, dens, tile, step}. @sref{Boxs sample} -@end deffn - -@deffn {MGL command} tile zdat ['sch'=''] -@deffnx {MGL command} tile xdat ydat zdat ['sch'=''] -Draws horizontal tiles for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @code{surf, dens, boxs, tile, step}. @sref{Tile sample} -@end deffn - -@deffn {MGL command} dens zdat ['sch'='' @code{zval=nan}] -@deffnx {MGL command} dens xdat ydat zdat ['sch'='' @code{zval=nan}] -Draws density plot for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal}. See also @code{surf, cont, contf, boxs, tile, dens[xyz]}. @sref{Dens sample} -@end deffn - -@deffn {MGL command} cont vdat zdat ['sch'='' @code{zval=nan}] -@deffnx {MGL command} cont vdat xdat ydat zdat ['sch'='' @code{zval=nan}] -Draws contour lines for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal} (or for @var{z}=@var{vdat}[k] if @code{zval=nan}). Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k. If string @var{stl} contain 't' (or 'T') symbol then contour labels will be drawn below (or above) the contours. See also @code{dens, contf, axial, cont[xyz]}. @sref{Cont sample} -@end deffn - -@deffn {MGL command} cont zdat ['sch'='' @code{num=7 zval=nan}] -@deffnx {MGL command} cont xdat ydat zdat ['sch'='' @code{num=7 zval=nan}] -The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}). -@end deffn - -@deffn {MGL command} contf vdat zdat ['sch'='' @code{zval=nan}] -@deffnx {MGL command} contf vdat xdat ydat zdat ['sch'='' @code{zval=nan}] -Draws solid (or filled) contours for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal} (or for @var{z}=@var{vdat}[k] if @code{zval=nan}). Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k (must be @code{vdat.nx>2}). See also @code{dens, cont, contd, axial, contf[xyz]}. @sref{ContF sample} -@end deffn - -@deffn {MGL command} contf zdat ['sch'='' @code{num=7 zval=nan}] -@deffnx {MGL command} contf xdat ydat zdat ['sch'='' @code{num=7 zval=nan}] -The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}). -@end deffn - -@deffn {MGL command} contd vdat zdat ['sch'='' @code{zval=nan}] -@deffnx {MGL command} contd vdat xdat ydat zdat ['sch'='' @code{zval=nan}] -Draws solid (or filled) contours for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal} (or for @var{z}=@var{vdat}[k] if @code{zval=nan}) with manual colors. Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k (must be @code{vdat.nx>2}). The color of k-th contour is @code{sch[k%strlen(sch)]}. See also @code{dens, cont, contf}. @sref{ContD sample} -@end deffn - -@deffn {MGL command} contd zdat ['sch'='' @code{num=7 zval=nan}] -@deffnx {MGL command} contd xdat ydat zdat ['sch'='' @code{num=7 zval=nan}] -The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}). -@end deffn - -@deffn {MGL command} axial vdat zdat ['sch'=''] -@deffnx {MGL command} axial vdat xdat ydat zdat ['sch'=''] -Draws surface which is result of contour plot rotation surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k. If string @var{sch} have symbol @samp{#} then wire plot is produced. If string @var{sch} contain symbols @samp{x}, @samp{y} or @samp{z} then rotation axis @code{axialdir} will be set to specified direction. If string @var{sch} have symbol @samp{#} then wire plot is produced. See also @code{cont, contf, torus, surf3}. @sref{Axial sample} -@end deffn - -@deffn {MGL command} axial zdat ['sch'='' @code{num=3}] -@deffnx {MGL command} axial xdat ydat zdat ['sch'='' @code{num=3}] -The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}). -@end deffn - -@deffn {MGL command} grid zdat ['sch'='' @code{zval=nan}] -@deffnx {MGL command} grid xdat ydat zdat ['sch'='' @code{zval=nan}] -Draws grid lines for density plot of surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal}. See also @code{dens, cont, contf}. -@end deffn - - -@c ################################################################## -@node 3D plotting (MGL), Dual plotting (MGL), 2D plotting (MGL), MGL interface -@section 3D plotting (MGL) -@cindex surf3 -@cindex dens3 -@cindex cont3 -@cindex conta -@cindex densa -@cindex grid3 -@cindex grida -@cindex cloud -@cindex contf3 -@cindex contfa -@cindex beam - -These commands perform plotting of 3D data. 3D means that data depend from 3 independent parameters like matrix @math{f(x_i,y_j,z_k), i=1...n, j=1...m, k=1...l}. There are 4 generally different types of data representations: isosurface or surface of constant value (Surf3), density plot at slices (Dens3), contour lines plot at slices (Cont3), solid contours plot at slices (ContF3) and cloud-like plot (Cloud). Surf3, Cont3 and ContF3 commands have variants for automatic and manual selection of level values for surfaces/contours. Also there are commands for plotting data grid lines according to the data format (Grid3) for enhancing density or contour plots. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. - -String paramter @var{sch} sets the color scheme (@pxref{Color scheme}). Previous color scheme is used by default. Arrays @var{x}, @var{y}, @var{z} can be vectors (not 3d arrays as @var{a}). If array @var{xdat}, @var{ydat}, @var{zdat} is not specified then its an automatic arrays are used with values equidistantly distributed along x, y, z. - - -@deffn {MGL command} surf3 adat @code{val} ['sch'=''] -@deffnx {MGL command} surf3 xdat ydat zdat adat @code{val} ['sch'=''] -Draws isosurface plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) at @var{a}(x,y,z)=@var{val}. If string contain @samp{#} then wire plot is produced. See also @code{cloud, dens3, surf3c, surf3a, axial}. @sref{Surf3 sample} -@end deffn - -@deffn {MGL command} surf3 adat ['sch'='' @code{num=5}] -@deffnx {MGL command} surf3 xdat ydat zdat adat ['sch'='' @code{num=5}] -Draws @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d data specified parametrically. -@end deffn - -@deffn {MGL command} dens3 adat 'dir' [@code{sval=-1} 'sch'=''] -@deffnx {MGL command} dens3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'=''] -Draws density plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Density is plotted at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. If string @var{stl} have symbol @samp{#} then grid lines are drawn. See also @code{cont3, contf3, dens, grid3}. @sref{Dens3 sample} -@end deffn - -@deffn {MGL command} densa adat ['sch'=''] -@deffnx {MGL command} densa xdat ydat zdat adat ['sch'=''] -Draws density plots at all central slices of the 3d data specified parametrically. -@end deffn - -@deffn {MGL command} cont3 vdat adat 'dir' [@code{sval=-1} 'sch'=''] -@deffnx {MGL command} cont3 vdat xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'=''] -Draws contour plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Contours are plotted for values specified in array @var{vdat} at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. If string @var{stl} have symbol @samp{#} then grid lines are drawn. If string @var{stl} contain 't' (or 'T') symbol then contour labels will be drawn below (or above) the contours. See also @code{dens3, contf3, cont, grid3}. @sref{Cont3 sample} -@end deffn - -@deffn {MGL command} cont3 adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}] -@deffnx {MGL command} cont3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}] -The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see @code{caxis}). -@end deffn - -@deffn {MGL command} conta adat ['sch'='' @code{num=7}] -@deffnx {MGL command} conta xdat ydat zdat adat ['sch'='' @code{num=7}] -Draws contour plots at all central slices of the 3d data specified parametrically. -@end deffn - -@deffn {MGL command} contf3 vdat adat 'dir' [@code{sval=-1} 'sch'=''] -@deffnx {MGL command} contf3 vdat xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'=''] -Draws solid contour plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Contours are plotted for values specified in array @var{vdat} at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. If string @var{stl} have symbol @samp{#} then grid lines are drawn. See also @code{dens3, cont3, contf, grid3}. @sref{ContF3 sample} -@end deffn - -@deffn {MGL command} contf3 adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}] -@deffnx {MGL command} contf3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}] -The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see @code{caxis}). -@end deffn - -@deffn {MGL command} contfa adat ['sch'='' @code{num=7}] -@deffnx {MGL command} contfa xdat ydat zdat adat ['sch'='' @code{num=7}] -Draws solid contour plots at all central slices of the 3d data specified parametrically. -@end deffn - -@deffn {MGL command} grid3 adat 'dir' [@code{sval=-1} 'sch'=''] -@deffnx {MGL command} grid3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'=''] -Draws grid for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Grid is plotted at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. See also @code{cont3, contf3, dens, grid3}. @sref{Dens3 sample} -@end deffn - -@deffn {MGL command} grida adat ['sch'=''] -@deffnx {MGL command} grida xdat ydat zdat adat ['sch'=''] -Draws grids at all central slices of the 3d data specified parametrically. -@end deffn - -@deffn {MGL command} cloud adat ['sch'=''] -@deffnx {MGL command} cloud xdat ydat zdat adat ['sch'=''] -Draws cloud for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). This plot is a set of cubes with color and transparency proportional to value of @var{adat}. The resulting plot is like cloud -- low value is transparent but higher ones are not. The number of plotting cells depend on @code{meshnum}. Command @var{alpha} changes the overall transparency of plot. See also @code{surf3}. @sref{Cloud sample} -@end deffn - -@deffn {MGL command} beam tr g1 g2 adat @code{rval} ['sch'='' @code{flag=0 num=3}] -Draws @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d array @var{adat}. This is special kind of plot for @var{adat} specified in accompanied coordinates along curve @var{tr} with orts @var{g1}, @var{g2} and with transverse scale @var{rval}. Variable @var{flag} is bitwise: @samp{0x1} - draw in accompanied (not laboratory) coordinates; @samp{0x2} - draw projection to @math{\rho-z} plane; @samp{0x4} - draw normalized in each slice field. The x-size of data arrays @var{tr}, @var{g1}, @var{g2} must be nx>2. The y-size of data arrays @var{tr}, @var{g1}, @var{g2} and z-size of the data array @var{a} must be equal. @xref{Surf3}. -@end deffn - - -@c ################################################################## -@node Dual plotting (MGL), Vector fields (MGL), 3D plotting (MGL), MGL interface -@section Dual plotting (MGL) -@cindex surfc -@cindex surf3c -@cindex surfa -@cindex surf3a -@cindex map -@cindex tile -@cindex stfa - -These plotting commands draw @emph{two matrix} simultaneously. There are 5 generally different types of data representations: surface or isosurface colored by other data (SurfC, Surf3C), surface or isosurface transpared by other data (SurfA, Surf3A), tiles with variable size (TileS), mapping diagram (Map), STFA diagram (STFA). Surf3A and Surf3C have variants for automatic and manual selection of level values for isosurfaces. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. - -String paramter @var{sch} sets the color scheme (@pxref{Color scheme}). Previous color scheme is used by default. Arrays @var{x}, @var{y}, @var{z} can be vectors (not 3d arrays as @var{a}). If array @var{xdat}, @var{ydat}, @var{zdat} is not specified then its an automatic arrays are used with values equidistantly distributed along x, y, z. - -@deffn {MGL command} surfc zdat cdat ['sch'=''] -@deffnx {MGL command} surfc xdat ydat zdat cdat ['sch'=''] -Draws surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} and color it by matrix @var{cdat}[i,j]. See also @code{surf, surfa, surf3c}. @sref{SurfC sample} -@end deffn - -@deffn {MGL command} surf3c adat cdat @code{val} ['sch'=''] -@deffnx {MGL command} surf3c xdat ydat zdat adat cdat @code{val} ['sch'=''] -Draws isosurface plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) at @var{a}(x,y,z)=@var{val}. It is mostly the same as @code{surf3} command but the color of isosurface depends on values of array @var{cdat}. If string contain @samp{#} then wire plot is produced. See also @code{surf3, sur3a, surfc}. @sref{Surf3C sample} -@end deffn - -@deffn {MGL command} surf3c adat cdat ['sch'='' @code{num=5}] -@deffnx {MGL command} surf3c xdat ydat zdat adat cdat ['sch'='' @code{num=5}] -Draws @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d data specified parametrically. -@end deffn - -@deffn {MGL command} surfa zdat cdat ['sch'=''] -@deffnx {MGL command} surfa xdat ydat zdat cdat ['sch'=''] -Draws surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} and transparent it by matrix @var{cdat}[i,j]. See also @code{surf, surfc, surf3a, tile}. @sref{SurfA sample} -@end deffn - -@deffn {MGL command} surf3a adat cdat @code{val} ['sch'=''] -@deffnx {MGL command} surf3a xdat ydat zdat adat cdat @code{val} ['sch'=''] -Draws isosurface plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) at @var{a}(x,y,z)=@var{val}. It is mostly the same as @code{surf3} command but the transparency of isosurface depends on values of array @var{cdat}. If string contain @samp{#} then wire plot is produced. See also @code{surf3, sur3c, surfa}. @sref{Surf3A sample} -@end deffn - -@deffn {MGL command} surf3a adat cdat ['sch'='' @code{num=5}] -@deffnx {MGL command} surf3a xdat ydat zdat adat cdat ['sch'='' @code{num=5}] -Draws @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d data specified parametrically. -@end deffn - -@deffn {MGL command} tile zdat rdat ['sch'=''] -@deffnx {MGL command} tile xdat ydat zdat rdat ['sch'=''] -Draws horizontal tiles for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. It is mostly the same as @code{tile} but the size of tiles is determined by @var{rdat} array. See also @code{surfa, tile}. @sref{TileS sample} -@end deffn - -@deffn {MGL command} map udat vdat ['sch'='' @code{pnts=on}] -@deffnx {MGL command} map xdat ydat udat vdat ['sch'='' @code{pnts=on}] -Draws mapping plot for matrixes @{@var{udat}, @var{vdat} @} which parametrically depend on coordinates @var{xdat}, @var{ydat}. The previous position of the cell (point) is marked by color. Height is proportional to Jacobian(udat,vdat). This plot is like Arnold diagram ???. If @code{pnts=off} then face is drawn otherwise the color ball at matrix knots are drawn. The size of @var{udat} and @var{vdat} must be the same. @sref{Map sample} -@end deffn - -@deffn {MGL command} stfa re im @code{dn} ['sch'='' @code{pnts=on}] -@deffnx {MGL command} stfa xdat ydat re im @code{dn} ['sch'='' @code{pnts=on}] -Draws spectrogram of complex array @var{re}+i*@code{im} for Fourier size of @var{dn} points at plane @var{z=zVal}. Parameter @var{dn} is arbitrary even integer. For example in 1D case, result is density plot of data @math{res[i,j]=|\sum_d^dn exp(I*j*d)*(re[i*dn+d]+I*im[i*dn+d])|/dn} with size @{int(nx/dn), dn, ny@}. -@end deffn - - - - -@c ################################################################## -@node Vector fields (MGL), Other plotting (MGL), Dual plotting (MGL), MGL interface -@section Vector fields (MGL) -@cindex vectc -@cindex vect -@cindex flow -@cindex pipe -@cindex traj -@cindex dew - -These commands perform plotting of 2D and 3D vector fields. There are 6 generally different types of vector fields representations: simple vector field (Vect), vector field with coloring (VectC), vector field by dew-drops (Dew), flow threads (Flow), flow pipes (Pipe), vectors along a curve (Traj). Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. @xref{Color scheme}. - -The color is specified by the string argument @var{sch}. Previous color scheme is used by default. Parameter @var{flag} setup the hachures (arrows). It is compination of vlaues: @code{MGL_VEC_COL=1} for drawing bi-color arrow, @code{MGL_VEC_LEN=2} for drawing fixed length arrows, @code{MGL_VEC_DOT=16} for drawing hachures with dots instead of arrows, @code{MGL_VEC_END=4} for drawing arrows to the cell point, @code{MGL_VEC_MID=8} for drawing arrows with center at cell point. - -The size of @var{udat}, @var{vdat} and @var{wdat} must be equal. The minor dimensions of arrays @var{xdat}, @var{ydat}, @var{zdat} and @var{udat} must be equal too. Arrays @var{xdat}, @var{ydat} and @var{zdat} can be vectors (not matrices as @var{udat}). The graphics is plotted for each z slice of @var{udat}, @var{vdat} for 2D case. - -@deffn {MGL command} traj xdat ydat udat vdat ['sch'='' @code{zval=nan len=0}] -@deffnx {MGL command} traj xdat ydat zdat udat vdat wdat ['sch'='' @code{len=0}] -Draws vectors @{@var{udat}, @var{vdat}, @var{wdat}@} along a curve @var{xdat}, @var{ydat}, @var{zdat}. The length and color of arrows are proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. See also @code{vect}. @sref{Traj sample} -@end deffn - -@deffn {MGL command} vect udat vdat ['sch'='' @code{zval=nan flag=0}] -@deffnx {MGL command} vect xdat ydat udat vdat ['sch'='' @code{zval=nan flag=0}] -Draws plane vector field plot for the field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. The length and color of arrows are proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of hachures depend on @var{meshnum}. See also @code{vectc, flow, pipe, dew}. @sref{Vect sample} -@end deffn - -@deffn {MGL command} vect udat vdat wdat ['sch'='' @code{flag=0}] -@deffnx {MGL command} vect xdat ydat zdat udat vdat wdat ['sch'='' @code{flag=0}] -This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the length and color of arrows are proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Vect 3D sample} -@end deffn - -@deffn {MGL command} vectc udat vdat ['sch'='' @code{zval=nan}] -@deffnx {MGL command} vectc xdat ydat udat vdat ['sch'='' @code{zval=nan}] -Draws plane vector field plot for the field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. The color of hachures is proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of hachures depend on @var{meshnum}. See also @code{vect, flow, pipe, dew}. @sref{VectC sample} -@end deffn - -@deffn {MGL command} vectc udat vdat wdat ['sch'=''] -@deffnx {MGL command} vectc xdat ydat zdat udat vdat wdat ['sch'=''] -This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the color of hachures is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{VectC 3D sample} -@end deffn - -@deffn {MGL command} vectl udat vdat ['sch'='' @code{zval=nan}] -@deffnx {MGL command} vectl xdat ydat udat vdat ['sch'='' @code{zval=nan}] -Draws plane vector field plot for the field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. The length of hachures is proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of hachures depend on @var{meshnum}. See also @code{vectc, flow, pipe, dew}. @sref{Vect sample} -@end deffn - -@deffn {MGL command} vectl udat vdat wdat ['sch'=''] -@deffnx {MGL command} vectl xdat ydat zdat udat vdat wdat ['sch'=''] -This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the length of hachures is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Vect 3D sample} -@end deffn - -@deffn {MGL command} dew udat vdat ['sch'='' @code{zval=nan}] -@deffnx {MGL command} dew xdat ydat udat vdat ['sch'='' @code{zval=nan}] -Draws dew-drops for plane vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. The color of drops is proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of drops depend on @var{meshnum}. Note that this is very expensive plot in memory usage and creation time! See also @code{vectc}. @sref{Dew sample} -@end deffn - -@deffn {MGL command} flow udat vdat ['sch'='' @code{num=5 zval=nan}] -@deffnx {MGL command} flow xdat ydat udat vdat ['sch'='' @code{num=5 zval=nan}] -Draws plane flow threads for the vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. Number of threads is proportional to @var{num}. The color of lines is proportional to @math{\sqrt@{udat^2+vdat^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). See also @code{vect, vectc, pipe}. @sref{Flow sample} -@end deffn - -@deffn {MGL command} flow udat vdat wdat ['sch'='' @code{num=3}] -@deffnx {MGL command} flow xdat ydat zdat udat vdat wdat ['sch'='' @code{num=3}] -This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the color is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Flow 3D sample} -@end deffn - -@deffn {MGL command} flow @code{x0 y0} udat vdat ['sch'='' @code{zval=nan}] -@deffnx {MGL command} flow @code{x0 y0} xdat ydat udat vdat ['sch'='' @code{zval=nan}] -Draws plane flow threads for the vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} from point @{@var{x0}, @var{y0}@} at level @var{z=zVal}. The color of lines is proportional to @math{\sqrt@{udat^2+vdat^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). See also @code{vect, vectc, pipe}. @sref{Flow sample} -@end deffn - -@deffn {MGL command} flow @code{x0 y0 z0} udat vdat wdat ['sch'=''] -@deffnx {MGL command} flow @code{x0 y0 z0} xdat ydat zdat udat vdat wdat ['sch'=''] -Draws flow thread from point @{@var{x0}, @var{y0}, @var{z0}@}. Arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the color is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Flow 3D sample} -@end deffn - - -@deffn {MGL command} pipe udat vdat ['sch'='' @code{r0=0.05 num=5 zval=nan}] -@deffnx {MGL command} pipe xdat ydat udat vdat ['sch'='' @code{r0=0.05 num=5 zval=nan}] -Draws plane flow pipes for the vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. Number of pipes is proportional to @var{num}. The color of pipes is proportional to @math{\sqrt@{udat^2+vdat^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). Parameter @var{r0} set the base pipe radius. If @var{r0}<0 then pipe radius is inverse proportional to amplitude. The size of @var{ax} and @var{ay} must be equal. See also @code{vect, vectc, pipe}. @sref{Flow sample} -@end deffn - -@deffn {MGL command} pipe udat vdat wdat ['sch'='' @code{r0=0.05 num=3}] -@deffnx {MGL command} pipe xdat ydat zdat udat vdat wdat ['sch'='' @code{r0=0.05 num=3}] -This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the color is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Flow 3D sample} -@end deffn - - -@c ################################################################## -@node Other plotting (MGL), Nonlinear fitting (MGL), Vector fields (MGL), MGL interface -@section Other plotting (MGL) -@cindex cont[xyz] -@cindex dens[xyz] -@cindex contf[xyz] -@cindex dots -@cindex crust -@cindex triplot -@cindex fplot -@cindex fsurf - - -These commands perform miscelaneous plotting. There is unstructured data points plots (Dots), surface reconstruction (Crust), surfaces on the triangular mesh (TriPlot), textual formula plotting (Plots by formula), data plots at edges (Dens[XYZ], Cont[XYZ], ContF[XYZ]), simple plot (SimplePlot). Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. @xref{Color scheme}. - -@deffn {MGL command} densx dat ['sch'='' @code{val=nan}] -@deffnx {MGL command} densy dat ['sch'='' @code{val=nan}] -@deffnx {MGL command} densz dat ['sch'='' @code{val=nan}] -These plotting commands draw density plot in x, y or z plain. If @var{dat} is a tensor (3-dimensional data) then interpolation to a given @var{val} is performed. These commands are useful for creating projections of the 3D data array to the bounding box. See also @code{cont[xyz], contf[xyz], dens}. @sref{Dens projection sample} -@end deffn - -@deffn {MGL command} contx dat ['sch'='' @code{val=nan num=7}] -@deffnx {MGL command} conty dat ['sch'='' @code{val=nan num=7}] -@deffnx {MGL command} contz dat ['sch'='' @code{val=nan num=7}] -These plotting commands draw contour lines in x, y or z plain. If @var{dat} is a tensor (3-dimensional data) then interpolation to a given @var{val} is performed. These commands are useful for creating projections of the 3D data array to the bounding box. See also @code{dens[xyz], contf[xyz], cont}. @sref{Cont projection sample} -@end deffn - -@deffn {MGL command} contfx dat ['sch'='' @code{val=nan num=7}] -@deffnx {MGL command} contfy dat ['sch'='' @code{val=nan num=7}] -@deffnx {MGL command} contfz dat ['sch'='' @code{val=nan num=7}] -These plotting commands draw solid contours in x, y or z plain. If @var{dat} is a tensor (3-dimensional data) then interpolation to a given @var{val} is performed. These commands are useful for creating projections of the 3D data array to the bounding box. See also @code{dens[xyz], cont[xyz], contf}. -@end deffn - -@deffn {MGL command} dots xdat ydat zdat ['sch'=''] -@deffnx {MGL command} dots xdat ydat zdat adat ['sch'=''] -Draws the arbitrary placed points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. Variable @var{adat}[i] set transparency for dots. See also @code{crust, mark, plot}. @sref{Dots sample} -@end deffn - -@deffn {MGL command} crust xdat ydat zdat ['sch'=''] -Reconstructs and draws the surface for arbitrary placed points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If string contain @samp{#} then wire plot is produced. See also @code{dots, triplot}. @sref{Crust sample} -@end deffn - -@deffn {MGL command} triplot idat xdat ydat ['sch'='' @code{zval=nan}] -@deffnx {MGL command} triplot idat xdat ydat zdat ['sch'=''] -@deffnx {MGL command} triplot idat xdat ydat zdat cdat ['sch'=''] -Draws the surface of triangles. Triangle vertexes are set by indexes @var{idat} of data points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If string contain @samp{#} then wire plot is produced. First dimensions of @var{idat} must be 3 or greater. See also @code{dots, crust}. Parameter @var{cdat} set the colors of triangles (if @var{idat}.ny=@var{cdat}.nx) or colors of vertexes (if @var{xdat}.nx=@var{cdat}.nx). -@end deffn - -@deffn {MGL command} fplot 'y(x)' ['pen'='' @code{zval=nan num=100}] -Draws command function @samp{y(x)} at plane z=@var{zval} where @samp{x} variable is changed in @code{xrange}. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @code{plot}. -@end deffn - -@deffn {MGL command} fplot 'x(t)' 'y(t)' 'z(t)' ['pen'='' @code{num=100}] -Draws command parametrical curve @{@samp{x(t)}, @samp{y(t)}, @samp{z(t)}@} where @samp{t} variable is changed in range [0, 1]. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @code{plot}. -@end deffn - -@deffn {MGL command} fsurf 'z(x,y)' ['sch'='' @code{num=100}] -Draws command surface for function @samp{z(x,y)} where @samp{x}, @samp{y} variable are changed in @code{xrange, yrange}. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @code{surf}. -@end deffn - -@deffn {MGL command} fsurf 'x(u,v)' 'y(u,v)' 'z(u,v)' ['sch'='' @code{num=100}] -Draws command parametrical surface @{@samp{x(u,v)}, @samp{y(u,v)}, @samp{z(u,v)}@} where @samp{u}, @samp{v} variable are changed in range [0, 1]. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @code{surf}. -@end deffn - - -@c ################################################################## -@node Nonlinear fitting (MGL), Data create (MGL), Other plotting (MGL), MGL interface -@section Nonlinear fitting (MGL) -@cindex fit -@cindex fits -@cindex putsfit - -These commands fit data to formula. Fitting goal is to find formula parameters for the best fit the data points, i.e. to minimize the sum @math{\sum_i (f(x_i, y_i, z_i) - a_i)^2/s_i^2}. At this, approximation command @samp{f} can depend only on one argument @samp{x} (1D case), on two arguments @samp{x,y} (2D case) and on three arguments @samp{x,y,z} (3D case). The command @samp{f} also may depend on parameters. Normally the list of fitted parameters is specified by @var{var} string (like, @samp{abcd}). Usually user should supply initial values for fitted parameters by @var{ini} variable. But if he/she don't supply it then the zeros are used. - -Commands @code{fit} and @code{fits} do not draw the obtained data themselves. They fill the data @var{out} by formula @samp{f} with found coefficients. At this, the @samp{x,y,z} coordinates are equidistantly distributed in the bounding box. Number of points in @var{out} is selected as maximal value of @var{out} size or 100. Also you may print the last formula with found coefficients by @code{putsfit} command. @sref{Fitting sample} - -The dimensions of arrays must be at least the same as the number of specified arrays @var{xdat}, @var{ydat}, @var{zdat}. Also the fitting only along specified directions will be performed (for example, along x and y if only @var{xdat} and @var{ydat} are specified). If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. - - -@deffn {MGL command} fits adat sdat 'func' 'var' [ini=0] -@deffnx {MGL command} fits xdat adat sdat 'func' 'var' [ini=0] -@deffnx {MGL command} fits xdat ydat adat sdat 'func' 'var' [ini=0] -@deffnx {MGL command} fits xdat ydat zdat adat sdat 'func' 'var' [ini=0] -Fit data along x-, y- and z-directions for 1d-,2d- or 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) with weight factor @var{sdat}[i,j,k]. -@end deffn - -@deffn {MGL command} fit adat 'func' 'var' [ini=0] -@deffnx {MGL command} fit xdat adat 'func' 'var' [ini=0] -@deffnx {MGL command} fit xdat ydat adat 'func' 'var' [ini=0] -@deffnx {MGL command} fit xdat ydat zdat adat 'func' 'var' [ini=0] -Fit data along x-, y- and z-directions for 1d-,2d- or 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) with weight factor =1. -@end deffn - -@deffn {MGL command} putsfit @code{x y} ['pre'='' 'fnt'='' @code{size=-1}] -Print last fitted formula with found coefficients (as numbers) at position @{@var{x}, @var{y}@}. The string @var{pre} will be printed before formula. All other parameters are the same as in @ref{Text printing (MGL)}. -@end deffn - - -@c ################################################################## -@node Data create (MGL), Data filling (MGL), Nonlinear fitting (MGL), MGL interface -@section Data create (MGL) -@cindex new -@cindex var -@cindex list -@cindex delete -@cindex copy -@cindex column -@cindex set_id - -@deffn {MGL command} new dat [@code{nx=1 ny=1 nz=1}] -Creates or recreates the array @var{dat} with specified size and fills it by zero. This command does nothing if one of parameters @var{nx}, @var{ny}, @var{nz} is zero or negative. -@end deffn - -@deffn {MGL command} var dat @code{num v1 [v2=nan]} -Creates new variable with name dat for one-dimensional array of size num. Array elements are equidistantly distributed in range [@var{v1}, @var{v2}]. If @var{v2}=@code{nan} then @var{v2=v1} is used. -@end deffn - -@deffn {MGL command} list dat @code{v1 ...} -Creates new variable with name @var{dat} and fills it by numeric values of command arguments @code{v1 ...}. Command can create one-dimensional and two-dimensional arrays with arbitrary values. For creating 2d array the user should use delimiter - which means that the following values lie in next row. Array sizes are [maximal of row sizes * number of rows]. For example, command @code{list 1 | 2 3} creates the array [1 0; 2 3]. Note, that the maximal number of arguments is 1000. -@end deffn - -@deffn {MGL command} list dat d1 ... -Creates new variable with name @var{dat} and fills it by data values of arrays of command arguments @var{d1 ...}. Command can create two-dimensional or three-dimensional (if arrays in arguments are 2d arrays) arrays with arbitrary values. Minor dimensions of all arrays in arguments should be equal to dimensions of first array d1. In the opposite case the argument will be ignored. Note, that the maximal number of arguments is 1000. -@end deffn - -@deffn {MGL command} copy dat1 dat2 ['eq'='' @code{on_axis=on}] -@deffnx {MGL command} copy dat1 @code{val} -Creates new variable with name @var{dat1} and fills it by data values of array @var{dat2}. At this, if parameter @var{eq} is specified then the data will be modified by corresponding formula by the same way as in @code{fill} command (for @code{on_axis=on}) or in @code{modify} command (for @code{on_axis=off}). -@end deffn - -@deffn {MGL command} delete dat -Deletes variable @var{dat} and makes its memory free. Can be useful for huge data arrays. -@end deffn - -@deffn {MGL command} set_id dat 'ids' -Set the symbol id for data columns. The string must contain one symbol 'a'...'z' per column (without spaces). -@end deffn - -@deffn {MGL command} info dat [@code{detail=off}] -Display information (sizes, maximum/minimum, momentums and so on) about the data dat. Show brief information by default (if @code{detail=off}). -@end deffn - -@deffn {MGL command} info 'text' -Display @var{text} as information (warning). -@end deffn - -@c ------------------------------------------------------------------ -@node Data filling (MGL), Rearrange data (MGL), Data create (MGL), MGL interface -@section Data filling (MGL) -@cindex fill -@cindex modify - -@deffn {MGL command} fill dat v1 v2 ['dir'='x'] -Equidistantly fills the data values to range [@var{x1}, @var{x2}] in direction @var{dir}=@{@samp{x},@samp{y},@samp{z}@}. -@end deffn - -@deffn {MGL command} fill dat 'eq' [vdat=0 wdat=0] -Command fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Coordinates @samp{x}, @samp{y}, @samp{z} are supposed to be normalized in @emph{bounding box} (in difference from @code{modify} commands). Variable @samp{u} is the original value of the array. Variables @samp{v} and @samp{w} are values of @var{vdat}, @var{wdat}. -@end deffn - -@deffn {MGL command} modify dat 'eq' [@code{dim=0}] -Command fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. Variable @samp{u} is the original value of the array. Modification will be fulfilled only for slices >=@var{dim}. -@end deffn - -@deffn {MGL command} modify dat 'eq' vdat [wdat=0] -Command fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. Variable @samp{u} is the original value of the array. Variables @samp{v} and @samp{w} are values of @var{vdat}, @var{wdat}. If optional data @var{vdat}, @var{wdat} (must be the same size as @var{dat}) are specified then variables @samp{v} and @samp{w} denote its values else they are zero. -@end deffn - - -@deffn {MGL command} put a @code{val [i=: j=: k=:]} -Function sets value(s) of array a[@var{i}, @var{j}, @var{k}] = @var{val}. Negative indexes @var{i}, @var{j}, @var{k}=@samp{:} set the value @var{val} to whole range in corresponding direction(s). For example, @code{put a val : 0 :} sets a[i,0,j]=@var{val} for i=0...(a.nx-1), j=0...(a.nz-1). -@end deffn - -@deffn {MGL command} put a v [@code{i=: j=: k=:}] -Function copies value(s) from array @var{v} to the range of array @var{a}. Negative indexes @var{i}, @var{j}, @var{k}=@samp{:} set the range in corresponding direction(s). At this minor dimensions of array @var{v} should be large than corresponding dimensions of array @var{a}. For example, @code{put a v : 0 :} sets a[i,0,j]=v.ny>nz ? v[i,j] : v[i], where i=0...(a.nx-1), j=0...(a.nz-1) and condition v.nx>=a.nx is true. -@end deffn - - - -@c ------------------------------------------------------------------ -@node Rearrange data (MGL), File I/O (MGL), Data filling (MGL), MGL interface -@section Rearrange data (MGL) -@cindex rearrange -@cindex extend -@cindex transpose -@cindex squeeze -@cindex crop - -@deffn {MGL command} rearrange dat @code{mx [my=0 mz=0]} -Rearrange dimensions without changing data array so that resulting sizes should be @var{mx}*@var{my}*@var{mz} < nx*ny*nz. If some of parameter @var{my} or @var{mz} are zero then it will be selected to optimal fill of data array. For example, if @var{my}=0 then it will be change to @var{my}=nx*ny*nz/@var{mx} and @var{mz} will be 1. -@end deffn - -@deffn {MGL command} extend dat @code{n1 [n2=0]} -Increase the dimensions of the data by inserting new (|@var{n1}|+1)-th slices after (for @var{n1}>0) or before (for @var{n1}<0) of existed one. It is possible to insert 2 dimensions simultaneously for 1d data by using parameter @var{n2}. Data to new slices is copy from existed one. For example, for @var{n1}>0 new array will be -@iftex -@math{a_{ij}^{new} = a_i^{old}} where j=0...@var{n1}. Correspondingly, for @var{n1}<0 new array will be @math{a_{ij}^{new} = a_j^{old}} where i=0...|@var{n1}|. -@end iftex -@ifnottex -a_ij^new = a_i^old where j=0...@var{n1}. Correspondingly, for @var{n1}<0 new array will be a_ij^new = a_j^old where i=0...|@var{n1}|. -@end ifnottex -@end deffn - -@deffn {MGL command} transpose dat ['dim'='yxz'] -Transposes (shift order of) dimensions of the data. New order of dimensions is specified int string @var{dim}. This command may be useful also for the reading of one-dimensional data. -@end deffn - -@deffn {MGL command} squeeze dat @code{rx [ry=1 rz=1 sm=off]} -Reduces the data size by excluding data elements which indexes are not divisible by @var{rx}, @var{ry}, @var{rz} correspondingly. Parameter @var{sm} set to use smoothing -@iftex -(i.e. @math{a_{out}[i]=\sum_{j=i}^{i+r}a[j]/r}) or not (i.e. @math{a_{out}[i]=a[j*r]}). -@end iftex @ifnottex -(i.e. out[i]=\sum_@{j=i@}^@{i+r@} a[j]/r) or not (i.e. out[i]=a[j*r]). -@end ifnottex -@end deffn - -@deffn {MGL command} crop dat @code{n1 n2} 'dir' -Cuts off edges of the data @var{i}<@var{n1} and @var{i}>@var{n2} if @var{n2}>0 or @var{i}>@code{n[xyz]}-@var{n2} if @var{n2}<=0 along direction @var{dir}. -@end deffn - -@c ------------------------------------------------------------------ -@node File I/O (MGL), Make another data (MGL), Rearrange data (MGL), MGL interface -@section File I/O (MGL) -@cindex read -@cindex readhdf -@cindex readmat -@cindex readall -@cindex save -@cindex savehdf -@cindex export -@cindex import - -@deffn {MGL command} read dat 'fname' -Reads data from tab-separated text file with auto determining sizes of the data. -@end deffn - -@deffn {MGL command} read dat 'fname' @code{mx [my=1 mz=1]} -Reads data from text file with specified data sizes. This command does nothing if one of parameters @var{mx}, @var{my} or @var{mz} is zero or negative. -@end deffn - -@deffn {MGL command} readmat dat 'fname' [@code{dim=2}] -Read data from text file with size specified at beginning of the file by first @var{dim} numbers. At this, variable @var{dim} set data dimensions. -@end deffn - -@deffn {MGL command} readall dat 'templ' @code{v1 v2 [dv=1 slice=off]} -Join data arrays from several text files. The file names are determined by function call @code{sprintf(fname,templ,val);}, where @var{val} changes from @var{v1} to @var{v2} with step @var{dv}. The data load one-by-one in the same slice if @var{slice}=@code{off} or as slice-by-slice if @var{slice}=@code{on}. -@end deffn - -@deffn {MGL command} readall dat 'templ' @code{[slice=off]} -Join data arrays from several text files which filenames satisfied the template @var{templ} (for example, @var{templ}=@code{"t_*.dat"}). The data load one-by-one in the same slice if @var{slice}=@code{off} or as slice-by-slice if @var{slice}=@code{on}. -@end deffn - -@deffn {MGL command} save dat 'fname' -Saves the whole data array to tab-separated text file. -@end deffn - -@deffn {MGL command} readhdf dat 'fname' 'dname' -Reads data array named @var{dname} from HDF file @var{fname}. -@end deffn -@deffn {MGL command} savehdf dat 'fname' 'dname' -Saves data array named @var{dname} from HDF file @var{fname}. -@end deffn - -@deffn {MGL command} import dat 'fname' 'sch' [@code{v1=0 v2=1}] -Reads data from bitmap file. The RGB values of bitmap pixels are transformed to float values in range [@var{v1}, @var{v2}] using color scheme @var{sch} (@pxref{Color scheme}). -@end deffn - -@deffn {MGL command} export dat 'fname' 'sch' [@code{v1=0 v2=0}] -Saves data matrix to bitmap file. The data values are transformed from range [@var{v1}, @var{v2}] to RGB pixels of bitmap using color scheme @var{sch} (@pxref{Color scheme}). If @var{v1}>=@var{v2} then the values of @var{v1}, @var{v2} are automatically determined as minimal and maximal value of the data array. -@end deffn +@node Top +@top MGL script language -@c ------------------------------------------------------------------ -@node Make another data (MGL), Commands on direction (MGL), File I/O (MGL), MGL interface -@section Make another data (MGL) -@cindex subdata -@cindex hist -@cindex momentum -@cindex sum -@cindex max -@cindex min -@cindex combine -@cindex evaluate -@cindex resize +This file documents the MGL script language. It corresponds to release @value{VERSION} of the MathGL library. Please report any errors in this manual to @email{mathgl.abalakin@@gmail.org}. More information about MGL and MathGL can be found at the project homepage, @uref{http://mathgl.sourceforge.net/}. -@deffn {MGL command} combine res adat bdat -Returns direct multiplication of arrays (like, res[i,j] = adat[i]*bdat[j] and so on). -@end deffn +Copyright @copyright{} 2008 Alexey A. Balakin. -@deffn {MGL command} evaluate res dat idat [@code{norm=on}] -@deffnx {MGL command} evaluate res dat idat jdat [@code{norm=on}] -@deffnx {MGL command} evaluate res dat idat jdat kdat [@code{norm=on}] -Get array which values is result of interpolation of original array for coordinates from other arrays. All dimensions must be the same for data @var{idat}, @var{jdat}, @var{kdat}. Coordinates from @var{idat}, @var{jdat}, @var{kdat} are supposed to be normalized in range [0,1] (if @var{norm}=@code{true}) or in range [0,nx], [0,ny], [0,nz] correspondingly. -@end deffn +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with the Front-Cover Texts being ``A GNU Manual,'' +and with the Back-Cover Texts as in (a) below. A copy of the +license is included in the section entitled ``GNU Free Documentation +License.'' -@deffn {MGL command} hist res dat @code{num v1 v2 [nsub=0]} -@deffnx {MGL command} hist res dat wdat @code{num v1 v2 [nsub=0]} -Creates @var{num}-th points distribution @var{res} of the data values of @var{dat} in range [@var{v1}, @var{v2}]. Array @var{wdat} specifies weights of the data elements (all weight is 1 if @var{wdat} is not specified). Parameter @var{nsub} define the number of additional interpolated points (for smoothness of histogram). -@end deffn +(a) The FSF's Back-Cover Text is: ``You have the freedom to +copy and modify this GNU manual. Buying copies from the FSF +supports it in developing GNU and promoting software freedom.'' +@end quotation -@deffn {MGL command} hist res xdat adat -@deffnx {MGL command} hist res xdat ydat adat -@deffnx {MGL command} hist res xdat ydat zdat adat -Creates distribution @var{res} of the data values of @var{adat} in axis range [Min, Max]. Array @var{adat} look like weights of the data points. -@end deffn - - - - -@deffn {MGL command} momentum res dat 'how' ['dir'='z'] -Get momentum (1D-array) of the data along direction @var{dir}. String @var{how} contain kind of momentum. The momentum is defined like as -@iftex -@math{res_k = \sum_{ij} how(x_i,y_j,z_k) a_{ij}/\sum_{ij} a_{ij}} -@end iftex -@ifnottex -res_k = \sum_ij how(x_i,y_j,z_k) a_ij/ \sum_ij a_ij -@end ifnottex -if @var{var}=@samp{z} and so on. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. -@end deffn - -@deffn {MGL command} sum res dat 'dir' -Gets array which is the result of summation in given direction or direction(s). -@end deffn -@deffn {MGL command} max res dat 'dir' -Gets array which is the maximal data values in given direction or direction(s). -@end deffn -@deffn {MGL command} min res dat 'dir' -Gets array which is the minimal data values in given direction or direction(s). -@end deffn - -@deffn {MGL command} resize res dat @code{mx [my=1 mz=1]} -Makes array @var{res} of sizes @var{mx}, @var{my}, @var{mz} with interpolated data of array @var{dat}. -@end deffn - -@deffn {MGL command} subdata res dat @code{xx [yy=: zz=:]} -Extracts sub-array data @var{res} from the original data @var{dat} array keeping fixed positive index. For example @code{subdata a b : 2} extracts 3d row (indexes are zero based), @code{subdata a b 4 :} extracts 5th column, @code{subdata a b : : 3} extracts 4th slice and so on. Note that symbol @samp{:} is defined @samp{:}=@code{-1} in MGL. -@end deffn - -@deffn {MGL command} trace res dat -Gets array of diagonal elements dat[i,i] (for 2D case) or dat[i,i,i] (for 3D case) where i=0...nx-1. Function return copy of itself for 1D case. Data array must have dimensions ny,nz >= nx or ny,nz = 1. -@end deffn - -@deffn {MGL command} transform dat 'type' real imag -Do integral transformation of complex data @var{real}, @var{imag} on specified direction. Now only Fourier transformation is supported. The order of transformations is specified in string @var{type}: first character for x-dimension, second one for y-dimension, third one for z-dimension. The possible character are: @samp{f} is forward Fourier transformation, @samp{i} is inverse Fourier transformation, @samp{n} or @samp{ } is no transformation. -@end deffn - -@deffn {MGL command} transforma dat 'type' ampl phase -Do integral transformation of complex data @var{ampl}, @var{phase} on specified direction. Now only Fourier transformation is supported. The order of transformations is specified in string @var{type}: first character for x-dimension, second one for y-dimension, third one for z-dimension. The possible character are: @samp{f} is forward Fourier transformation, @samp{i} is inverse Fourier transformation, @samp{n} or @samp{ } is no transformation. -@end deffn - -@deffn {MGL command} stfad res real imag @code{dn} ['dir'='x'] -Short time Fourier analysis for real and imaginary parts. Output is amplitude of partial Fourier of length @var{dn}. For example if @var{dir}=@samp{x}, result will have size @{int(nx/dn), dn, ny@} and it will contain @math{res[i,j,k]=|\sum_d^dn exp(I*j*d)*(real[i*dn+d,k]+I*imag[i*dn+d,k])|/dn}. -@end deffn - -@deffn {MGL command} pde res 'ham' ini_re ini_im [@code{dz=0.1 k0=100}] -Solves equation du/dz = i*k0*@var{ham}(p,q,x,y,z,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators. Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Coordinates of the equation (and the solution) are supposed to be in the bounding box. Note, that really this ranges are increased by factor 3/2 for purpose of reducing reflection from boundaries. Parameter @var{dz} set the step along evolutionary coordinate z. At this moment, simplified form of function @var{ham} is supported -- all ``mixed'' terms (like @samp{x*p}->x*d/dx) are excluded. For example, in 2D case this function is effectively @math{ham = f(p,z) + g(x,z,u)}. However commutable combinations (like @samp{x*q}->x*d/dy) are allowed. Here variable @samp{u} is used for field amplitude |u|. This allow one solve nonlinear problems -- for example, for nonlinear Shrodinger equation you may set @code{ham='p^2+q^2-u^2'}. You may specify imaginary part for wave absorption, like @code{ham = 'p^2+i*x*(x>0)'}, but only if dependence on variable @samp{i} is linear (i.e. @math{ham = hre+i*him}). -@end deffn - -@deffn {MGL command} ray res 'ham' @code{x0 y0 z0 p0 q0 v0 [dt=0.1 tmax=10]} -Solves GO ray equation like d@emph{r}/dt = d @var{ham}/d@emph{p}, d@emph{p}/dt = -d @var{ham}/d@emph{r}. This is Hamiltonian equations for particle trajectory in 3D case. Here @var{ham} is Hamiltonian which may depend on coordiantes @samp{x}, @samp{y}, @samp{z}, momentums @samp{p}=px, @samp{q}=py, @samp{v}=pz and time @samp{t}: @math{ham = H(x,y,z,p,q,v,t)}. The starting point (at @code{t=0}) is defined by variables @{@var{x0}, @var{y0}, @var{z0}, @var{p0}, @var{q0}, @var{v0}@}. Parameters @var{dt} and @var{tmax} specify the integration step and maximal time for ray tracing. Result is array of @{x,y,z,p,q,v,t@} with dimensions @{7 * int(@var{tmax}/@var{dt}+1) @}. -@end deffn - -@deffn {MGL command} qo2d res 'ham' ini_re ini_im ray [@code{r=1 k0=100} xx=0 yy=0] -Solves equation du/dt = i*k0*@var{ham}(p,q,x,y,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators (see @code{mglPDE()} for details). Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Parameters @var{ray} set the reference ray, i.e. the ray around which the accompanied coordinate system will be maked. You may use, for example, the array created by @code{mglRay()} function. Note, that the reference ray @strong{must be} smooth enough to make accompanied coodrinates unambiguity. Otherwise errors in the solution may appear. If @var{xx} and @var{yy} are non-zero then Cartesian coordinates for each point will be written into them. @sref{Beam tracing sample} -@end deffn - -@deffn {MGL command} jacobian res xdat ydat [zdat=0] -Computates the Jacobian for transformation @{i,j,k@} to @{@var{xdat},@var{ydat},@var{zdat}@} where initial coordinates @{i,j,k@} are data indexes normalized in range [0,1]. The Jacobian is determined by formula det||@math{dr_\alpha/d\xi_\beta}|| where @math{r}=@{@var{xdat},@var{ydat},@var{zdat}@} and @math{\xi}=@{i,j,k@}. All dimensions must be the same for all data arrays. Data must be 3D if all 3 arrays @{@var{xdat},@var{ydat},@var{zdat}@} are specified or 2D if only 2 arrays @{@var{xdat},@var{ydat}@} are specified. -@end deffn - - - -@c ------------------------------------------------------------------ -@node Commands on direction (MGL), Operators (MGL), Make another data (MGL), MGL interface -@section Commands on direction (MGL) -@cindex cumsum -@cindex integral -@cindex diff -@cindex diff2 -@cindex swap -@cindex mirror -@cindex sew -@cindex smooth -@cindex envelop -@cindex norm -@cindex normsl - -These commands change the data in some direction like differentiations, integrations and so on. The direction in which the change will applied is specified by the string parameter, which may contain @samp{x}, @samp{y} or @samp{z} characters for 1-st, 2-nd and 3-d dimension correspondingly. - -@deffn {MGL command} cumsum dat 'dir' -Cumulative summation of the data in given direction or directions. -@end deffn -@deffn {MGL command} integrate dat 'dir' -Integrates (like cumulative summation) the data in given direction or directions. -@end deffn -@deffn {MGL command} diff dat 'dir' -Differentiates the data in given direction or directions. -@end deffn -@deffn {MGL command} diff dat xdat ydat [zdat=0] -Differentiates the data @var{dat} specified parametrically in direction @var{xdat} with @var{ydat}, @var{zdat}=constant. Parameter @var{zdat} can be omitted that correspond to 2D case. Parametrical differentiation uses the formula (for 2D case): @math{da/dx = (a_j*y_i-a_i*y_j)/(x_j*y_i-x_i*y_j)} where @math{a_i=da/di, a_j=da/dj} denotes usual differentiation along 1st and 2nd dimensions. The similar formula is used for 3D case. Note, that you may change the order of arguments -- for example, if you have 2D data a(i,j) which depend on coordinates @{x(i,j), y(i,j)@} then usual derivative along @samp{x} will be @code{diff a x y} and usual derivative along @samp{y} will be @code{diff a y x}. -@end deffn - -@deffn {MGL command} diff2 dat 'dir' -Double-differentiates (like Laplace operator) the data in given direction. -@end deffn -@deffn {MGL command} swap dat 'dir' -Swaps the left and right part of the data in given direction (useful for Fourier spectrum). -@end deffn -@deffn {MGL command} mirror dat 'dir' -Mirror the left-to-right part of the data in given direction. Looks like change the value index @var{i}->@var{n-i}. -@end deffn - -@deffn {MGL command} sew dat ['dir'='xyz' @code{da=2*pi}] -Remove value steps (like phase jumps after inverse trigonometric commands) with period @var{da} in given direction. -@end deffn -@deffn {MGL command} smooth data @code{type} ['dir'='xyz'] -Smooths the data on specified direction or directions by method @var{Type}. Now 4 methods are supported: @samp{0} does nothing, @samp{1} linear averaging by 3 points, @samp{2} linear averaging by 5 points, @samp{3} quadratic averaging by 5 points. -@end deffn - -@deffn {MGL command} envelop dat ['dir'='x'] -Find envelop for data values along direction @var{dir}. Only one direction can be specified at once. -@end deffn - -@deffn {MGL command} normsl dat @code{v1 v2} ['dir'='z' @code{keep=on sym=off}] -Normalizes data slice-by-slice along direction @var{dir} the data in slices to range [@var{v1},@var{v2}]. If flag @var{sym}=@code{on} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. If @var{keep} is set then maximal value of k-th slice will be limited by -@iftex -@math{\sqrt{\sum a_{ij}(k)/\sum a_{ij}(0)}}. -@end iftex -@ifnottex -@math{\sqrt@{\sum a_ij(k)/\sum a_ij(0)@}}. @end ifnottex -@end deffn - -@deffn {MGL command} norm dat @code{v1 v2 [sym=off dim=0]} -Normalizes the data to range [@var{v1},@var{v2}]. If flag @var{sym}=@code{on} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. Modification will be applied only for slices >=@var{dim}. -@end deffn - -@c ------------------------------------------------------------------ -@node Operators (MGL), Program flow (MGL), Commands on direction (MGL), MGL interface -@section Operators (MGL) -@cindex multo -@cindex addto -@cindex divto -@cindex subto - -@deffn {MGL command} multo dat dat2 -Multiplies the data by the other one for each element. -@end deffn -@deffn {MGL command} divto dat dat2 -Divides the data by the other one for each element. -@end deffn -@deffn {MGL command} addto dat dat2 -Adds the other data. -@end deffn -@deffn {MGL command} subto dat dat2 -Subtracts the other data. -@end deffn -@deffn {MGL command} multo dat @code{val} -Multiplies each element by the number. -@end deffn -@deffn {MGL command} divto dat @code{val} -Divides each element by the number. -@end deffn -@deffn {MGL command} addto dat @code{val} -Adds the number to each element. -@end deffn -@deffn {MGL command} subto dat @code{val} -Subtracts the number to each element. -@end deffn - -@c ------------------------------------------------------------------ -@node Program flow (MGL), Command options (MGL), Operators (MGL), MGL interface -@section Program flow (MGL) -@cindex call -@cindex chdir -@cindex define -@cindex if -@cindex elseif -@cindex else -@cindex endif -@cindex for -@cindex next -@cindex once -@cindex stop - -These commands control program flow, like, conditions, cycles, define script arguments and so on. - -@deffn {MGL command} call 'fname' -Executes script @var{fname}. -@end deffn -@deffn {MGL command} chdir 'path' -Changes the current directory to @var{path}. -@end deffn -@deffn {MGL command} define $N smth -Sets @var{N}-th script argument to @var{smth}. Note, that @var{smth} is used as is (with @samp{'} symbols if present). -@end deffn -@deffn {MGL command} define name smth -Create scalar variable @code{name} which have the numeric value of @code{smth}. Later you can use this variable as usual number. -@end deffn -@deffn {MGL command} if dat 'cond' -Starts block which will be executed if @var{dat} satisfy to @var{cond}. -@end deffn -@deffn {MGL command} if @code{val} -Starts block which will be executed if @code{val} is nonzero. -@end deffn -@deffn {MGL command} elseif dat 'cond' -Starts block which will be executed if previous @code{if} or @code{elseif} is false and @var{dat} satisfy to @var{cond}. -@end deffn -@deffn {MGL command} elseif @code{val} -Starts block which will be executed if previous @code{if} or @code{elseif} is false and @code{val} is nonzero. -@end deffn -@deffn {MGL command} else -Starts block which will be executed if previous @code{if} or @code{elseif} is false. -@end deffn -@deffn {MGL command} endif -Finishes @code{if/elseif/else} block. -@end deffn -@deffn {MGL command} for $N @code{v1 v2 [dv=1]} -Starts cycle with @var{N}-th argument changing from @var{v1} to @var{v2} with the step @var{dv}. -@end deffn -@deffn {MGL command} for $N dat -Starts cycle with @var{N}-th argument changing for @var{dat} values. -@end deffn -@deffn {MGL command} next -Finishes @code{for} cycle. -@end deffn -@deffn {MGL command} once @code{val} -The code between once on and once off will be executed only once. Useful for large data manipulation in programs like UDAV. -@end deffn -@deffn {MGL command} stop -Terminate execution. -@end deffn - -@c ------------------------------------------------------------------ -@node Command options (MGL), Suffixes, Program flow (MGL), MGL interface -@section Command options (MGL) -@cindex alpha -@cindex alphadef -@cindex xrange -@cindex yrange -@cindex zrange -@cindex crange -@cindex cut -@cindex ambient -@cindex fontsize -@cindex marksize -@cindex meshnum -@cindex legend - -Command options allow the easy setup of the plot by changing of global settings only for this plot. Options are specified at the end of string. Each option is separated from the previous text by symbol @samp{;}. Options work so that them remember the current settings, change settings as it being set in the option, execute command and return the original settings back. So, the options usage for data handling commands or for graphics setup commands is useless. - -The most useful options are @code{xrange, yrange, zrange}. They sets the boundaries for data change. This boundaries are used for automatically filled variables. So, these options allow one to change the position of some plots. For example, in command @code{plot y; xrange 0.1 0.9} the x coordinate will be equidistantly distributed in range 0.1 ... 0.9. +@menu +* MGL interface:: +* Examples:: +* Samples:: +* Copying This Manual:: +* Index:: +@end menu -The full list of options are: -@deffn {MGL command} alpha @code{val} -Sets alpha value (transparency) of the plot. The value should be in range [0, 1]. -@end deffn -@deffn {MGL command} alphadef @code{val} -Sets alpha value (transparency) of the plot. The value should be in range [0, 1]. -@end deffn -@deffn {MGL command} ambient @code{val} -Sets brightness of ambient light for the plot. The value should be in range [0, 1]. -@end deffn -@deffn {MGL command} crange @code{val1 val2} -Sets boundaries of color change for the plot. -@end deffn -@deffn {MGL command} xrange @code{val1 val2} -Sets boundaries of x coordinate change for the plot. -@end deffn -@deffn {MGL command} yrange @code{val1 val2} -Sets boundaries of y coordinate change for the plot. -@end deffn -@deffn {MGL command} zrange @code{val1 val2} -Sets boundaries of z coordinate change for the plot. -@end deffn -@deffn {MGL command} cut @code{val} -Sets whether to cut or to project the plot points lying outside the bounding box. -@end deffn -@deffn {MGL command} fontsize @code{val} -Sets the size of text. -@end deffn -@deffn {MGL command} marksize @code{val} -Sets the size of marks. -@end deffn -@deffn {MGL command} meshnum @code{val} -Work like @code{meshnum} command. -@end deffn -@deffn {MGL command} legend 'txt' -Adds string 'txt' to internal legend accumulator. The style of described line and mark is taken from arguments of the plot command. The maximal number of entries is 100. -@end deffn +@rmacro sref {arg} +@xref{\arg\}, for sample code and picture. +@end rmacro +@macro tdref{nam} +@uref{http://mathgl.sourceforge.net/pdf_u3d/\nam\.pdf, 3D pdf} +@end macro +@macro MGL +@end macro +@set UDAV -@c ------------------------------------------------------------------ -@node Suffixes, Utilities, Command options (MGL), MGL interface -@section Suffixes for variable +@node MGL interface, Examples, , Top +@include mgl_cmd_en.texi -Suffixes can get some numerical value (like its size, maximal or minimal value, the sum of elements and so on) of the data array in variable and use it later as usual number in command arguments. The suffixes start from point @samp{.} right after (without spaces) variable name or its sub-array. For example, @code{a.nx} give the x-size of data a, @code{b(1).max} give maximal value of second row of variable b, @code{c(:,0).sum} give sum of element in first column of c and so on. +@node Examples, Samples, MGL interface, Top +@include ex_mgl_en.texi -The full list of suffixes are: -@table @strong -@item nx, ny, nz -Give the data size in x-, y-, z-direction correspondingly. -@item max -Give maximal value of the data. -@item min -Give minimal value of the data. -@item mx, my, mz -Give x-, y-, z-position of data maximum. -@item ax, ay, az, aa -Give x-, y-, z-position of data mass center or average data value. -@item wx, wy, wz, wa -Give width in x-, y-, z-direction or data dispersion value. -@item sx, sy, sz, sa -Give skewness in x-, y-, z-direction or data skewness value. -@item kx, ky, kz, ka -Give kurtosis in x-, y-, z-direction or data kurtosis value. -@item sum -Give sum of data values. -@item a -Give first value of data array. -@item fst -Give first nonzero value of data array. -@item lst -Give last nonzero value of data array. -@end table +@node Samples,Copying This Manual, Examples, Top +@include samples_en.texi -@c ------------------------------------------------------------------ -@node Utilities, , Suffixes, MGL interface -@section Utilities for parsing MGL +@node Copying This Manual, Index, Samples, Top +@appendix GNU Free Documentation License +@include fdl.texi -MathGL library provides several tools for parsing MGL scripts. There is tools saving it to bitmap (@code{mgl2png}, @code{mgl2gif}) or vectorial (@code{mgl2eps}, @code{mgl2svg}) images. Tool @code{mglview} show MGL script and allow to rotate and setup the image. Also you can translate MGL script to C++ file by help of @code{mgl2cpp} tool. +@node Index, , Copying This Manual, Top +@unnumbered Index -All of this tools have similar set of arguments. First argument is name of script file, next argument is optional output file name, last arguments are options. There are options for setting script parameters (it is @code{$0, $1, ... $9}) and locale settings. The script parameters have format @samp{-Nval}. Here N=0,1...9 is parameter ID and val is its value. For example, option @samp{-1test} set to substitute @samp{test} instead of @code{$1} in the script. Option -Lval set locale to val. For example, @samp{-Lutf8} will set UTF-8 locale for script. +@printindex cp -Additionally you can create animated GIF file or a set of JPEG files with names @samp{frameNNNN.jpg} (here @samp{NNNN} is frame index). You should use @code{mgl2gif} tool and specify the values of @code{$0} parameter for making animation. Values of the parameter @code{$0} can be specified inside the script by comment @code{##a val} for each value @code{val} (one comment for one value) or by option(s) @samp{-Aval}. Tool @code{mgl2gif} will execute script several times (once for each specified value of @code{$0}) and save result in animated GIF file. For saving each frame in JPEG just add command @code{write ''} at the end of the script. +@bye diff --git a/texinfo/mgl_ru.texi b/texinfo/mgl_ru.texi index 3afd9f2..cee1571 100644 --- a/texinfo/mgl_ru.texi +++ b/texinfo/mgl_ru.texi @@ -1,1624 +1,106 @@ -@c ------------------------------------------------------------------ -@node MGL interface, Samples, Other classes, Top -@chapter MGL interface +\input texinfo +@setfilename mgl_ru.info +@c @documentlanguage ru +@documentencoding UTF-8 +@set VERSION 1.11 +@settitle Язык MGL для версии @value{VERSION} +@syncodeindex pg cp +@comment %**end of header + +@copying +Это документация для MathGL (версии @value{VERSION}) -- библиотеки классов и функций для построения научной графики. Пожалуйста сообщайте о любых ошибках в этом руководстве на @email{mathgl.abalakin@@gmail.org}. + +Copyright @copyright{} 2009 Алексей Балакин. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with the Front-Cover Texts being ``A GNU Manual,'' +and with the Back-Cover Texts as in (a) below. A copy of the +license is included in the section entitled ``GNU Free Documentation +License.'' + +(a) The FSF's Back-Cover Text is: ``You have the freedom to +copy and modify this GNU manual. Buying copies from the FSF +supports it in developing GNU and promoting software freedom.'' +@end quotation +@end copying + +@c @dircategory MathGL documentation system +@c @direntry +@c * MathGL: (mathgl). The library for scientific graphics. +@c @end direntry + +@titlepage +@title Язык MGL +@subtitle версия @value{VERSION} +@author А.А. Балакин (@uref{http://mathgl.sourceforge.net/}) +@page +@vskip 0pt plus 1filll +@insertcopying +@end titlepage + +@contents -MathGL library supports (from version 1.3) the simplest scripts for data handling and plotting. These scripts can be used independently (with the help of mgl2png, mgl2eps, mgl2svg programs and others) or in the frame of the library using. - -MGL script language is rather simple. Each string is a command. First word of string is the name of command. Other words are command arguments. Command may have up to 1000 arguments (at least for now). Words are separated from each other by space or tabulation symbol. The upper or lower case of words is sufficient, i.e. variables a and A are different variables. Symbol @samp{#} starts the comment (all characters after # will be ignored). The exception is situation when # is a part of some string. Also options can be specified at the end of string (after symbol @samp{;}, @pxref{Command options (MGL)}). Symbol @samp{:} starts new command (like new line character) if it is not placed inside a string or inside brackets. - -If string contain references to external parameters (substrings @samp{$0}, @samp{$1} ... @samp{$9}) then before execution the values of parameter will be substituted instead of reference. It allows to use the same MGL script for different parameters (filenames, paths, condition and so on). - -Argument can be a string, a variable name or a number. -@itemize @bullet -@item -The string is any symbols between ordinary marks @samp{'}. - -@item -Variable name is arbitrary combination of symbols (except spaces and @samp{'}) started from a letter and with length less than 64. It is possible to use sub-arrays (like in @code{subdata} command) as command argument. For example, @code{a(1)} or @code{a(1,:)} or @code{a(1,:,:)} is second row, @code{a(:,2)} or @code{a(:,2,:)} is third column, @code{a(:,:,0)} is first slice and so on. Also you can extract a part of array from m-th to n-th element by code @code{a(m:n,:,:)} or just @code{a(m:n)}. - -If names for data columns was specified (by set_id command or in the file at string started with @code{##}) then it is possible to use any column combinations defined by formulas, like @code{a('n*w^2/exp(t)')}. - -Also, any expression (without spaces) of existed variables produce temporary variable. For example, @samp{sqrt(dat(:,5)+1)} will produce temporary variable with data values equal to @code{tmp[i,j] = sqrt(dat[i,5,j]+1)}. Such variables can not be used as 1st argument for commands which create (return) the data (like @samp{new}, @samp{read}, @samp{hist} and so on). - -@item -Special names @code{nan=#QNAN, pi=3.1415926..., on=1, off=0, :=-1} are treated as number if they were not redefined by user. Variables with suffixes are treated as numbers (@pxref{Suffixes}). Also results of formulas with sizes 1x1x1 are treated as number (for example, @samp{pi/dat.nx}). -@end itemize -Before the first using all variables must be defined with the help of commands, like, @code{new, var, list, copy} or @code{read}. - -All MGL commands can be divided on several groups. I will use the following notation for a command description: command names are bold, strings are denoted by commas, variable names are italic, numbers are typewriter. Optional arguments are placed in square brackets and default values for them are shown. Detailed description of color, line styles, color schemes, font types, TeX-like symbols and formulas can be found in corresponding section. - -@menu -* Graphics setup (MGL):: -* Axis settings (MGL):: -* Transformation matrix (MGL):: -* Export to file (MGL):: -* Primitives drawing (MGL):: -* Text printing (MGL):: -* Axis and Colorbar (MGL):: -* Legend (MGL):: -* 1D plotting (MGL):: -* 2D plotting (MGL):: -* 3D plotting (MGL):: -* Dual plotting (MGL):: -* Vector fields (MGL):: -* Other plotting (MGL):: -* Nonlinear fitting (MGL):: -* Data create (MGL):: -* Data filling (MGL):: -* Rearrange data (MGL):: -* File I/O (MGL):: -* Make another data (MGL):: -* Commands on direction (MGL):: -* Operators (MGL):: -* Program flow (MGL):: -* Command options (MGL):: -* Suffixes:: -* Utilities:: -@end menu - - -@c ################################################################## -@node Graphics setup (MGL), Axis settings (MGL), , MGL interface -@section Graphics setup (MGL) - -Coomands in this group influences on overall graphics appearance. So all of them should be placed @emph{before} any actual plotting commands. - -@menu -* Transparency (MGL):: -* Lighting (MGL):: -* Fog (MGL):: -* Default sizes (MGL):: -* Zooming (MGL):: -* Cutting (MGL):: -* Other settings (MGL):: -@end menu - -@c ================================================================== -@node Transparency (MGL), Lighting (MGL), , Graphics setup (MGL) -@subsection Transparency (MGL) -@cindex alpha -@cindex alphadef -@cindex transparent -@cindex transptype - -There are several commands for setup transparency. The general command is @code{alpha} which switch on/off the transparency for overall plot. It influence only for graphics which created after @code{alpha} call (with one exeption, mglGraphGL). Command @code{alphadef} specify the default value of alpha-channel. You may switch off transparency of selected plot by command @code{transparent}. Finally, command @code{transptype} set the kind of transparency. @sref{Transparent surface sample} - -@deffn {MGL command} alpha @code{[val=on]} -Sets the transparency on/off. It is recommended to call this command before any plotting command. Default value is @code{off}. Use @code{transparent off} in particular plot to disable its transparency. -@end deffn -@deffn {MGL command} alphadef @code{val} -Default value of alpha channel (transparency) for all plotting commands. Initial value is 0.5. -@end deffn -@deffn {MGL command} transparent @code{val} -Temporary switches transparency on/off for the plot. -@end deffn -@deffn {MGL command} transptype @code{val} -This command set the transparency type. Normal transparency (@samp{0}) -- below things is less visible than upper ones. It does not look well in OpenGL mode (mglGraphGL) for several surfaces. Glass-like transparency (@samp{1}) -- below and upper things are commutable and just decrease intensity of light by RGB channel. Lamp-like transparency (@samp{2}) -- below and upper things are commutable and are the source of some additional light. I recommend to set @code{alphadef 0.3} or less for lamp-like transparency. -@end deffn - -@c ================================================================== -@node Lighting (MGL), Fog (MGL), Transparency (MGL), Graphics setup (MGL) -@subsection Lighting (MGL) -@cindex light -@cindex ambient - -There are several commands for setup lighting. The general command is @code{light} which switch on/off the lighting for overall plot. It influence only for graphics which created after @code{light} call (with one exeption, mglGraphGL). Generally MathGL support up to 10 independent light sources. But in OpenGL mode only 8 of light sources is used due to OpenGL limitations. The position, color, brightness of each light source can be set separately. By default only one light source is active. It is source number @code{0} with white color, located at top of the plot. - -@deffn {MGL command} light @code{[val=on]} -Sets the using of light on/off for overall plot. It is recommended to call this command before any plotting command. Default value is lightning off. -@end deffn -@deffn {MGL command} light @code{num val} -Switch on/off @var{num}-th light source separately. -@end deffn - -@deffn {MGL command} light @code{num xpos ypos zpos} ['col'='w' @code{br=0.5}] -The command adds a light source with identification @var{num} at position @{@var{xpos}, @var{ypos}, @var{zpos}@}. The color of light is @var{col} (white by default). The brightness of light is @var{br} which must be in range [0,1]. -@end deffn - -@deffn {MGL command} ambient @code{val} -Sets the brightness of ambient light. The value should be in range [0,1]. Initial value is 0.5. -@end deffn - -@c ================================================================== -@node Fog (MGL), Default sizes (MGL), Lighting (MGL), Graphics setup (MGL) -@subsection Fog (MGL) -@cindex fog - -@deffn {MGL command} fog @code{val [dz=0.25]} -Command imitate a fog in the plot. Fog start from relative distance @var{dz} from view point and its density growths exponentially in depth. So that the fog influence is determined by law ~ 1-exp(-@emph{val*z}). Here @emph{z} is normalized to 1 depth of the plot. If value @var{val}=@code{0} then the fog is absent. @sref{Surface in fog sample} -@end deffn - -@c ================================================================== -@node Default sizes (MGL), Zooming (MGL), Fog (MGL), Graphics setup (MGL) -@subsection Default sizes (MGL) -@cindex marksize -@cindex arrowsize -@cindex linewidth -@cindex ticklen -@cindex tickstl - -These commands control the default (initial) values for most graphics parameters including sizes of markers, arrows, linewidth and so on. As any other settings these ones will influence only on plots created after the settings change. - -@deffn {MGL command} barwidth @code{val} -Sets relative width of rectangles in @code{bars, barh, boxplot}. Default value is @code{0.7}. -@end deffn - -@deffn {MGL command} marksize @code{val} -The size of marks. Default value is @code{1}. -@end deffn - -@deffn {MGL command} arrowsize @code{val} -The size of arrows for lines and curves. Default value is @code{1}. -@end deffn - -@deffn {MGL command} linewidth @code{val} -The variable define the base width for all lines. The value <1 is ignored. Increase of this variables is actual for large bitmap pictures. Default value is @code{1}. -@end deffn - -@deffn {MGL command} ticklen @code{val} [@code{stt=1}] -The relative length of axis ticks. Default value is @code{0.1}. Parameter @var{stt}>0 set relative length of subticks which is in @code{sqrt(1+stt)} times smaller. -@end deffn - -@deffn {MGL command} tickstl 'stl' ['sub'=''] -The line style of axis ticks (@var{stl}) and subticks (@var{sub}). If @var{stl}='' then default style is used (@samp{k} or @samp{w} depending on transparency type). If @var{sub}='' then ticks style is used (i.e. @var{stl}). -@end deffn - -@c ================================================================== -@node Zooming (MGL), Cutting (MGL), Default sizes (MGL), Graphics setup (MGL) -@subsection Zooming (MGL) -@cindex plotfactor -@cindex zoom - -These commands control the overall zooming of the picture or the sub-picture. Normally you can use these variables and commands for removing ``white'' spaces around a plot. - -@deffn {MGL command} plotfactor @code{val} -The factor of plot size. It is not recommended to set it lower then 1.6. This is some analogue of command @code{zoom} but applied not to overall image but for each @code{inplot}. Use negative value to enable automatic @code{plotfactor} selection. -@end deffn - -@deffn {MGL command} zoom @code{x1 y1 x2 y2} -The command changes the scale of graphics that correspond to zoom in/out of the picture. After command call the current plot will be cleared and further the picture will contain plotting from its part [x1,x2]*[y1,y2]. Here picture coordinates @var{x1}, @var{x2}, @var{y1}, @var{y2} changes from 0 to 1. Use @code{zoom 0 0 1 1} to return default view. -@end deffn - -@c ================================================================== -@node Cutting (MGL), Other settings (MGL), Zooming (MGL), Graphics setup (MGL) -@subsection Cutting (MGL) -@cindex cut - -These commands set the condition when the points are excluded (cutted) from the drawing. - -@deffn {MGL command} cut @code{val} -Determines how points outside bounding box are drawn. If it is @code{true} then points are excluded from plot (it is default) otherwise the points are projected to edges of bounding box. -@end deffn - -@deffn {MGL command} cut @code{x1 y1 z1 x2 y2 z2} -Lower and upper edge of the box in which never points are drawn. If both edges are the same (the variables are equal) then the cutting box is empty. @sref{CutMinMax sample} -@end deffn - -@deffn {MGL command} cut 'cond' -Command set the cutting off condition by formula @var{cond}. This condition determine will point be plotted or not. If value of formula is nonzero then point is omitted, otherwise it plotted. Set argument as @code{''} to disable cutting off condition. @sref{CutOff sample} -@end deffn - -@c ================================================================== -@node Other settings (MGL), , Cutting (MGL), Graphics setup (MGL) -@subsection Other settings (MGL) -@cindex font -@cindex rotatetext -@cindex palette -@cindex meshnum -@cindex axialdir - -@deffn {MGL command} font 'fnt' [@code{val=6}] -Font style for text and labels (see text). Initial style is 'fnt'='rC' give Roman font with centering. Parameter @code{val} sets the size of font for tick and axis labels. Default font size of axis labels is 1.4 times large than for tick labels. For more detail, @pxref{Font style}. -@end deffn - -@deffn {MGL command} rotatetext @code{val} -Set to use or not text rotation along axis. Initial value is @code{on}. -@end deffn - -@deffn {MGL command} palette 'colors' -Set the palette as selected colors. Default value is @code{'Hbgrcmyhlnqeup'}. The palette is used mostly in 1D plots for curves which styles are not specified. -@end deffn - -@deffn {MGL command} meshnum @code{num} -Sets approximate number of lines in @code{mesh, fall, grid} and also the number of hachures in @code{vect, vectc, dew} and the number of cells in @code{cloud}. By default (=0) it draws all lines/hachures/cells. -@end deffn - -@deffn {MGL command} axialdir 'dir' -Set direction around which curve rotated in @code{axial, torus}. Default value is 'z'. -@end deffn - -@c ================================================================== -@node Axis settings (MGL), Transformation matrix (MGL), Graphics setup (MGL), MGL interface -@section Axis settings (MGL) -@cindex axis -@cindex caxis -@cindex xrange -@cindex yrange -@cindex zrange -@cindex crange -@cindex xtick -@cindex ytick -@cindex ztick -@cindex ctick -@cindex origin -@cindex adjust - -These large set of commands control how the axis and ticks will be drawn. Note that there is 3-step transformation of data coordinates are performed. Firstly, coordinates are projected and cutting is applied (@pxref{Cutting (MGL)}), after it transformation formulas are applied, and finally the data was normalized in bounding box. - -@deffn {MGL command} axis @code{x1 y1 x2 y2} -@deffnx {MGL command} axis @code{x1 y1 z1 x2 y2 z2} -@deffnx {MGL command} ranges @code{x1 x2 y1 y2 [z1=0 z2=0]} -Sets the ranges of coordinates changing. Also it sets the range for coloring (analogous to @code{caxis z1 z2}). Initial ranges are [-1, 1]. -@end deffn - -@deffn {MGL command} axis 'fx' 'fy' ['fz'='' 'fa'=''] -Sets the transformation formulas for curvilinear coordinates. Each string should contain mathematical expression for real coordinate depending on internal coordinates 'x', 'y', 'z' and 'a' or 'c' for colorbar. For example, the cylindrical coordinates are introduced as @code{axis 'x*cos(y)' 'x*sin(y)' 'z'}. For removing of formulas the corresponding parameter should be @code{''}. The using of transformation formulas will slightly slowing the program, i.e. @code{axis '' '' ''} is faster than @code{axis '1*x' '1*y' '1*z'}. Initially all formulas are absent (Cartesian coordinates are used). For more details about functions and formulas, @pxref{mglFormula class}. -@end deffn - -@deffn {MGL command} axis @code{how} -Sets one of the predefined transformation formulas for curvilinear coordinate. Paramater @var{how} define the coordinates: @code{0} -- Cartesian coordinates (no transformation); @code{1} -- Polar coordiantes @math{x_n=x*cos(y),y_n=x*sin(y), z_n=z}; @code{2} -- Spherical coordinates @math{x_n=x*sin(y)*cos(z), y_n=x*sin(y)*sin(z), z_n=x*cos(y)}; @code{3} -- Parabolic coordinates @math{x_n=x*y, y_n=(x*x-y*y)/2, z_n=z}; @code{4} -- Paraboloidal coordinates @math{x_n=(x*x-y*y)*cos(z)/2, y_n=(x*x-y*y)*sin(z)/2, z_n=x*y}; @code{5} -- Oblate coordinates @math{x_n=cosh(x)*cos(y)*cos(z), y_n=cosh(x)*cos(y)*sin(z), z_n=sinh(x)*sin(y)}; @code{6} -- Prolate coordinates @math{x_n=sinh(x)*sin(y)*cos(z), y_n=sinh(x)*sin(y)*sin(z), z_n=cosh(x)*cos(y)}; @code{7} -- Elliptic coordinates @math{x_n=cosh(x)*cos(y), y_n=sinh(x)*sin(y), z_n=z}; @code{8} -- Toroidal coordinates @math{x_n=sinh(x)*cos(z)/(cosh(x)-cos(y)), y_n=sinh(x)*sin(z)/(cosh(x)-cos(y)), z_n=sin(y)/(cosh(x)-cos(y))}; @code{9} -- Bispherical coordinates @math{x_n=sin(y)*cos(z)/(cosh(x)-cos(y)), y_n=sin(y)*sin(z)/(cosh(x)-cos(y)), z_n=sinh(x)/(cosh(x)-cos(y))}; @code{10} -- Bipolar coordinates @math{x_n=sinh(x)/(cosh(x)-cos(y)), y_n=sin(y)/(cosh(x)-cos(y)), z_n=z}. -@end deffn - -@deffn {MGL command} caxis @code{z1 z2} -Sets the range for surface coloring. Initial range is [-1, 1]. -@end deffn - -@deffn {MGL command} origin @code{x0 y0 [z0=nan]} -Center of axis cross section. If one of values is @code{nan} then MathGL library try to select optimal axis position. -@end deffn - -@deffn {MGL command} ternary @code{val} -The command sets to draws Ternary plot. This special plot is for 3 dependent coordinates (components) @var{a}, @var{b}, @var{c} so that @var{a}+@var{b}+@var{c}=1. MathGL uses only 2 independent coordinates @var{a}=x and @var{b}=y since it is enough to plot everything. At this third coordinate z act as another parameter to produce contour lines, surfaces and so on. @sref{Ternary plot sample} -@end deffn - -@deffn {MGL command} xrange dat [@code{add=off fact=0}] -@deffnx {MGL command} yrange dat [@code{add=off fact=0}] -@deffnx {MGL command} zrange dat [@code{add=off fact=0}] -@deffnx {MGL command} crange dat [@code{add=off fact=0}] -Sets the range for x-,y-,z- coordinate or coloring as minimal and maximal values of data @var{dat}. Parameter @code{add=on} shows that the new range will be joined to existed one (nut will not replace it). Parameter @var{fact} add additional range increase on value (@var{Max}-@var{Min})*@var{fact}. -@end deffn - -@deffn {MGL command} xrange @code{x1 x2} -@deffnx {MGL command} yrange @code{x1 x2} -@deffnx {MGL command} zrange @code{x1 x2} -@deffnx {MGL command} crange @code{x1 x2} -Sets the range for x-,y-,z- coordinate or coloring. See also axis. -@end deffn - -@deffn {MGL command} xtick @code{val [sub=0 org=nan]} -@deffnx {MGL command} ytick @code{val [sub=0 org=nan]} -@deffnx {MGL command} ztick @code{val [sub=0 org=nan]} -@deffnx {MGL command} ctick @code{val} -Sets step for x-, y-, z-axis ticks or colorbar ticks (if @var{val}>0) or it's number (if @var{val}<0) in corresponding direction. Zero value @var{val}=0 sets logarithmic ticks. Parameter @var{sub} sets the number of sub-ticks. Parameter @var{org} set the starting points for ticks. If not @code{org=nan} then the value from @code{origin} is used. -@end deffn - -@deffn {MGL command} xtick 'templ' -@deffnx {MGL command} ytick 'templ' -@deffnx {MGL command} ztick 'templ' -@deffnx {MGL command} ctick 'templ' -Sets the template for x-, y-, z-axis ticks or colorbar ticks. It may contain TeX symbols also. If @var{templ}=@code{''} then default template is used (in simplest case it is @samp{%.2g}) with automatic detaching of common multiplier or common component. -@end deffn - -@deffn {MGL command} xtick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...] -@deffnx {MGL command} ytick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...] -@deffnx {MGL command} ztick @code{val1} 'lbl1' [@code{val2} 'lbl2' ...] -Sets manual positions @var{val1},@var{val2},... and labels @var{lbl1},@var{lbl2},... for ticks along x-, y-, z-axis. Labels may contain TeX symbols also. -@end deffn - -@deffn {MGL command} adjust ['dir'='xyzc'] -Set the ticks step, number of sub-ticks and initial ticks position to be the most human readable for the axis along direction(s) @var{dir}. -@end deffn - - -@c ################################################################## -@node Transformation matrix (MGL), Export to file (MGL), Axis settings (MGL), MGL interface -@section Transformation matrix (MGL) -@cindex aspect -@cindex rotate -@cindex subplot -@cindex inplot -@cindex identity -@cindex perspective - -These commands control how and where further plotting will be placed. There is a curtain order of calling of these commands for the better plot view. First one should be @code{subplot} or @code{inplot} for specifying the place. After it a @code{rotate} and @code{aspect}. And finally any other plotting commands may be called. Alternatevely you can use @code{columnplot} for position plots in the column one by another without gap between plot axis (bounding boxes). - -@deffn {MGL command} subplot @code{nx ny m [dx=0 dy=0]} -Puts further plotting in a @var{m}-th cell of @var{nx}*@var{ny} grid of the whole frame area. This command set off any aspects or rotations. So it should be used first for creating the subplot. From the aesthetical point of view it is not recommended to use this command with different matrices in the same frame. The position of the cell can be shifted from its default position by relative size @var{dx}, @var{dy}. -@end deffn - -@deffn {MGL command} inplot @code{x1 x2 y1 y2 [rel=off]} -Puts further plotting in some region of the whole frame surface. This command allows one to create a plot in arbitrary place of the screen. The position is defined by rectangular coordinates [@var{x1}, @var{x2}]*[@var{y1}, @var{y2}]. The coordinates @var{x1}, @var{x2}, @var{y1}, @var{y2} are normalized to interval [0, 1]. If parameter @var{rel}=@code{on} then the relative position to current @code{subplot} is used. This command set off any aspects or rotations. So it should be used first for creating subplot. -@end deffn - -@deffn {MGL command} columnplot @code{num ind} -Puts further plotting in @var{ind}-th cell of column with @var{num} cells. The position is relative to previous @code{subplot} call (or @code{inplot} with @code{rel=off}). -@end deffn - -@deffn {MGL command} rotate @code{tetz tetx [tety=0]} -Rotates a further plotting relative to each axis (x, z, y) consecutively on angles @var{tetx}, @var{tetz}, @var{tety}. -@end deffn - -@deffn {MGL command} rotate @code{tet x y z} -Rotates a further plotting around vector @{x,y,z@} on angle @var{tet}. -@end deffn - -@deffn {MGL command} aspect @code{ax ay [az=1]} -Defines aspect ratio for the plot. The viewable axes will be related one to another as the ratio @var{ax:ay:az}. For the best effect it should be used after @code{rotate} command. -@end deffn - -@deffn {MGL command} perspective @code{val} -Add (switch on) the perspective to plot. The parameter @math{val ~ 1/z_@{eff@} \in [0,1)}. By default (@code{val=0}) the perspective is off. -@end deffn - -@c ################################################################## -@node Export to file (MGL), Primitives drawing (MGL), Transformation matrix (MGL), MGL interface -@section Export to file (MGL) -@cindex write -@cindex setsize - -@deffn {MGL command} write 'fname' [@code{solid=off}] -Exports current picture/frame to file 'fname' (file type is determined by extension). Solid (usually white) background will be used if @code{solid=on}. If 'fname'='' then the file @samp{frameNNNN.jpg} is used, where @samp{NNNN} is current frame id. -@end deffn - -@deffn {MGL command} setsize @code{w h} -Sets size of picture in pixels. This function call @strong{must be} placed before any plotting command because it completely remove picture content. In some program the call of this function is forbidden. -@end deffn - - -@c ################################################################## -@node Primitives drawing (MGL), Text printing (MGL), Export to file (MGL), MGL interface -@section Primitives drawing -@cindex ball -@cindex clf -@cindex line -@cindex curve -@cindex facex -@cindex facey -@cindex facez -@cindex cone -@cindex drop -@cindex sphere - -These commands draw some simple objects like line, point, sphere, drop, cone and so on. - -@deffn {MGL command} clf -Clear the picture by removes all drawing from it. Does not change transformation matrix. -@end deffn - -@deffn {MGL command} ball @code{x y} ['col'='r'] -@deffnx {MGL command} ball @code{x y z} ['col'='r'] -Draws a point (ball) at position @{@var{x}, @var{y}, @var{z}@} with color defined by string @var{col}. -@end deffn - -@deffn {MGL command} line @code{x1 y1 x2 y2} ['stl'=''] -@deffnx {MGL command} line @code{x1 y1 z1 x2 y2 z2} ['stl'=''] -Draws a geodesic line (straight line in Cartesian coordinates) from point @{@var{x1},@var{y1},@var{z1}@} to @{@var{x2},@var{y2},@var{z2}@} using line style @var{stl}. -@end deffn - -@deffn {MGL command} curve @code{x1 y1 dx1 dy1 x2 y2 dx2 dy2} ['stl'=''] -@deffnx {MGL command} curve @code{x1 y1 z1 dx1 dy1 dz1 x2 y2 z2 dx2 dy2 dz2} ['stl'=''] -Draws Bezier-like curve from point @{@var{x1},@var{y1},@var{z1}@} to @{@var{x2},@var{y2},@var{z2}@} using line style @var{stl}. At this tangent is co-directed with @{@var{dx1},@var{dy1},@var{dz1}@}, @{@var{dx2},@var{dy2},@var{dz2}@} and proportional to its amplitude. -@end deffn - -@deffn {MGL command} facex @code{x0 y0 z0 wy wz} ['stl'='' @code{d1=0 d2=0}] -@deffnx {MGL command} facey @code{x0 y0 z0 wx wz} ['stl'='' @code{d1=0 d2=0}] -@deffnx {MGL command} facez @code{x0 y0 z0 wx wy} ['stl'='' @code{d1=0 d2=0}] -Draws the solid rectangle (face) perpendicular to [x,y,z]-axis correspondingly at position @{@var{x0}, @var{y0}, @var{z0}@} with color @var{stl} and with widths @var{wx}, @var{wy}, @var{wz} along corresponding directions. At this colors can be the same for all vertexes or different if all 4 colors are specified for each vertex. Parameters @var{d1}!=0, @var{d2}!=0 set additional shift of the last vertex (i.e. to draw quadrangle). -@end deffn - -@deffn {MGL command} sphere @code{x0 y0 r} ['col'='r'] -@deffnx {MGL command} sphere @code{x0 y0 z0 r} ['col'='r'] -Draw the sphere with radius @var{r} and center at point @{@var{x0}, @var{y0}, @var{z0}@} and color @var{stl}. -@end deffn - -@deffn {MGL command} drop @code{x0 y0 dx dy r} ['col'='b' @code{sh=1 asp=1}] -@deffnx {MGL command} drop @code{x0 y0 z0 dx dy dz r} ['col'='b' @code{sh=1 asp=1}] -Draw the drop with radius @var{r} at point @{@var{x0},@var{y0},@var{z0}@} elongated in direction @{@var{dx},@var{dy},@var{dz}@} and with color @var{col}. Parameter @var{sh} set the degree of drop oblongness: @samp{0} is sphere, @samp{1} is maximally oblongness drop. Parameter @var{asp} set relative width of the drop (this is analogue of ``ellipticity'' for the sphere). @sref{Drops sample} -@end deffn - -@deffn {MGL command} cone @code{x1 y1 z1 x2 y2 z2 r1} [@code{r2=-1} 'st'='' @code{edge=off}] -Draw tube (or truncated cone if @var{edge}=@code{off}) between points @{@var{x1},@var{y1},@var{z1}@}, @{@var{x2},@var{y2},@var{z2}@} with radiuses at the edges @var{r1}, @var{r2}. If @var{r2}<0 then it is supposed that @var{r2}=@var{r1}. The cone color is defined by string @var{stl}. -@end deffn - -@deffn {MGL command} rect @code{x1 y1 x2 y2} ['st'=''] -@deffnx {MGL command} rect @code{x1 y1 z1 x2 y2 z2} ['st'=''] -Draw rectangle from point @{@var{x1},@var{y1},@var{z1}@} to point @{@var{x2},@var{y2},@var{z2}@} using colors @var{stl}. If @var{stl} have 4 or more colors then it defines colors for each rectangle vertex (useful for making gradients, like @samp{wwrr}) else first color is used for whole rectangle. -@end deffn - -@c ################################################################## -@node Text printing (MGL), Axis and Colorbar (MGL), Primitives drawing (MGL), MGL interface -@section Text printing (MGL) -@cindex fgets -@cindex text -@cindex title - -These commands draw the text. There are commands for drawing text in arbitrary place, in arbitrary direction and along arbitrary curve. It is possible to use arbitrary font-faces and parse many TeX commands. The Unicode text is supported. So sometimes you need to specify locale. The @code{size} argument control the size of text: if positive it give the value, if negative it give the value relative to defined by @code{font} command. @xref{Font style}. - -@deffn {MGL command} text @code{x y} 'text' ['fnt'='' @code{size=-1.4}] -@deffnx {MGL command} text @code{x y z} 'text' ['fnt'='' @code{size=-1.4}] -Draws unrotated text string @var{text} at position @{@var{x},@var{y},@var{z}@} with specified style @var{fnt} and @var{size}. By default parameters from @code{font} command are used. -@end deffn - -@deffn {MGL command} text @code{x y dx dy} 'text' [@code{size=-1.4}] -@deffnx {MGL command} text @code{x y z dx dy dz} 'text' [@code{size=-1.4}] -The command plots the string @var{text} at position @{@var{x},@var{y},@var{z}@} along direction @{@var{dx},@var{dy},@var{dz}@} with specified style @var{fnt} and @var{size}. By default parameters from @code{font} command are used. -@end deffn - -@deffn {MGL command} title 'text' ['fnt'='' @code{size=-2}] -Print string @var{text} as title of the picture (at the top of the picture). Can be used at any place (even inside @code{subplot}). -@end deffn - -@deffn {MGL command} fgets @code{x y} 'fname' [@code{n=0} 'fnt'='' @code{size=-1.4}] -@deffnx {MGL command} fgets @code{x y z} 'fname' [@code{n=0} 'fnt'='' @code{size=-1.4}] -Draws unrotated @var{n}-th line of file @var{fname} at position @{@var{x},@var{y},@var{z}@} with specified @var{size}. By default parameters from @code{font} command are used. -@end deffn - - -@deffn {MGL command} text xdat 'text' ['fnt'='' @code{size=-1 zval=nan}] -@deffnx {MGL command} text xdat ydat 'text' ['fnt'='' @code{size=-1 zval=nan}] -@deffnx {MGL command} text xdat ydat zdat 'text' ['fnt'='' @code{size=-1}] -The command draws @var{text} along the curve between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} by font style @var{fnt} and with size @var{size}. The string @var{fnt} may contain symbols @samp{t} for printing the text under the curve (default), or @samp{T} for printing the text above the curve. The sizes of 1st dimension must be equal for all arrays @var{xdat.nx=ydat.nx=zdat.nx}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{z}[i] = @var{zval} is used. @sref{Text sample} -@end deffn - -@c ################################################################## -@node Axis and Colorbar (MGL), Legend (MGL), Text printing (MGL), MGL interface -@section Axis and Colorbar (MGL) -@cindex axis -@cindex box -@cindex grid -@cindex colorbar -@cindex xlabel -@cindex ylabel -@cindex zlabel -@cindex tlabel - -These commands draw the ``things for measuring'', like axis with ticks, colorbar with ticks, grid along axis, bounding box and labels for axis. For more information @pxref{Axis settings (MGL)}. - -@deffn {MGL command} axis ['dir'='xyz' @code{adjust=off}] -Draws axes with ticks (@pxref{Axis settings (MGL)}) in directions determined by string parameter @var{dir}.If string contain the symbol @samp{_} then tick labels are not printed. Font for ticks labels is determined by command @code{font}. Ticks will be automatically adjusted if @var{adjust}=@code{on} (by call of @code{adjust 'dir'}). -@end deffn - -@deffn {MGL command} colorbar ['sch'='' @code{pos=0}] -Draws colorbar with color scheme @var{sch} (current scheme if @code{sch=''}) at edge of plot. Parameter @var{pos} specifies the position of colorbar: @samp{0} - at right (default), @samp{1} - at left, @samp{2} - at top, @samp{3} - at bottom. @sref{Dens sample} -@end deffn - -@deffn {MGL command} colorbar 'sch' @code{pos x y w h} -Draws colorbar with color scheme @var{sch} (current scheme if not specified) at arbitrary position of subplot @{@var{x}, @var{y}@} (supposed to be in range [0,1]). Parameter @var{pos} specifies the position of colorbar labels: @samp{0} - at left, @samp{1} - at right, @samp{2} - at bottom, @samp{3} - at top. Parameters @var{w}, @var{h} set the relative width and height of the colorbar. -@end deffn - -@deffn {MGL command} colorbar vdat ['sch'='' @code{pos=0}] -Draws colorbar with sharp colors @var{sch} (current palette if @code{sch=NULL}) for values @var{vdat} at edge of plot. Parameter @var{pos} specifies the position of colorbar: @samp{0} - at right (default), @samp{1} - at left, @samp{2} - at top, @samp{3} - at bottom. @sref{Dens sample} -@end deffn - -@deffn {MGL command} grid ['dir'='xyz' 'pen'='B'] -Draws grid lines perpendicular to direction determined by string parameter @var{dir}. The step of grid lines is the same as tick step for an @code{axis}. The style of lines is determined by @var{pen} parameter. -@end deffn - -@deffn {MGL command} box ['stl'='k' @code{ticks=on}] -Draws bounding box outside the plotting volume with line style 'stl'. -@end deffn - -@deffn {MGL command} xlabel 'text' [@code{pos=1 size=-1.4 shift=0}] -@deffnx {MGL command} ylabel 'text' [@code{pos=1 size=-1.4 shift=0}] -@deffnx {MGL command} zlabel 'text' [@code{pos=1 size=-1.4 shift=0}] -@deffnx {MGL command} tlabel 'text' [@code{pos=1 size=-1.4 shift=0}] -Prints the label @var{text} for x-,y-,z-,t-axis (here @samp{t} is ``ternary'' axis @math{t=1-x-y}). The position of label is determined by @var{pos} parameter. If @var{pos}=0 then label is printed at the center of axis. If @var{pos}>0 then label is printed at the maximum of axis (default). If @var{pos}<0 then label is printed at the minimum of axis. The font size is 1.4 times larger than the one for ticks @code{font}. Parameter @code{shift} specify additional shifting of the label. @xref{Text printing (MGL)}. -@end deffn - -@c ################################################################## -@node Legend (MGL), 1D plotting (MGL), Axis and Colorbar (MGL), MGL interface -@section Legend (MGL) -@cindex legend -@cindex addlegend -@cindex clearlegend - -These commands draw legend to the graph (useful for @ref{1D plotting (MGL)}). Legend entry is a pair of strings: one for style of the line, another one with description text (with included LaTeX parsing). The array of string are accumulated first to the internal arrays (by command @code{addlegend}) and are plotted later. The position of the legend can be selected automatic or manually. Parameters @var{fnt} and @var{size} specify the font style and size. Parameter @var{llen} set the relative width of the line sample and the text indent (default value is 0.1). If line style string for entry is empty then the corresponding text is printed without indent. @sref{Legend sample} - -@deffn {MGL command} legend [@code{pos=3} 'fnt'='rL' @code{size=-1 llen=0.1}] -Draws legend of accumulated legend entries by font @var{fnt} with specified @var{size}. Parameter @var{pos} sets the position of the legend: @samp{0} is bottom left corner, @samp{1} is bottom right corner, @samp{2} is top left corner, @samp{3} is top right corner (is default). -@end deffn - -@deffn {MGL command} legend @code{x y} ['fnt'='rL' @code{size=-1 llen=0.1}] -Draws legend of accumulated legend entries by font @var{fnt} with @var{size}. Position of legend is determined by parameter @var{x}, @var{y} which supposed to be normalized to interval [0,1]. -@end deffn - -@deffn {MGL command} addlegend 'text' 'stl' -Adds string @var{text} to internal legend accumulator. The style of described line and mark is specified in string @var{stl} (@pxref{Line styles}). Maximal number of entries is 100. -@end deffn - -@deffn {MGL command} clearlegend -Clears saved legend strings. -@end deffn - -@deffn {MGL command} legendbox @code{val} -Switches on/off the drawing of a box near legend. By default, the box is drawn. -@end deffn - - - -@c ################################################################## -@node 1D plotting (MGL), 2D plotting (MGL), Legend (MGL), MGL interface -@section 1D plotting (MGL) -@cindex plot -@cindex tens -@cindex area -@cindex bars -@cindex barh -@cindex stem -@cindex step -@cindex torus -@cindex chart -@cindex mark -@cindex textmark -@cindex error -@cindex tube -@cindex region - -These commands perform plotting of 1D data. 1D means that data depended from only 1 parameter like parametric curve @{x(i),y(i),z(i)@}, i=1...n. Most of plotting type has similar interface. There are 3D version and two 2D versions. One of last requires single array. The parameters of line and marks are specified by the string argument. If the string parameter is NULL then solid line with color from palette Pal is used (@pxref{Palette and colors}). Also there are some special 1d plots having slightly different interface: surface of curve rotation (Torus), chart (Chart) and error boxes (Error), marks with variable size (Mark), tubes (Tube) and so on. @xref{Line styles}. - -The plots are drawn for each row if one of the data is the matrix. By any case the sizes of 1st dimension @strong{must be equal} for all arrays @var{x.nx=y.nx=z.nx}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=NULL}) solid line with color from palette is used (@pxref{Palette and colors}). - -@deffn {MGL command} plot ydat ['stl'='' @code{zval=nan}] -@deffnx {MGL command} plot xdat ydat ['stl'='' @code{zval=nan}] -@deffnx {MGL command} plot xdat ydat zdat ['stl'=''] -Draws continuous lines between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{tens, radar, area, step, stem, tube, mark, error, belt}. @sref{Plot sample} -@end deffn - - -@deffn {MGL command} radar adat ['stl'='' @code{r=-1}] -Draws radar chart which is continuous lines between points located on an radial lines (like plot in Polar coordinates). The plots are drawn for each row if one of the data is the matrix. Parameter @var{r} set the additional shift of data (i.e. the data @var{adat}+@var{r} is used instead of @var{adat}). If @code{r<0} then @code{r=max(0, -min(adat)}. String @var{pen} specifies the color and style of line and marks (@pxref{Line styles}). By default (@code{pen=""}) solid line with color from palette is used (@pxref{Palette and colors}). If @var{pen} containt @samp{#} symbol then "grid" (radial lines and circle for @var{r}) is drawn See also @code{plot}. @sref{Radar sample} -@end deffn - -@deffn {MGL command} tens ydat cdat ['stl'='' @code{zval=nan}] -@deffnx {MGL command} tens xdat ydat cdat ['stl'='' @code{zval=nan}] -@deffnx {MGL command} tens xdat ydat zdat cdat ['stl'=''] -Draws continuous lines between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} with color defined by @var{cdat}[i] (look like tension plot). If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{plot, mesh, fall}. @sref{Tens sample} -@end deffn - -@deffn {MGL command} area ydat ['stl'='' @code{zval=nan}] -@deffnx {MGL command} area xdat ydat ['stl'='' @code{zval=nan}] -@deffnx {MGL command} area xdat ydat zdat ['stl'=''] -Draws continuous lines between points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@} and fills it down to axis (to axis plane in 3D). If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. If array @var{zdat} is not specified then @var{zdat}[i] = @var{zval} is used (the default is at the bottom of the bounding box). See also @code{plot, bars, stem, region}. @sref{Area sample} -@end deffn - -@deffn {MGL command} region fdat gdat ['stl'='' @code{inside=off}] -@deffnx {MGL command} region xdat fdat gdat ['stl'='' @code{inside=off}] -Fills area between curves @{@var{xdat}[i], @var{fdat}[i]@} and @{@var{xdat}[i], @var{gdat}[i]@}. If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. Parameter @code{inside=off} set to fill are with y1adat (minimum, lower quartile (Q1), median (Q2), upper quartile (Q3) and maximum) along second (j-th) direction. -@end deffn - -@c ################################################################## -@node 2D plotting (MGL), 3D plotting (MGL), 1D plotting (MGL), MGL interface -@section 2D plotting (MGL) -@cindex mesh -@cindex fall -@cindex belt -@cindex surf -@cindex boxs -@cindex tile -@cindex dens -@cindex cont -@cindex contf -@cindex contd -@cindex axial -@cindex grid - -These commands perform plotting of 2D data. 2D means that data depend from 2 independent parameters like matrix @math{f(x_i,y_j), i=1...n, j=1...m}. There are 6 generally different types of data representations: simple mesh lines plot (Mesh), surface plot (Surf), surface plot by boxes (Boxs), surface plot by tiles (Tile), waterfall-like plot (Fall), belt plot (Belt), density plot (Dens), contour lines plot (Cont), solid contours plot (ContF) and its rotational figure (Axial). Cont, ContF and Axial commands have variants for automatic and manual selection of level values for contours. Also there are commands for plotting data grid lines according to the data format (Grid) for enhancing density or contour plots. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. - -String parameter @var{sch} sets the color scheme (@pxref{Color scheme}). Previous color scheme is used by default. The minor dimensions of arrays @var{xdat}, @var{ydat}, @var{zdat} should be equal @var{xdat.nx=zdat.nx && ydat.nx=zdat.ny} or @var{xdat.nx=ydat.nx=zdat.nx && xdat.ny=ydat.ny=zdat.ny}. Arrays @var{xdat} and @var{ydat} can be vectors (not matrices as @var{zdat}). If array @var{xdat}, @var{ydat} is not specified then its an automatic arrays are used with values equidistantly distributed along x, y. Graphics are plotted for each z-slice of the data. - -@deffn {MGL command} mesh zdat ['sch'=''] -@deffnx {MGL command} mesh xdat ydat zdat ['sch'=''] -Draws mesh lines for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @code{surf, fall, meshnum, cont, tens}. @sref{Mesh sample} -@end deffn - -@deffn {MGL command} fall zdat ['sch'=''] -@deffnx {MGL command} fall xdat ydat zdat ['sch'=''] -Draws fall lines for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. If @var{sch} contain @samp{x} then lines are drawn along x-direction else (by default) lines are drawn along y-direction. See also @code{belt, mesh, meshnum, tens}. @sref{Fall sample} -@end deffn - -@deffn {MGL command} belt zdat ['sch'=''] -@deffnx {MGL command} belt xdat ydat zdat ['sch'=''] -Draws belts for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. If @var{sch} contain @samp{x} then belts are drawn along x-direction else (by default) lines are drawn along y-direction. See also @code{fall, surf, plot, meshnum}. @sref{Belt sample} -@end deffn - -@deffn {MGL command} surf zdat ['sch'=''] -@deffnx {MGL command} surf xdat ydat zdat ['sch'=''] -Draws surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @code{mesh, dens, belt, tile, boxs, surfc, surfa}. @sref{Surf sample} -@end deffn - -@deffn {MGL command} boxs zdat ['sch'=''] -@deffnx {MGL command} boxs xdat ydat zdat ['sch'=''] -Draws vertical boxes for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @code{surf, dens, tile, step}. @sref{Boxs sample} -@end deffn - -@deffn {MGL command} tile zdat ['sch'=''] -@deffnx {MGL command} tile xdat ydat zdat ['sch'=''] -Draws horizontal tiles for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. See also @code{surf, dens, boxs, tile, step}. @sref{Tile sample} -@end deffn - -@deffn {MGL command} dens zdat ['sch'='' @code{zval=nan}] -@deffnx {MGL command} dens xdat ydat zdat ['sch'='' @code{zval=nan}] -Draws density plot for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal}. See also @code{surf, cont, contf, boxs, tile, dens[xyz]}. @sref{Dens sample} -@end deffn - -@deffn {MGL command} cont vdat zdat ['sch'='' @code{zval=nan}] -@deffnx {MGL command} cont vdat xdat ydat zdat ['sch'='' @code{zval=nan}] -Draws contour lines for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal} (or for @var{z}=@var{vdat}[k] if @code{zval=nan}). Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k. If string @var{stl} contain 't' (or 'T') symbol then contour labels will be drawn below (or above) the contours. See also @code{dens, contf, axial, cont[xyz]}. @sref{Cont sample} -@end deffn - -@deffn {MGL command} cont zdat ['sch'='' @code{num=7 zval=nan}] -@deffnx {MGL command} cont xdat ydat zdat ['sch'='' @code{num=7 zval=nan}] -The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}). -@end deffn - -@deffn {MGL command} contf vdat zdat ['sch'='' @code{zval=nan}] -@deffnx {MGL command} contf vdat xdat ydat zdat ['sch'='' @code{zval=nan}] -Draws solid (or filled) contours for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal} (or for @var{z}=@var{vdat}[k] if @code{zval=nan}). Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k (must be @code{vdat.nx>2}). See also @code{dens, cont, contd, axial, contf[xyz]}. @sref{ContF sample} -@end deffn - -@deffn {MGL command} contf zdat ['sch'='' @code{num=7 zval=nan}] -@deffnx {MGL command} contf xdat ydat zdat ['sch'='' @code{num=7 zval=nan}] -The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}). -@end deffn - -@deffn {MGL command} contd vdat zdat ['sch'='' @code{zval=nan}] -@deffnx {MGL command} contd vdat xdat ydat zdat ['sch'='' @code{zval=nan}] -Draws solid (or filled) contours for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal} (or for @var{z}=@var{vdat}[k] if @code{zval=nan}) with manual colors. Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k (must be @code{vdat.nx>2}). The color of k-th contour is @code{sch[k%strlen(sch)]}. See also @code{dens, cont, contf}. @sref{ContD sample} -@end deffn - -@deffn {MGL command} contd zdat ['sch'='' @code{num=7 zval=nan}] -@deffnx {MGL command} contd xdat ydat zdat ['sch'='' @code{num=7 zval=nan}] -The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}). -@end deffn - -@deffn {MGL command} axial vdat zdat ['sch'=''] -@deffnx {MGL command} axial vdat xdat ydat zdat ['sch'=''] -Draws surface which is result of contour plot rotation surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. Contours are plotted for @var{zdat}[i,j]=@var{vdat}[k] for all k. If string @var{sch} have symbol @samp{#} then wire plot is produced. If string @var{sch} contain symbols @samp{x}, @samp{y} or @samp{z} then rotation axis @code{axialdir} will be set to specified direction. If string @var{sch} have symbol @samp{#} then wire plot is produced. See also @code{cont, contf, torus, surf3}. @sref{Axial sample} -@end deffn - -@deffn {MGL command} axial zdat ['sch'='' @code{num=3}] -@deffnx {MGL command} axial xdat ydat zdat ['sch'='' @code{num=3}] -The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see, @code{caxis}). -@end deffn - -@deffn {MGL command} grid zdat ['sch'='' @code{zval=nan}] -@deffnx {MGL command} grid xdat ydat zdat ['sch'='' @code{zval=nan}] -Draws grid lines for density plot of surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} at @var{z} = @var{zVal}. See also @code{dens, cont, contf}. -@end deffn - - -@c ################################################################## -@node 3D plotting (MGL), Dual plotting (MGL), 2D plotting (MGL), MGL interface -@section 3D plotting (MGL) -@cindex surf3 -@cindex dens3 -@cindex cont3 -@cindex conta -@cindex densa -@cindex grid3 -@cindex grida -@cindex cloud -@cindex contf3 -@cindex contfa -@cindex beam - -These commands perform plotting of 3D data. 3D means that data depend from 3 independent parameters like matrix @math{f(x_i,y_j,z_k), i=1...n, j=1...m, k=1...l}. There are 4 generally different types of data representations: isosurface or surface of constant value (Surf3), density plot at slices (Dens3), contour lines plot at slices (Cont3), solid contours plot at slices (ContF3) and cloud-like plot (Cloud). Surf3, Cont3 and ContF3 commands have variants for automatic and manual selection of level values for surfaces/contours. Also there are commands for plotting data grid lines according to the data format (Grid3) for enhancing density or contour plots. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. - -String paramter @var{sch} sets the color scheme (@pxref{Color scheme}). Previous color scheme is used by default. Arrays @var{x}, @var{y}, @var{z} can be vectors (not 3d arrays as @var{a}). If array @var{xdat}, @var{ydat}, @var{zdat} is not specified then its an automatic arrays are used with values equidistantly distributed along x, y, z. - - -@deffn {MGL command} surf3 adat @code{val} ['sch'=''] -@deffnx {MGL command} surf3 xdat ydat zdat adat @code{val} ['sch'=''] -Draws isosurface plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) at @var{a}(x,y,z)=@var{val}. If string contain @samp{#} then wire plot is produced. See also @code{cloud, dens3, surf3c, surf3a, axial}. @sref{Surf3 sample} -@end deffn - -@deffn {MGL command} surf3 adat ['sch'='' @code{num=5}] -@deffnx {MGL command} surf3 xdat ydat zdat adat ['sch'='' @code{num=5}] -Draws @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d data specified parametrically. -@end deffn - -@deffn {MGL command} dens3 adat 'dir' [@code{sval=-1} 'sch'=''] -@deffnx {MGL command} dens3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'=''] -Draws density plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Density is plotted at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. If string @var{stl} have symbol @samp{#} then grid lines are drawn. See also @code{cont3, contf3, dens, grid3}. @sref{Dens3 sample} -@end deffn - -@deffn {MGL command} densa adat ['sch'=''] -@deffnx {MGL command} densa xdat ydat zdat adat ['sch'=''] -Draws density plots at all central slices of the 3d data specified parametrically. -@end deffn - -@deffn {MGL command} cont3 vdat adat 'dir' [@code{sval=-1} 'sch'=''] -@deffnx {MGL command} cont3 vdat xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'=''] -Draws contour plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Contours are plotted for values specified in array @var{vdat} at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. If string @var{stl} have symbol @samp{#} then grid lines are drawn. If string @var{stl} contain 't' (or 'T') symbol then contour labels will be drawn below (or above) the contours. See also @code{dens3, contf3, cont, grid3}. @sref{Cont3 sample} -@end deffn - -@deffn {MGL command} cont3 adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}] -@deffnx {MGL command} cont3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}] -The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see @code{caxis}). -@end deffn - -@deffn {MGL command} conta adat ['sch'='' @code{num=7}] -@deffnx {MGL command} conta xdat ydat zdat adat ['sch'='' @code{num=7}] -Draws contour plots at all central slices of the 3d data specified parametrically. -@end deffn - -@deffn {MGL command} contf3 vdat adat 'dir' [@code{sval=-1} 'sch'=''] -@deffnx {MGL command} contf3 vdat xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'=''] -Draws solid contour plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Contours are plotted for values specified in array @var{vdat} at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. If string @var{stl} have symbol @samp{#} then grid lines are drawn. See also @code{dens3, cont3, contf, grid3}. @sref{ContF3 sample} -@end deffn - -@deffn {MGL command} contf3 adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}] -@deffnx {MGL command} contf3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'='' @code{num=7}] -The same as previous one with vector @var{vdat} of @var{num}-th elements equidistantly distributed in color range (see @code{caxis}). -@end deffn - -@deffn {MGL command} contfa adat ['sch'='' @code{num=7}] -@deffnx {MGL command} contfa xdat ydat zdat adat ['sch'='' @code{num=7}] -Draws solid contour plots at all central slices of the 3d data specified parametrically. -@end deffn - -@deffn {MGL command} grid3 adat 'dir' [@code{sval=-1} 'sch'=''] -@deffnx {MGL command} grid3 xdat ydat zdat adat 'dir' [@code{sval=-1} 'sch'=''] -Draws grid for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). Grid is plotted at slice @var{sval} in @var{dir}=@{@samp{x}, @samp{y}, @samp{z}@} direction. See also @code{cont3, contf3, dens, grid3}. @sref{Dens3 sample} -@end deffn - -@deffn {MGL command} grida adat ['sch'=''] -@deffnx {MGL command} grida xdat ydat zdat adat ['sch'=''] -Draws grids at all central slices of the 3d data specified parametrically. -@end deffn - -@deffn {MGL command} cloud adat ['sch'=''] -@deffnx {MGL command} cloud xdat ydat zdat adat ['sch'=''] -Draws cloud for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]). This plot is a set of cubes with color and transparency proportional to value of @var{adat}. The resulting plot is like cloud -- low value is transparent but higher ones are not. The number of plotting cells depend on @code{meshnum}. Command @var{alpha} changes the overall transparency of plot. See also @code{surf3}. @sref{Cloud sample} -@end deffn - -@deffn {MGL command} beam tr g1 g2 adat @code{rval} ['sch'='' @code{flag=0 num=3}] -Draws @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d array @var{adat}. This is special kind of plot for @var{adat} specified in accompanied coordinates along curve @var{tr} with orts @var{g1}, @var{g2} and with transverse scale @var{rval}. Variable @var{flag} is bitwise: @samp{0x1} - draw in accompanied (not laboratory) coordinates; @samp{0x2} - draw projection to @math{\rho-z} plane; @samp{0x4} - draw normalized in each slice field. The x-size of data arrays @var{tr}, @var{g1}, @var{g2} must be nx>2. The y-size of data arrays @var{tr}, @var{g1}, @var{g2} and z-size of the data array @var{a} must be equal. @xref{Surf3}. -@end deffn - - -@c ################################################################## -@node Dual plotting (MGL), Vector fields (MGL), 3D plotting (MGL), MGL interface -@section Dual plotting (MGL) -@cindex surfc -@cindex surf3c -@cindex surfa -@cindex surf3a -@cindex map -@cindex tile -@cindex stfa - -These plotting commands draw @emph{two matrix} simultaneously. There are 5 generally different types of data representations: surface or isosurface colored by other data (SurfC, Surf3C), surface or isosurface transpared by other data (SurfA, Surf3A), tiles with variable size (TileS), mapping diagram (Map), STFA diagram (STFA). Surf3A and Surf3C have variants for automatic and manual selection of level values for isosurfaces. Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. - -String paramter @var{sch} sets the color scheme (@pxref{Color scheme}). Previous color scheme is used by default. Arrays @var{x}, @var{y}, @var{z} can be vectors (not 3d arrays as @var{a}). If array @var{xdat}, @var{ydat}, @var{zdat} is not specified then its an automatic arrays are used with values equidistantly distributed along x, y, z. - -@deffn {MGL command} surfc zdat cdat ['sch'=''] -@deffnx {MGL command} surfc xdat ydat zdat cdat ['sch'=''] -Draws surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} and color it by matrix @var{cdat}[i,j]. See also @code{surf, surfa, surf3c}. @sref{SurfC sample} -@end deffn - -@deffn {MGL command} surf3c adat cdat @code{val} ['sch'=''] -@deffnx {MGL command} surf3c xdat ydat zdat adat cdat @code{val} ['sch'=''] -Draws isosurface plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) at @var{a}(x,y,z)=@var{val}. It is mostly the same as @code{surf3} command but the color of isosurface depends on values of array @var{cdat}. If string contain @samp{#} then wire plot is produced. See also @code{surf3, sur3a, surfc}. @sref{Surf3C sample} -@end deffn - -@deffn {MGL command} surf3c adat cdat ['sch'='' @code{num=5}] -@deffnx {MGL command} surf3c xdat ydat zdat adat cdat ['sch'='' @code{num=5}] -Draws @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d data specified parametrically. -@end deffn - -@deffn {MGL command} surfa zdat cdat ['sch'=''] -@deffnx {MGL command} surfa xdat ydat zdat cdat ['sch'=''] -Draws surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@} and transparent it by matrix @var{cdat}[i,j]. See also @code{surf, surfc, surf3a, tile}. @sref{SurfA sample} -@end deffn - -@deffn {MGL command} surf3a adat cdat @code{val} ['sch'=''] -@deffnx {MGL command} surf3a xdat ydat zdat adat cdat @code{val} ['sch'=''] -Draws isosurface plot for 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) at @var{a}(x,y,z)=@var{val}. It is mostly the same as @code{surf3} command but the transparency of isosurface depends on values of array @var{cdat}. If string contain @samp{#} then wire plot is produced. See also @code{surf3, sur3c, surfa}. @sref{Surf3A sample} -@end deffn - -@deffn {MGL command} surf3a adat cdat ['sch'='' @code{num=5}] -@deffnx {MGL command} surf3a xdat ydat zdat adat cdat ['sch'='' @code{num=5}] -Draws @var{num}-th uniformly distributed in color range (see @code{caxis}) isosurfaces for 3d data specified parametrically. -@end deffn - -@deffn {MGL command} tile zdat rdat ['sch'=''] -@deffnx {MGL command} tile xdat ydat zdat rdat ['sch'=''] -Draws horizontal tiles for surface specified parametrically @{@var{xdat}[i,j], @var{ydat}[i,j], @var{zdat}[i,j]@}. It is mostly the same as @code{tile} but the size of tiles is determined by @var{rdat} array. See also @code{surfa, tile}. @sref{TileS sample} -@end deffn - -@deffn {MGL command} map udat vdat ['sch'='' @code{pnts=on}] -@deffnx {MGL command} map xdat ydat udat vdat ['sch'='' @code{pnts=on}] -Draws mapping plot for matrixes @{@var{udat}, @var{vdat} @} which parametrically depend on coordinates @var{xdat}, @var{ydat}. The previous position of the cell (point) is marked by color. Height is proportional to Jacobian(udat,vdat). This plot is like Arnold diagram ???. If @code{pnts=off} then face is drawn otherwise the color ball at matrix knots are drawn. The size of @var{udat} and @var{vdat} must be the same. @sref{Map sample} -@end deffn - -@deffn {MGL command} stfa re im @code{dn} ['sch'='' @code{pnts=on}] -@deffnx {MGL command} stfa xdat ydat re im @code{dn} ['sch'='' @code{pnts=on}] -Draws spectrogram of complex array @var{re}+i*@code{im} for Fourier size of @var{dn} points at plane @var{z=zVal}. Parameter @var{dn} is arbitrary even integer. For example in 1D case, result is density plot of data @math{res[i,j]=|\sum_d^dn exp(I*j*d)*(re[i*dn+d]+I*im[i*dn+d])|/dn} with size @{int(nx/dn), dn, ny@}. -@end deffn - - - - -@c ################################################################## -@node Vector fields (MGL), Other plotting (MGL), Dual plotting (MGL), MGL interface -@section Vector fields (MGL) -@cindex vectc -@cindex vect -@cindex flow -@cindex pipe -@cindex traj -@cindex dew - -These commands perform plotting of 2D and 3D vector fields. There are 6 generally different types of vector fields representations: simple vector field (Vect), vector field with coloring (VectC), vector field by dew-drops (Dew), flow threads (Flow), flow pipes (Pipe), vectors along a curve (Traj). Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. @xref{Color scheme}. - -The color is specified by the string argument @var{sch}. Previous color scheme is used by default. Parameter @var{flag} setup the hachures (arrows). It is compination of vlaues: @code{MGL_VEC_COL=1} for drawing bi-color arrow, @code{MGL_VEC_LEN=2} for drawing fixed length arrows, @code{MGL_VEC_DOT=16} for drawing hachures with dots instead of arrows, @code{MGL_VEC_END=4} for drawing arrows to the cell point, @code{MGL_VEC_MID=8} for drawing arrows with center at cell point. - -The size of @var{udat}, @var{vdat} and @var{wdat} must be equal. The minor dimensions of arrays @var{xdat}, @var{ydat}, @var{zdat} and @var{udat} must be equal too. Arrays @var{xdat}, @var{ydat} and @var{zdat} can be vectors (not matrices as @var{udat}). The graphics is plotted for each z slice of @var{udat}, @var{vdat} for 2D case. - -@deffn {MGL command} traj xdat ydat udat vdat ['sch'='' @code{zval=nan len=0}] -@deffnx {MGL command} traj xdat ydat zdat udat vdat wdat ['sch'='' @code{len=0}] -Draws vectors @{@var{udat}, @var{vdat}, @var{wdat}@} along a curve @var{xdat}, @var{ydat}, @var{zdat}. The length and color of arrows are proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. See also @code{vect}. @sref{Traj sample} -@end deffn - -@deffn {MGL command} vect udat vdat ['sch'='' @code{zval=nan flag=0}] -@deffnx {MGL command} vect xdat ydat udat vdat ['sch'='' @code{zval=nan flag=0}] -Draws plane vector field plot for the field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. The length and color of arrows are proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of hachures depend on @var{meshnum}. See also @code{vectc, flow, pipe, dew}. @sref{Vect sample} -@end deffn - -@deffn {MGL command} vect udat vdat wdat ['sch'='' @code{flag=0}] -@deffnx {MGL command} vect xdat ydat zdat udat vdat wdat ['sch'='' @code{flag=0}] -This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the length and color of arrows are proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Vect 3D sample} -@end deffn - -@deffn {MGL command} vectc udat vdat ['sch'='' @code{zval=nan}] -@deffnx {MGL command} vectc xdat ydat udat vdat ['sch'='' @code{zval=nan}] -Draws plane vector field plot for the field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. The color of hachures is proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of hachures depend on @var{meshnum}. See also @code{vect, flow, pipe, dew}. @sref{VectC sample} -@end deffn - -@deffn {MGL command} vectc udat vdat wdat ['sch'=''] -@deffnx {MGL command} vectc xdat ydat zdat udat vdat wdat ['sch'=''] -This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the color of hachures is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{VectC 3D sample} -@end deffn - -@deffn {MGL command} vectl udat vdat ['sch'='' @code{zval=nan}] -@deffnx {MGL command} vectl xdat ydat udat vdat ['sch'='' @code{zval=nan}] -Draws plane vector field plot for the field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. The length of hachures is proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of hachures depend on @var{meshnum}. See also @code{vectc, flow, pipe, dew}. @sref{Vect sample} -@end deffn - -@deffn {MGL command} vectl udat vdat wdat ['sch'=''] -@deffnx {MGL command} vectl xdat ydat zdat udat vdat wdat ['sch'=''] -This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the length of hachures is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Vect 3D sample} -@end deffn - -@deffn {MGL command} dew udat vdat ['sch'='' @code{zval=nan}] -@deffnx {MGL command} dew xdat ydat udat vdat ['sch'='' @code{zval=nan}] -Draws dew-drops for plane vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. The color of drops is proportional to @math{\sqrt@{udat^2+vdat^2@}}. The number of drops depend on @var{meshnum}. Note that this is very expensive plot in memory usage and creation time! See also @code{vectc}. @sref{Dew sample} -@end deffn - -@deffn {MGL command} flow udat vdat ['sch'='' @code{num=5 zval=nan}] -@deffnx {MGL command} flow xdat ydat udat vdat ['sch'='' @code{num=5 zval=nan}] -Draws plane flow threads for the vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. Number of threads is proportional to @var{num}. The color of lines is proportional to @math{\sqrt@{udat^2+vdat^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). See also @code{vect, vectc, pipe}. @sref{Flow sample} -@end deffn - -@deffn {MGL command} flow udat vdat wdat ['sch'='' @code{num=3}] -@deffnx {MGL command} flow xdat ydat zdat udat vdat wdat ['sch'='' @code{num=3}] -This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the color is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Flow 3D sample} -@end deffn - -@deffn {MGL command} flow @code{x0 y0} udat vdat ['sch'='' @code{zval=nan}] -@deffnx {MGL command} flow @code{x0 y0} xdat ydat udat vdat ['sch'='' @code{zval=nan}] -Draws plane flow threads for the vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} from point @{@var{x0}, @var{y0}@} at level @var{z=zVal}. The color of lines is proportional to @math{\sqrt@{udat^2+vdat^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). See also @code{vect, vectc, pipe}. @sref{Flow sample} -@end deffn - -@deffn {MGL command} flow @code{x0 y0 z0} udat vdat wdat ['sch'=''] -@deffnx {MGL command} flow @code{x0 y0 z0} xdat ydat zdat udat vdat wdat ['sch'=''] -Draws flow thread from point @{@var{x0}, @var{y0}, @var{z0}@}. Arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the color is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Flow 3D sample} -@end deffn - - -@deffn {MGL command} pipe udat vdat ['sch'='' @code{r0=0.05 num=5 zval=nan}] -@deffnx {MGL command} pipe xdat ydat udat vdat ['sch'='' @code{r0=0.05 num=5 zval=nan}] -Draws plane flow pipes for the vector field @{@var{udat}, @var{vdat}@} depending parametrically on coordinates @var{xdat}, @var{ydat} at level @var{z=zVal}. Number of pipes is proportional to @var{num}. The color of pipes is proportional to @math{\sqrt@{udat^2+vdat^2@}}. Warm color corresponds to normal flow (like attractor). Cold one corresponds to inverse flow (like source). Parameter @var{r0} set the base pipe radius. If @var{r0}<0 then pipe radius is inverse proportional to amplitude. The size of @var{ax} and @var{ay} must be equal. See also @code{vect, vectc, pipe}. @sref{Flow sample} -@end deffn - -@deffn {MGL command} pipe udat vdat wdat ['sch'='' @code{r0=0.05 num=3}] -@deffnx {MGL command} pipe xdat ydat zdat udat vdat wdat ['sch'='' @code{r0=0.05 num=3}] -This is 3D version of the previous command. Here arrays @var{udat}, @var{vdat}, @var{wdat} must be 3-ranged tensors with equal sizes and the color is proportional to @math{\sqrt@{udat^2+vdat^2+wdat^2@}}. @sref{Flow 3D sample} -@end deffn - - -@c ################################################################## -@node Other plotting (MGL), Nonlinear fitting (MGL), Vector fields (MGL), MGL interface -@section Other plotting (MGL) -@cindex cont[xyz] -@cindex dens[xyz] -@cindex contf[xyz] -@cindex dots -@cindex crust -@cindex triplot -@cindex fplot -@cindex fsurf - - -These commands perform miscelaneous plotting. There is unstructured data points plots (Dots), surface reconstruction (Crust), surfaces on the triangular mesh (TriPlot), textual formula plotting (Plots by formula), data plots at edges (Dens[XYZ], Cont[XYZ], ContF[XYZ]), simple plot (SimplePlot). Each type of plotting has similar interface. There are 2 kind of versions which handle the arrays of data and coordinates or only single data array. Parameters of color scheme are specified by the string argument. @xref{Color scheme}. - -@deffn {MGL command} densx dat ['sch'='' @code{val=nan}] -@deffnx {MGL command} densy dat ['sch'='' @code{val=nan}] -@deffnx {MGL command} densz dat ['sch'='' @code{val=nan}] -These plotting commands draw density plot in x, y or z plain. If @var{dat} is a tensor (3-dimensional data) then interpolation to a given @var{val} is performed. These commands are useful for creating projections of the 3D data array to the bounding box. See also @code{cont[xyz], contf[xyz], dens}. @sref{Dens projection sample} -@end deffn - -@deffn {MGL command} contx dat ['sch'='' @code{val=nan num=7}] -@deffnx {MGL command} conty dat ['sch'='' @code{val=nan num=7}] -@deffnx {MGL command} contz dat ['sch'='' @code{val=nan num=7}] -These plotting commands draw contour lines in x, y or z plain. If @var{dat} is a tensor (3-dimensional data) then interpolation to a given @var{val} is performed. These commands are useful for creating projections of the 3D data array to the bounding box. See also @code{dens[xyz], contf[xyz], cont}. @sref{Cont projection sample} -@end deffn - -@deffn {MGL command} contfx dat ['sch'='' @code{val=nan num=7}] -@deffnx {MGL command} contfy dat ['sch'='' @code{val=nan num=7}] -@deffnx {MGL command} contfz dat ['sch'='' @code{val=nan num=7}] -These plotting commands draw solid contours in x, y or z plain. If @var{dat} is a tensor (3-dimensional data) then interpolation to a given @var{val} is performed. These commands are useful for creating projections of the 3D data array to the bounding box. See also @code{dens[xyz], cont[xyz], contf}. -@end deffn - -@deffn {MGL command} dots xdat ydat zdat ['sch'=''] -@deffnx {MGL command} dots xdat ydat zdat adat ['sch'=''] -Draws the arbitrary placed points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. Variable @var{adat}[i] set transparency for dots. See also @code{crust, mark, plot}. @sref{Dots sample} -@end deffn - -@deffn {MGL command} crust xdat ydat zdat ['sch'=''] -Reconstructs and draws the surface for arbitrary placed points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If string contain @samp{#} then wire plot is produced. See also @code{dots, triplot}. @sref{Crust sample} -@end deffn - -@deffn {MGL command} triplot idat xdat ydat ['sch'='' @code{zval=nan}] -@deffnx {MGL command} triplot idat xdat ydat zdat ['sch'=''] -@deffnx {MGL command} triplot idat xdat ydat zdat cdat ['sch'=''] -Draws the surface of triangles. Triangle vertexes are set by indexes @var{idat} of data points @{@var{xdat}[i], @var{ydat}[i], @var{zdat}[i]@}. If string contain @samp{#} then wire plot is produced. First dimensions of @var{idat} must be 3 or greater. See also @code{dots, crust}. Parameter @var{cdat} set the colors of triangles (if @var{idat}.ny=@var{cdat}.nx) or colors of vertexes (if @var{xdat}.nx=@var{cdat}.nx). -@end deffn - -@deffn {MGL command} fplot 'y(x)' ['pen'='' @code{zval=nan num=100}] -Draws command function @samp{y(x)} at plane z=@var{zval} where @samp{x} variable is changed in @code{xrange}. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @code{plot}. -@end deffn - -@deffn {MGL command} fplot 'x(t)' 'y(t)' 'z(t)' ['pen'='' @code{num=100}] -Draws command parametrical curve @{@samp{x(t)}, @samp{y(t)}, @samp{z(t)}@} where @samp{t} variable is changed in range [0, 1]. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @code{plot}. -@end deffn - -@deffn {MGL command} fsurf 'z(x,y)' ['sch'='' @code{num=100}] -Draws command surface for function @samp{z(x,y)} where @samp{x}, @samp{y} variable are changed in @code{xrange, yrange}. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @code{surf}. -@end deffn - -@deffn {MGL command} fsurf 'x(u,v)' 'y(u,v)' 'z(u,v)' ['sch'='' @code{num=100}] -Draws command parametrical surface @{@samp{x(u,v)}, @samp{y(u,v)}, @samp{z(u,v)}@} where @samp{u}, @samp{v} variable are changed in range [0, 1]. You do not need to create the data arrays to plot it. The parameter @var{num} set the minimal number of points along coordinate(s) for plots. See also @code{surf}. -@end deffn - - -@c ################################################################## -@node Nonlinear fitting (MGL), Data create (MGL), Other plotting (MGL), MGL interface -@section Nonlinear fitting (MGL) -@cindex fit -@cindex fits -@cindex putsfit - -These commands fit data to formula. Fitting goal is to find formula parameters for the best fit the data points, i.e. to minimize the sum @math{\sum_i (f(x_i, y_i, z_i) - a_i)^2/s_i^2}. At this, approximation command @samp{f} can depend only on one argument @samp{x} (1D case), on two arguments @samp{x,y} (2D case) and on three arguments @samp{x,y,z} (3D case). The command @samp{f} also may depend on parameters. Normally the list of fitted parameters is specified by @var{var} string (like, @samp{abcd}). Usually user should supply initial values for fitted parameters by @var{ini} variable. But if he/she don't supply it then the zeros are used. - -Commands @code{fit} and @code{fits} do not draw the obtained data themselves. They fill the data @var{out} by formula @samp{f} with found coefficients. At this, the @samp{x,y,z} coordinates are equidistantly distributed in the bounding box. Number of points in @var{out} is selected as maximal value of @var{out} size or 100. Also you may print the last formula with found coefficients by @code{putsfit} command. @sref{Fitting sample} - -The dimensions of arrays must be at least the same as the number of specified arrays @var{xdat}, @var{ydat}, @var{zdat}. Also the fitting only along specified directions will be performed (for example, along x and y if only @var{xdat} and @var{ydat} are specified). If array @var{xdat} is not specified then its an automatic array is used with values equidistantly distributed along x. - - -@deffn {MGL command} fits adat sdat 'func' 'var' [ini=0] -@deffnx {MGL command} fits xdat adat sdat 'func' 'var' [ini=0] -@deffnx {MGL command} fits xdat ydat adat sdat 'func' 'var' [ini=0] -@deffnx {MGL command} fits xdat ydat zdat adat sdat 'func' 'var' [ini=0] -Fit data along x-, y- and z-directions for 1d-,2d- or 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) with weight factor @var{sdat}[i,j,k]. -@end deffn - -@deffn {MGL command} fit adat 'func' 'var' [ini=0] -@deffnx {MGL command} fit xdat adat 'func' 'var' [ini=0] -@deffnx {MGL command} fit xdat ydat adat 'func' 'var' [ini=0] -@deffnx {MGL command} fit xdat ydat zdat adat 'func' 'var' [ini=0] -Fit data along x-, y- and z-directions for 1d-,2d- or 3d array specified parametrically @var{adat}[i,j,k](@var{xdat}[i,j,k], @var{ydat}[i,j,k], @var{zdat}[i,j,k]) with weight factor =1. -@end deffn - -@deffn {MGL command} putsfit @code{x y} ['pre'='' 'fnt'='' @code{size=-1}] -Print last fitted formula with found coefficients (as numbers) at position @{@var{x}, @var{y}@}. The string @var{pre} will be printed before formula. All other parameters are the same as in @ref{Text printing (MGL)}. -@end deffn - - -@c ################################################################## -@node Data create (MGL), Data filling (MGL), Nonlinear fitting (MGL), MGL interface -@section Data create (MGL) -@cindex new -@cindex var -@cindex list -@cindex delete -@cindex copy -@cindex column -@cindex set_id - -@deffn {MGL command} new dat [@code{nx=1 ny=1 nz=1}] -Creates or recreates the array @var{dat} with specified size and fills it by zero. This command does nothing if one of parameters @var{nx}, @var{ny}, @var{nz} is zero or negative. -@end deffn - -@deffn {MGL command} var dat @code{num v1 [v2=nan]} -Creates new variable with name dat for one-dimensional array of size num. Array elements are equidistantly distributed in range [@var{v1}, @var{v2}]. If @var{v2}=@code{nan} then @var{v2=v1} is used. -@end deffn - -@deffn {MGL command} list dat @code{v1 ...} -Creates new variable with name @var{dat} and fills it by numeric values of command arguments @code{v1 ...}. Command can create one-dimensional and two-dimensional arrays with arbitrary values. For creating 2d array the user should use delimiter - which means that the following values lie in next row. Array sizes are [maximal of row sizes * number of rows]. For example, command @code{list 1 | 2 3} creates the array [1 0; 2 3]. Note, that the maximal number of arguments is 1000. -@end deffn - -@deffn {MGL command} list dat d1 ... -Creates new variable with name @var{dat} and fills it by data values of arrays of command arguments @var{d1 ...}. Command can create two-dimensional or three-dimensional (if arrays in arguments are 2d arrays) arrays with arbitrary values. Minor dimensions of all arrays in arguments should be equal to dimensions of first array d1. In the opposite case the argument will be ignored. Note, that the maximal number of arguments is 1000. -@end deffn - -@deffn {MGL command} copy dat1 dat2 ['eq'='' @code{on_axis=on}] -@deffnx {MGL command} copy dat1 @code{val} -Creates new variable with name @var{dat1} and fills it by data values of array @var{dat2}. At this, if parameter @var{eq} is specified then the data will be modified by corresponding formula by the same way as in @code{fill} command (for @code{on_axis=on}) or in @code{modify} command (for @code{on_axis=off}). -@end deffn - -@deffn {MGL command} delete dat -Deletes variable @var{dat} and makes its memory free. Can be useful for huge data arrays. -@end deffn - -@deffn {MGL command} set_id dat 'ids' -Set the symbol id for data columns. The string must contain one symbol 'a'...'z' per column (without spaces). -@end deffn - -@deffn {MGL command} info dat [@code{detail=off}] -Display information (sizes, maximum/minimum, momentums and so on) about the data dat. Show brief information by default (if @code{detail=off}). -@end deffn - -@deffn {MGL command} info 'text' -Display @var{text} as information (warning). -@end deffn - -@c ------------------------------------------------------------------ -@node Data filling (MGL), Rearrange data (MGL), Data create (MGL), MGL interface -@section Data filling (MGL) -@cindex fill -@cindex modify - -@deffn {MGL command} fill dat v1 v2 ['dir'='x'] -Equidistantly fills the data values to range [@var{x1}, @var{x2}] in direction @var{dir}=@{@samp{x},@samp{y},@samp{z}@}. -@end deffn - -@deffn {MGL command} fill dat 'eq' [vdat=0 wdat=0] -Command fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Coordinates @samp{x}, @samp{y}, @samp{z} are supposed to be normalized in @emph{bounding box} (in difference from @code{modify} commands). Variable @samp{u} is the original value of the array. Variables @samp{v} and @samp{w} are values of @var{vdat}, @var{wdat}. -@end deffn - -@deffn {MGL command} modify dat 'eq' [@code{dim=0}] -Command fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. Variable @samp{u} is the original value of the array. Modification will be fulfilled only for slices >=@var{dim}. -@end deffn - -@deffn {MGL command} modify dat 'eq' vdat [wdat=0] -Command fills the value of array according to the formula in string @var{eq}. Formula is an arbitrary expression depending on variables @samp{x}, @samp{y}, @samp{z}, @samp{u}, @samp{v}, @samp{w}. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. Variable @samp{u} is the original value of the array. Variables @samp{v} and @samp{w} are values of @var{vdat}, @var{wdat}. If optional data @var{vdat}, @var{wdat} (must be the same size as @var{dat}) are specified then variables @samp{v} and @samp{w} denote its values else they are zero. -@end deffn - - -@deffn {MGL command} put a @code{val [i=: j=: k=:]} -Function sets value(s) of array a[@var{i}, @var{j}, @var{k}] = @var{val}. Negative indexes @var{i}, @var{j}, @var{k}=@samp{:} set the value @var{val} to whole range in corresponding direction(s). For example, @code{put a val : 0 :} sets a[i,0,j]=@var{val} for i=0...(a.nx-1), j=0...(a.nz-1). -@end deffn - -@deffn {MGL command} put a v [@code{i=: j=: k=:}] -Function copies value(s) from array @var{v} to the range of array @var{a}. Negative indexes @var{i}, @var{j}, @var{k}=@samp{:} set the range in corresponding direction(s). At this minor dimensions of array @var{v} should be large than corresponding dimensions of array @var{a}. For example, @code{put a v : 0 :} sets a[i,0,j]=v.ny>nz ? v[i,j] : v[i], where i=0...(a.nx-1), j=0...(a.nz-1) and condition v.nx>=a.nx is true. -@end deffn - - - -@c ------------------------------------------------------------------ -@node Rearrange data (MGL), File I/O (MGL), Data filling (MGL), MGL interface -@section Rearrange data (MGL) -@cindex rearrange -@cindex extend -@cindex transpose -@cindex squeeze -@cindex crop - -@deffn {MGL command} rearrange dat @code{mx [my=0 mz=0]} -Rearrange dimensions without changing data array so that resulting sizes should be @var{mx}*@var{my}*@var{mz} < nx*ny*nz. If some of parameter @var{my} or @var{mz} are zero then it will be selected to optimal fill of data array. For example, if @var{my}=0 then it will be change to @var{my}=nx*ny*nz/@var{mx} and @var{mz} will be 1. -@end deffn - -@deffn {MGL command} extend dat @code{n1 [n2=0]} -Increase the dimensions of the data by inserting new (|@var{n1}|+1)-th slices after (for @var{n1}>0) or before (for @var{n1}<0) of existed one. It is possible to insert 2 dimensions simultaneously for 1d data by using parameter @var{n2}. Data to new slices is copy from existed one. For example, for @var{n1}>0 new array will be -@iftex -@math{a_{ij}^{new} = a_i^{old}} where j=0...@var{n1}. Correspondingly, for @var{n1}<0 new array will be @math{a_{ij}^{new} = a_j^{old}} where i=0...|@var{n1}|. -@end iftex -@ifnottex -a_ij^new = a_i^old where j=0...@var{n1}. Correspondingly, for @var{n1}<0 new array will be a_ij^new = a_j^old where i=0...|@var{n1}|. -@end ifnottex -@end deffn - -@deffn {MGL command} transpose dat ['dim'='yxz'] -Transposes (shift order of) dimensions of the data. New order of dimensions is specified int string @var{dim}. This command may be useful also for the reading of one-dimensional data. -@end deffn - -@deffn {MGL command} squeeze dat @code{rx [ry=1 rz=1 sm=off]} -Reduces the data size by excluding data elements which indexes are not divisible by @var{rx}, @var{ry}, @var{rz} correspondingly. Parameter @var{sm} set to use smoothing -@iftex -(i.e. @math{a_{out}[i]=\sum_{j=i}^{i+r}a[j]/r}) or not (i.e. @math{a_{out}[i]=a[j*r]}). -@end iftex -@ifnottex -(i.e. out[i]=\sum_@{j=i@}^@{i+r@} a[j]/r) or not (i.e. out[i]=a[j*r]). -@end ifnottex -@end deffn - -@deffn {MGL command} crop dat @code{n1 n2} 'dir' -Cuts off edges of the data @var{i}<@var{n1} and @var{i}>@var{n2} if @var{n2}>0 or @var{i}>@code{n[xyz]}-@var{n2} if @var{n2}<=0 along direction @var{dir}. -@end deffn - -@c ------------------------------------------------------------------ -@node File I/O (MGL), Make another data (MGL), Rearrange data (MGL), MGL interface -@section File I/O (MGL) -@cindex read -@cindex readhdf -@cindex readmat -@cindex readall -@cindex save -@cindex savehdf -@cindex export -@cindex import - -@deffn {MGL command} read dat 'fname' -Reads data from tab-separated text file with auto determining sizes of the data. -@end deffn - -@deffn {MGL command} read dat 'fname' @code{mx [my=1 mz=1]} -Reads data from text file with specified data sizes. This command does nothing if one of parameters @var{mx}, @var{my} or @var{mz} is zero or negative. -@end deffn - -@deffn {MGL command} readmat dat 'fname' [@code{dim=2}] -Read data from text file with size specified at beginning of the file by first @var{dim} numbers. At this, variable @var{dim} set data dimensions. -@end deffn - -@deffn {MGL command} readall dat 'templ' @code{v1 v2 [dv=1 slice=off]} -Join data arrays from several text files. The file names are determined by function call @code{sprintf(fname,templ,val);}, where @var{val} changes from @var{v1} to @var{v2} with step @var{dv}. The data load one-by-one in the same slice if @var{slice}=@code{off} or as slice-by-slice if @var{slice}=@code{on}. -@end deffn - -@deffn {MGL command} readall dat 'templ' @code{[slice=off]} -Join data arrays from several text files which filenames satisfied the template @var{templ} (for example, @var{templ}=@code{"t_*.dat"}). The data load one-by-one in the same slice if @var{slice}=@code{off} or as slice-by-slice if @var{slice}=@code{on}. -@end deffn - -@deffn {MGL command} save dat 'fname' -Saves the whole data array to tab-separated text file. -@end deffn - -@deffn {MGL command} readhdf dat 'fname' 'dname' -Reads data array named @var{dname} from HDF file @var{fname}. -@end deffn -@deffn {MGL command} savehdf dat 'fname' 'dname' -Saves data array named @var{dname} from HDF file @var{fname}. -@end deffn - -@deffn {MGL command} import dat 'fname' 'sch' [@code{v1=0 v2=1}] -Reads data from bitmap file. The RGB values of bitmap pixels are transformed to float values in range [@var{v1}, @var{v2}] using color scheme @var{sch} (@pxref{Color scheme}). -@end deffn - -@deffn {MGL command} export dat 'fname' 'sch' [@code{v1=0 v2=0}] -Saves data matrix to bitmap file. The data values are transformed from range [@var{v1}, @var{v2}] to RGB pixels of bitmap using color scheme @var{sch} (@pxref{Color scheme}). If @var{v1}>=@var{v2} then the values of @var{v1}, @var{v2} are automatically determined as minimal and maximal value of the data array. -@end deffn - -@c ------------------------------------------------------------------ -@node Make another data (MGL), Commands on direction (MGL), File I/O (MGL), MGL interface -@section Make another data (MGL) -@cindex subdata -@cindex hist -@cindex momentum -@cindex sum -@cindex max -@cindex min -@cindex combine -@cindex evaluate -@cindex resize - -@deffn {MGL command} combine res adat bdat -Returns direct multiplication of arrays (like, res[i,j] = adat[i]*bdat[j] and so on). -@end deffn - -@deffn {MGL command} evaluate res dat idat [@code{norm=on}] -@deffnx {MGL command} evaluate res dat idat jdat [@code{norm=on}] -@deffnx {MGL command} evaluate res dat idat jdat kdat [@code{norm=on}] -Get array which values is result of interpolation of original array for coordinates from other arrays. All dimensions must be the same for data @var{idat}, @var{jdat}, @var{kdat}. Coordinates from @var{idat}, @var{jdat}, @var{kdat} are supposed to be normalized in range [0,1] (if @var{norm}=@code{true}) or in range [0,nx], [0,ny], [0,nz] correspondingly. -@end deffn - -@deffn {MGL command} hist res dat @code{num v1 v2 [nsub=0]} -@deffnx {MGL command} hist res dat wdat @code{num v1 v2 [nsub=0]} -Creates @var{num}-th points distribution @var{res} of the data values of @var{dat} in range [@var{v1}, @var{v2}]. Array @var{wdat} specifies weights of the data elements (all weight is 1 if @var{wdat} is not specified). Parameter @var{nsub} define the number of additional interpolated points (for smoothness of histogram). -@end deffn - -@deffn {MGL command} momentum res dat 'how' ['dir'='z'] -Get momentum (1D-array) of the data along direction @var{dir}. String @var{how} contain kind of momentum. The momentum is defined like as -@iftex -@math{res_k = \sum_{ij} how(x_i,y_j,z_k) a_{ij}/\sum_{ij} a_{ij}} -@end iftex @ifnottex -res_k = \sum_ij how(x_i,y_j,z_k) a_ij/ \sum_ij a_ij -@end ifnottex -if @var{var}=@samp{z} and so on. Coordinates @samp{x}, @samp{y}, @samp{z} are data indexes normalized in range [0,1]. -@end deffn - -@deffn {MGL command} sum res dat 'dir' -Gets array which is the result of summation in given direction or direction(s). -@end deffn -@deffn {MGL command} max res dat 'dir' -Gets array which is the maximal data values in given direction or direction(s). -@end deffn -@deffn {MGL command} min res dat 'dir' -Gets array which is the minimal data values in given direction or direction(s). -@end deffn - -@deffn {MGL command} resize res dat @code{mx [my=1 mz=1]} -Makes array @var{res} of sizes @var{mx}, @var{my}, @var{mz} with interpolated data of array @var{dat}. -@end deffn - -@deffn {MGL command} subdata res dat @code{xx [yy=: zz=:]} -Extracts sub-array data @var{res} from the original data @var{dat} array keeping fixed positive index. For example @code{subdata a b : 2} extracts 3d row (indexes are zero based), @code{subdata a b 4 :} extracts 5th column, @code{subdata a b : : 3} extracts 4th slice and so on. Note that symbol @samp{:} is defined @samp{:}=@code{-1} in MGL. -@end deffn - -@deffn {MGL command} trace res dat -Gets array of diagonal elements dat[i,i] (for 2D case) or dat[i,i,i] (for 3D case) where i=0...nx-1. Function return copy of itself for 1D case. Data array must have dimensions ny,nz >= nx or ny,nz = 1. -@end deffn - -@deffn {MGL command} transform dat 'type' real imag -Do integral transformation of complex data @var{real}, @var{imag} on specified direction. Now only Fourier transformation is supported. The order of transformations is specified in string @var{type}: first character for x-dimension, second one for y-dimension, third one for z-dimension. The possible character are: @samp{f} is forward Fourier transformation, @samp{i} is inverse Fourier transformation, @samp{n} or @samp{ } is no transformation. -@end deffn - -@deffn {MGL command} transforma dat 'type' ampl phase -Do integral transformation of complex data @var{ampl}, @var{phase} on specified direction. Now only Fourier transformation is supported. The order of transformations is specified in string @var{type}: first character for x-dimension, second one for y-dimension, third one for z-dimension. The possible character are: @samp{f} is forward Fourier transformation, @samp{i} is inverse Fourier transformation, @samp{n} or @samp{ } is no transformation. -@end deffn - -@deffn {MGL command} stfad res real imag @code{dn} ['dir'='x'] -Short time Fourier analysis for real and imaginary parts. Output is amplitude of partial Fourier of length @var{dn}. For example if @var{dir}=@samp{x}, result will have size @{int(nx/dn), dn, ny@} and it will contain @math{res[i,j,k]=|\sum_d^dn exp(I*j*d)*(real[i*dn+d,k]+I*imag[i*dn+d,k])|/dn}. -@end deffn - -@deffn {MGL command} pde res 'ham' ini_re ini_im [@code{dz=0.1 k0=100}] -Solves equation du/dz = i*k0*@var{ham}(p,q,x,y,z,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators. Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Coordinates of the equation (and the solution) are supposed to be in the bounding box. Note, that really this ranges are increased by factor 3/2 for purpose of reducing reflection from boundaries. Parameter @var{dz} set the step along evolutionary coordinate z. At this moment, simplified form of function @var{ham} is supported -- all ``mixed'' terms (like @samp{x*p}->x*d/dx) are excluded. For example, in 2D case this function is effectively @math{ham = f(p,z) + g(x,z,u)}. However commutable combinations (like @samp{x*q}->x*d/dy) are allowed. Here variable @samp{u} is used for field amplitude |u|. This allow one solve nonlinear problems -- for example, for nonlinear Shrodinger equation you may set @code{ham='p^2+q^2-u^2'}. You may specify imaginary part for wave absorption, like @code{ham = 'p^2+i*x*(x>0)'}, but only if dependence on variable @samp{i} is linear (i.e. @math{ham = hre+i*him}). -@end deffn +@node Top +@top Язык MGL -@deffn {MGL command} ray res 'ham' @code{x0 y0 z0 p0 q0 v0 [dt=0.1 tmax=10]} -Solves GO ray equation like d@emph{r}/dt = d @var{ham}/d@emph{p}, d@emph{p}/dt = -d @var{ham}/d@emph{r}. This is Hamiltonian equations for particle trajectory in 3D case. Here @var{ham} is Hamiltonian which may depend on coordiantes @samp{x}, @samp{y}, @samp{z}, momentums @samp{p}=px, @samp{q}=py, @samp{v}=pz and time @samp{t}: @math{ham = H(x,y,z,p,q,v,t)}. The starting point (at @code{t=0}) is defined by variables @{@var{x0}, @var{y0}, @var{z0}, @var{p0}, @var{q0}, @var{v0}@}. Parameters @var{dt} and @var{tmax} specify the integration step and maximal time for ray tracing. Result is array of @{x,y,z,p,q,v,t@} with dimensions @{7 * int(@var{tmax}/@var{dt}+1) @}. -@end deffn +Это документация для языка MGL (версии @value{VERSION}). Пожалуйста сообщайте о любых ошибках в этом руководстве на @email{mathgl.abalakin@@gmail.org}. Дополнительную информацию о MGL и MathGL можно найти на домашней странице проекта @uref{http://mathgl.sourceforge.net/}. -@deffn {MGL command} qo2d res 'ham' ini_re ini_im ray [@code{r=1 k0=100} xx=0 yy=0] -Solves equation du/dt = i*k0*@var{ham}(p,q,x,y,|u|)[u], where p=-i/k0*d/dx, q=-i/k0*d/dy are pseudo-differential operators (see @code{mglPDE()} for details). Parameters @var{ini_re}, @var{ini_im} specify real and imaginary part of initial field distribution. Parameters @var{ray} set the reference ray, i.e. the ray around which the accompanied coordinate system will be maked. You may use, for example, the array created by @code{mglRay()} function. Note, that the reference ray @strong{must be} smooth enough to make accompanied coodrinates unambiguity. Otherwise errors in the solution may appear. If @var{xx} and @var{yy} are non-zero then Cartesian coordinates for each point will be written into them. @sref{Beam tracing sample} -@end deffn +Copyright @copyright{} 2010 Алексей Балакин. -@deffn {MGL command} jacobian res xdat ydat [zdat=0] -Computates the Jacobian for transformation @{i,j,k@} to @{@var{xdat},@var{ydat},@var{zdat}@} where initial coordinates @{i,j,k@} are data indexes normalized in range [0,1]. The Jacobian is determined by formula det||@math{dr_\alpha/d\xi_\beta}|| where @math{r}=@{@var{xdat},@var{ydat},@var{zdat}@} and @math{\xi}=@{i,j,k@}. All dimensions must be the same for all data arrays. Data must be 3D if all 3 arrays @{@var{xdat},@var{ydat},@var{zdat}@} are specified or 2D if only 2 arrays @{@var{xdat},@var{ydat}@} are specified. -@end deffn +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.2 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with the Front-Cover Texts being ``A GNU Manual,'' +and with the Back-Cover Texts as in (a) below. A copy of the +license is included in the section entitled ``GNU Free Documentation +License.'' +(a) The FSF's Back-Cover Text is: ``You have the freedom to +copy and modify this GNU manual. Buying copies from the FSF +supports it in developing GNU and promoting software freedom.'' +@end quotation - -@c ------------------------------------------------------------------ -@node Commands on direction (MGL), Operators (MGL), Make another data (MGL), MGL interface -@section Commands on direction (MGL) -@cindex cumsum -@cindex integral -@cindex diff -@cindex diff2 -@cindex swap -@cindex mirror -@cindex sew -@cindex smooth -@cindex envelop -@cindex norm -@cindex normsl - -These commands change the data in some direction like differentiations, integrations and so on. The direction in which the change will applied is specified by the string parameter, which may contain @samp{x}, @samp{y} or @samp{z} characters for 1-st, 2-nd and 3-d dimension correspondingly. - -@deffn {MGL command} cumsum dat 'dir' -Cumulative summation of the data in given direction or directions. -@end deffn -@deffn {MGL command} integrate dat 'dir' -Integrates (like cumulative summation) the data in given direction or directions. -@end deffn -@deffn {MGL command} diff dat 'dir' -Differentiates the data in given direction or directions. -@end deffn -@deffn {MGL command} diff dat xdat ydat [zdat=0] -Differentiates the data @var{dat} specified parametrically in direction @var{xdat} with @var{ydat}, @var{zdat}=constant. Parameter @var{zdat} can be omitted that correspond to 2D case. Parametrical differentiation uses the formula (for 2D case): @math{da/dx = (a_j*y_i-a_i*y_j)/(x_j*y_i-x_i*y_j)} where @math{a_i=da/di, a_j=da/dj} denotes usual differentiation along 1st and 2nd dimensions. The similar formula is used for 3D case. Note, that you may change the order of arguments -- for example, if you have 2D data a(i,j) which depend on coordinates @{x(i,j), y(i,j)@} then usual derivative along @samp{x} will be @code{diff a x y} and usual derivative along @samp{y} will be @code{diff a y x}. -@end deffn - -@deffn {MGL command} diff2 dat 'dir' -Double-differentiates (like Laplace operator) the data in given direction. -@end deffn -@deffn {MGL command} swap dat 'dir' -Swaps the left and right part of the data in given direction (useful for Fourier spectrum). -@end deffn -@deffn {MGL command} mirror dat 'dir' -Mirror the left-to-right part of the data in given direction. Looks like change the value index @var{i}->@var{n-i}. -@end deffn - -@deffn {MGL command} sew dat ['dir'='xyz' @code{da=2*pi}] -Remove value steps (like phase jumps after inverse trigonometric commands) with period @var{da} in given direction. -@end deffn -@deffn {MGL command} smooth data @code{type} ['dir'='xyz'] -Smooths the data on specified direction or directions by method @var{Type}. Now 4 methods are supported: @samp{0} does nothing, @samp{1} linear averaging by 3 points, @samp{2} linear averaging by 5 points, @samp{3} quadratic averaging by 5 points. -@end deffn - -@deffn {MGL command} envelop dat ['dir'='x'] -Find envelop for data values along direction @var{dir}. Only one direction can be specified at once. -@end deffn - -@deffn {MGL command} normsl dat @code{v1 v2} ['dir'='z' @code{keep=on sym=off}] -Normalizes data slice-by-slice along direction @var{dir} the data in slices to range [@var{v1},@var{v2}]. If flag @var{sym}=@code{on} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. If @var{keep} is set then maximal value of k-th slice will be limited by -@iftex -@math{\sqrt{\sum a_{ij}(k)/\sum a_{ij}(0)}}. -@end iftex -@ifnottex -@math{\sqrt@{\sum a_ij(k)/\sum a_ij(0)@}}. @end ifnottex -@end deffn - -@deffn {MGL command} norm dat @code{v1 v2 [sym=off dim=0]} -Normalizes the data to range [@var{v1},@var{v2}]. If flag @var{sym}=@code{on} then symmetrical interval [-max(|v1|,|v2|), max(|v1|,|v2|)] is used. Modification will be applied only for slices >=@var{dim}. -@end deffn - -@c ------------------------------------------------------------------ -@node Operators (MGL), Program flow (MGL), Commands on direction (MGL), MGL interface -@section Operators (MGL) -@cindex multo -@cindex addto -@cindex divto -@cindex subto - -@deffn {MGL command} multo dat dat2 -Multiplies the data by the other one for each element. -@end deffn -@deffn {MGL command} divto dat dat2 -Divides the data by the other one for each element. -@end deffn -@deffn {MGL command} addto dat dat2 -Adds the other data. -@end deffn -@deffn {MGL command} subto dat dat2 -Subtracts the other data. -@end deffn -@deffn {MGL command} multo dat @code{val} -Multiplies each element by the number. -@end deffn -@deffn {MGL command} divto dat @code{val} -Divides each element by the number. -@end deffn -@deffn {MGL command} addto dat @code{val} -Adds the number to each element. -@end deffn -@deffn {MGL command} subto dat @code{val} -Subtracts the number to each element. -@end deffn - -@c ------------------------------------------------------------------ -@node Program flow (MGL), Command options (MGL), Operators (MGL), MGL interface -@section Program flow (MGL) -@cindex call -@cindex chdir -@cindex define -@cindex if -@cindex elseif -@cindex else -@cindex endif -@cindex for -@cindex next -@cindex once -@cindex stop - -These commands control program flow, like, conditions, cycles, define script arguments and so on. - -@deffn {MGL command} call 'fname' -Executes script @var{fname}. -@end deffn -@deffn {MGL command} chdir 'path' -Changes the current directory to @var{path}. -@end deffn -@deffn {MGL command} define $N smth -Sets @var{N}-th script argument to @var{smth}. Note, that @var{smth} is used as is (with @samp{'} symbols if present). -@end deffn -@deffn {MGL command} define name smth -Create scalar variable @code{name} which have the numeric value of @code{smth}. Later you can use this variable as usual number. -@end deffn -@deffn {MGL command} if dat 'cond' -Starts block which will be executed if @var{dat} satisfy to @var{cond}. -@end deffn -@deffn {MGL command} if @code{val} -Starts block which will be executed if @code{val} is nonzero. -@end deffn -@deffn {MGL command} elseif dat 'cond' -Starts block which will be executed if previous @code{if} or @code{elseif} is false and @var{dat} satisfy to @var{cond}. -@end deffn -@deffn {MGL command} elseif @code{val} -Starts block which will be executed if previous @code{if} or @code{elseif} is false and @code{val} is nonzero. -@end deffn -@deffn {MGL command} else -Starts block which will be executed if previous @code{if} or @code{elseif} is false. -@end deffn -@deffn {MGL command} endif -Finishes @code{if/elseif/else} block. -@end deffn -@deffn {MGL command} for $N @code{v1 v2 [dv=1]} -Starts cycle with @var{N}-th argument changing from @var{v1} to @var{v2} with the step @var{dv}. -@end deffn -@deffn {MGL command} for $N dat -Starts cycle with @var{N}-th argument changing for @var{dat} values. -@end deffn -@deffn {MGL command} next -Finishes @code{for} cycle. -@end deffn -@deffn {MGL command} once @code{val} -The code between once on and once off will be executed only once. Useful for large data manipulation in programs like UDAV. -@end deffn -@deffn {MGL command} stop -Terminate execution. -@end deffn - -@c ------------------------------------------------------------------ -@node Command options (MGL), Suffixes, Program flow (MGL), MGL interface -@section Command options (MGL) -@cindex alpha -@cindex alphadef -@cindex xrange -@cindex yrange -@cindex zrange -@cindex crange -@cindex cut -@cindex ambient -@cindex fontsize -@cindex marksize -@cindex meshnum -@cindex legend - -Command options allow the easy setup of the plot by changing of global settings only for this plot. Options are specified at the end of string. Each option is separated from the previous text by symbol @samp{;}. Options work so that them remember the current settings, change settings as it being set in the option, execute command and return the original settings back. So, the options usage for data handling commands or for graphics setup commands is useless. - -The most useful options are @code{xrange, yrange, zrange}. They sets the boundaries for data change. This boundaries are used for automatically filled variables. So, these options allow one to change the position of some plots. For example, in command @code{plot y; xrange 0.1 0.9} the x coordinate will be equidistantly distributed in range 0.1 ... 0.9. +@menu +* MGL interface:: +* Examples:: +* Samples:: +* Copying This Manual:: +* Index:: +@end menu -The full list of options are: -@deffn {MGL command} alpha @code{val} -Sets alpha value (transparency) of the plot. The value should be in range [0, 1]. -@end deffn -@deffn {MGL command} alphadef @code{val} -Sets alpha value (transparency) of the plot. The value should be in range [0, 1]. -@end deffn -@deffn {MGL command} ambient @code{val} -Sets brightness of ambient light for the plot. The value should be in range [0, 1]. -@end deffn -@deffn {MGL command} crange @code{val1 val2} -Sets boundaries of color change for the plot. -@end deffn -@deffn {MGL command} xrange @code{val1 val2} -Sets boundaries of x coordinate change for the plot. -@end deffn -@deffn {MGL command} yrange @code{val1 val2} -Sets boundaries of y coordinate change for the plot. -@end deffn -@deffn {MGL command} zrange @code{val1 val2} -Sets boundaries of z coordinate change for the plot. -@end deffn -@deffn {MGL command} cut @code{val} -Sets whether to cut or to project the plot points lying outside the bounding box. -@end deffn -@deffn {MGL command} fontsize @code{val} -Sets the size of text. -@end deffn -@deffn {MGL command} marksize @code{val} -Sets the size of marks. -@end deffn -@deffn {MGL command} meshnum @code{val} -Work like @code{meshnum} command. -@end deffn -@deffn {MGL command} legend 'txt' -Adds string 'txt' to internal legend accumulator. The style of described line and mark is taken from arguments of the plot command. The maximal number of entries is 100. -@end deffn +@rmacro sref {arg} +См. раздел @ref{\arg\}, для примеров кода и графика. +@end rmacro +@macro tdref{nam} +@uref{http://mathgl.sourceforge.net/pdf_u3d/\nam\.pdf, 3D pdf} +@end macro +@macro MGL +@end macro +@set UDAV -@c ------------------------------------------------------------------ -@node Suffixes, Utilities, Command options (MGL), MGL interface -@section Suffixes for variable +@node MGL interface, Examples, , Top +@include mgl_cmd_ru.texi -Suffixes can get some numerical value (like its size, maximal or minimal value, the sum of elements and so on) of the data array in variable and use it later as usual number in command arguments. The suffixes start from point @samp{.} right after (without spaces) variable name or its sub-array. For example, @code{a.nx} give the x-size of data a, @code{b(1).max} give maximal value of second row of variable b, @code{c(:,0).sum} give sum of element in first column of c and so on. +@node Examples, Samples, MGL interface, Top +@include ex_mgl_ru.texi -The full list of suffixes are: -@table @strong -@item nx, ny, nz -Give the data size in x-, y-, z-direction correspondingly. -@item max -Give maximal value of the data. -@item min -Give minimal value of the data. -@item mx, my, mz -Give x-, y-, z-position of data maximum. -@item ax, ay, az, aa -Give x-, y-, z-position of data mass center or average data value. -@item wx, wy, wz, wa -Give width in x-, y-, z-direction or data dispersion value. -@item sx, sy, sz, sa -Give skewness in x-, y-, z-direction or data skewness value. -@item kx, ky, kz, ka -Give kurtosis in x-, y-, z-direction or data kurtosis value. -@item sum -Give sum of data values. -@item a -Give first value of data array. -@item fst -Give first nonzero value of data array. -@item lst -Give last nonzero value of data array. -@end table +@node Samples,Copying This Manual, Examples, Top +@include samples_ru.texi -@c ------------------------------------------------------------------ -@node Utilities, , Suffixes, MGL interface -@section Utilities for parsing MGL +@node Copying This Manual, Index, Samples, Top +@appendix GNU Free Documentation License +@include fdl.texi -MathGL library provides several tools for parsing MGL scripts. There is tools saving it to bitmap (@code{mgl2png}, @code{mgl2gif}) or vectorial (@code{mgl2eps}, @code{mgl2svg}) images. Tool @code{mglview} show MGL script and allow to rotate and setup the image. Also you can translate MGL script to C++ file by help of @code{mgl2cpp} tool. +@node Index, , Copying This Manual, Top +@unnumbered Индекс -All of this tools have similar set of arguments. First argument is name of script file, next argument is optional output file name, last arguments are options. There are options for setting script parameters (it is @code{$0, $1, ... $9}) and locale settings. The script parameters have format @samp{-Nval}. Here N=0,1...9 is parameter ID and val is its value. For example, option @samp{-1test} set to substitute @samp{test} instead of @code{$1} in the script. Option -Lval set locale to val. For example, @samp{-Lutf8} will set UTF-8 locale for script. +@printindex cp -Additionally you can create animated GIF file or a set of JPEG files with names @samp{frameNNNN.jpg} (here @samp{NNNN} is frame index). You should use @code{mgl2gif} tool and specify the values of @code{$0} parameter for making animation. Values of the parameter @code{$0} can be specified inside the script by comment @code{##a val} for each value @code{val} (one comment for one value) or by option(s) @samp{-Aval}. Tool @code{mgl2gif} will execute script several times (once for each specified value of @code{$0}) and save result in animated GIF file. For saving each frame in JPEG just add command @code{write ''} at the end of the script. +@bye diff --git a/texinfo/other_en.texi b/texinfo/other_en.texi new file mode 100644 index 0000000..83f546b --- /dev/null +++ b/texinfo/other_en.texi @@ -0,0 +1,442 @@ + +@c ------------------------------------------------------------------ +@chapter Other classes + +@menu +* mglParse class:: +* mglFormula class:: +* mglFont class:: +* mglColor class:: +* mglPoint class:: +* mglVar class:: +* mglCommand class:: +* mglArg class:: +@end menu + +@c ------------------------------------------------------------------ +@node mglParse class, mglFormula class, , Other classes +@section mglParse class +@cindex mglParse + +Class for parsing and executing MGL script. This class is defined in @code{#include }. + +Class mglParse is the interpreter for MGL scripts (@pxref{MGL interface}). The main function of mglParse class is @code{Parse()}. Exactly this function parses and executes the script string-by-string. Also there are two subservient functions for the finding and creation of a variable. These functions can be useful for displaying values of variables (arrays) in some external program (in window, for example). The variable @var{DataList} contains full list of variables in script. Flag @var{AllowSetSize} allows one to prevent changing the size of the picture inside the script (forbids the MGL command @code{setsize}). + +Note an important feature -- if user defines function @var{func} in variable then it will be called before the destroying of this variable (@pxref{mglVar class}). + +@deftypefn {Method on @code{mglParse} (C++, Python)} @code{} mglParse (@code{bool} setsize=@code{false}) +@deftypefnx {C function} @code{HMPR} mgl_create_parser () +Constructor initializes all values with zero and set @var{AllowSetSize} value. +@end deftypefn + +@deftypefn {Method on @code{mglParse} (C++, Python)} @code{} ~mglParse () +@deftypefnx {C function} @code{void} mgl_delete_parser (@code{HMPR} p) +Destructor delete parser +@end deftypefn + +@deftypefn {Method on @code{mglParse} (C++, Python)} @code{int} Parse (@code{mglGraph *}gr, @code{const char *}str, @code{long} pos=@code{0}) +@deftypefnx {Method on @code{mglParse} (C++)} @code{int} Parse (@code{mglGraph *}gr, @code{const wchar_t *}str, @code{long} pos=@code{0}) +@deftypefnx {C function} @code{int} mgl_parse (@code{HMGL} gr, @code{HMPR} p, @code{const char *}str, @code{int} pos) +@deftypefnx {C function} @code{int} mgl_parsew (@code{HMGL} gr, @code{HMPR} p, @code{const wchar_t *}str, @code{int} pos) +Main function in the class. It parses the string @var{str} and executes it by using @var{gr} as a graphics plotter. Returns the value depending on an error presence in the string @var{str}: 0 -- no error, 1 -- wrong command argument(s), 2 -- unknown command, 3 -- string is too long. Optional argument @var{pos} allows to save the string position in the document (or file) for using @code{for|next} command. +@end deftypefn + +@deftypefn {Method on @code{mglParse} (C++)} @code{int} Export (@code{wchar_t} cpp_out@code{[1024]}, @code{mglGraph *}gr, @code{const wchar_t *}str) +Function parses the string @var{str}, executes it by using @var{gr} as a graphics plotter and exports it to C++ code. Returns the value depending on an error presence in the string @var{str}: 0 -- no error, 1 -- wrong command argument(s), 2 -- unknown command, 3 -- string is too long. Output C++ text will be placed in @var{out} variable. If string @var{str} have options (defined after ';' symbol) then the corresponding C++ texts are placed in variables @var{op1}, @var{op2}. +@end deftypefn + +@deftypefn {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{FILE *}fp, @code{bool} print=@code{false}) +Function parse and execute line-by-line MGL script in file @var{fp}. If @var{print}=@code{true} then all warnings and information will be printed in stdout. Also this function support the @code{for|next} MGL commands. +@end deftypefn +@deftypefn {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{int} num, @code{const wchar_t **}text, @code{void (*} error @code{)(int line, int kind)=NULL}) +Function parse and execute line-by-line MGL script in array @var{text}. If @var{error} is not @code{NULL} then this function will be called for all warnings, information and other messages. Also this function support the @code{for|next} MGL commands. +@end deftypefn + +@deftypefn {Method on @code{mglParse} (C++, Python)} @code{void} Execute (@code{mglGraph *}gr, @code{const char *}text, @code{void (*} error @code{)(int line, int kind)=NULL}) +@deftypefnx {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{const wchar_t *}text, @code{void (*} error @code{)(int line, int kind)=NULL}) +@deftypefnx {C function} @code{void} mgl_parse_text (@code{HMGL} gr, @code{HMPR} p, @code{const char *}text) +@deftypefnx {C function} @code{void} mgl_parsew_text (@code{HMGL} gr, @code{HMPR} p, @code{const wchar_t *}text) +Function parse and execute line-by-line MGL script in string @var{text}. Lines are separated by @samp{\n} symbol as usual. If @var{error} is not @code{NULL} then this function will be called for all warnings, information and other messages. Also this function support the @code{for|next} MGL commands. +@end deftypefn + +@deftypefn {Method on @code{mglParse} (C++, Python)} @code{bool} AddParam (@code{int} n, @code{const char *}str, @code{bool} isstr=@code{true}) +@deftypefnx {Method on @code{mglParse} (C++)} @code{bool} AddParam (@code{int} n, @code{const wchar_t *}str, @code{bool} isstr=@code{true}) +@deftypefnx {C function} @code{void} mgl_add_param (@code{HMPR} p, @code{int} id, @code{const char *}val) +@deftypefnx {C function} @code{void} mgl_add_paramw (@code{HMPR} p, @code{int} id, @code{const wchar_t *}val) +Function set the value of @var{n}-th parameter as string @var{str} (@var{n}=0, 1 ... 9). It return @code{true} for success. +@end deftypefn + +@deftypefn {Method on @code{mglParse} (C++, Python)} @code{mglVar *} FindVar (@code{const char *}name) +@deftypefnx {Method on @code{mglParse} (C++)} @code{mglVar *} FindVar (@code{const wchar_t *}name) +@deftypefnx {C function} @code{const HMDT} mgl_find_var (@code{HMPR} p, @code{const char *}name) +Function returns the pointer to variable with name @var{name} or zero if variable is absent. Use this function to put external data array to the script or get the data from the script. +@end deftypefn +@deftypefn {Method on @code{mglParse} (C++, Python)} @code{mglVar *} AddVar (@code{const char *}name) +@deftypefnx {Method on @code{mglParse} (C++)} @code{mglVar *} AddVar (@code{const wchar_t *}name) +@deftypefnx {C function} @code{const HMDT} mgl_add_var (@code{HMPR} p, @code{const char *}name) +Function returns the pointer to variable with name @var{name}. If variable is absent then new variable is created with name @var{name}. Use this function to put external data array to the script or get the data from the script. +@end deftypefn + +@deftypefn {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{mglVar *}v) +@deftypefnx {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{const char *}name) +@deftypefnx {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{const wchar_t *}name) +Function delete the variable specified by its name or by its pointer. +@end deftypefn + +@deftypefn {Method on @code{mglParse} (C++, Python)} @code{inline void} RestoreOnce () +@deftypefnx {C function} @code{void} mgl_restore_once (@code{HMPR} p) +Restore Once flag. +@end deftypefn + +@deftypefn {Method on @code{mglParse} (Python)} @code{void} AllowSetSize (@code{bool} a) +@deftypefnx {C function} @code{void} mgl_parser_allow_setsize (@code{HMPR} p, @code{int} a) +Allow to parse 'setsize' command or not. +@end deftypefn + +@deftypefn {Method on @code{mglParse} (C++)} @code{void} AddCommand (@code{mglCommand *}cmd, @code{int} num=@code{0}) +Add @var{num} commands @var{cmd} to the defined MGL commands list. Parameter @var{cmd} is array of @code{mglCommand} structures. If parameter @var{num}=0 then it will be determined automatically. At this, array @var{cmd} @strong{must have} last element with @code{name=L""} +@end deftypefn + +@deftypecv {Option} mglParse @code{mglVar *} DataList +List of variables defined in script. +@end deftypecv +@deftypecv {Option} mglParse @code{bool} AllowSetSize +Flag which allows/forbids the command @code{setsize} in scripts. +@end deftypecv +@deftypecv {Option} mglParse @code{bool} Stop +Flag which interrupt script execution. +@end deftypecv +@deftypecv {Option} mglParse @code{mglCommand *} Cmd +Table (array) of recognizable MGL commands (can be changed by user). Items in the table @strong{MUST be sorted} by @var{name} field !!! Last items must have empty name (i.e. @code{L""}). +@end deftypecv +@deftypecv {Option} mglParse @code{wchar_t *} op1 +These strings contain command options and should be placed before the command. These variables are used for MGL->C++ (or other language) conversion. +@end deftypecv +@deftypecv {Option} mglParse @code{wchar_t *} op2 +These strings contain command options and should be placed after the command. These variables are used for MGL->C++ (or other language) conversion. +@end deftypecv + +@c ------------------------------------------------------------------ +@node mglFormula class, mglFont class, mglParse class, Other classes +@section mglFormula class +@cindex mglFormula + +Class for evaluating of formula specified by the string. This class is defined in @code{#include }. + +It is the fast variant of formula evaluation. At creation it will be recognized and compiled to tree-like internal code. At evaluation stage only fast calculations are performed. There is no difference between lower or upper case in formulas. If argument value lie outside the range of function definition then function returns NaN. @xref{Textual formulas}. + +@deftypemethod mglFormula @code{} mglFormula (@code{const char *}str) +Parses the formula @var{str} and creates formula-tree. Constructor recursively parses the formula and creates a tree-like structure containing functions and operators for fast further evaluating by @code{Calc()} or @code{CalcD()} functions. +@end deftypemethod +@deftypemethod mglFormula @code{float} Calc (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}, @code{float} u=@code{0}) +Evaluates the formula for @code{'x','r'}=@var{x}, @code{'y','n'}=@var{y}, @code{'z','t'}=@var{z}, @code{'a','u'}=@var{u}. Error code (if one) can be obtained from function @code{GetError()}. +@end deftypemethod +@deftypemethod mglFormula @code{float} Calc (@code{float} x, @code{float} y, @code{float} z, @code{float} u, @code{float} v, @code{float} w) +Evaluates the formula for @code{'x'}=@var{x}, @code{'y'}=@var{y}, @code{'z'}=@var{z}, @code{'u'}=@var{u}, @code{'v'}=@var{v}, @code{'w'}=@var{w}. Error code (if one) can be obtained from function @code{GetError()}. +@end deftypemethod +@deftypemethod mglFormula @code{float} Calc (@code{float} var@code{['z'-'a'+1]}) +Evaluates the formula for variables in array @var{var}['z'-'a']. Error code (if one) can be obtained from function @code{GetError()}. +@end deftypemethod +@deftypemethod mglFormula @code{float} CalcD (@code{float} var@code{['z'-'a'+1]}, @code{char} diff) +Evaluates the formula derivation respect to @var{diff} for variables in array @var{var}['z'-'a']. Error code (if one) can be obtained from function @code{GetError()}. +@end deftypemethod +@deftypemethod mglFormula @code{int} GetError () +Returns error code: @code{0} means no error; @code{ERR_LOG} means error in logarithm or power functions; @code{ERR_ARC} means error in inverse functions (like asin); @code{ERR_SQRT} means error in sqrt function. +@end deftypemethod + +@c ------------------------------------------------------------------ +@node mglFont class, mglColor class, mglFormula class, Other classes +@section mglFont class +@cindex mglFont + +Class for working with font: load, get metrics, parse and draw strings. This class is defined in @code{#include }. + +The class is based on loading and drawing of vector Hershey font. There are two styles of specifying of the font type and aligning: by integer parameters or by string. + +The string can be any combination of characters: @samp{rbiLCRwou}. The font types are: @samp{r} -- roman font, @samp{i} -- italic style, @samp{b} -- bold style. By default roman font (that is @samp{} or @samp{r}) is used. The align types are: @samp{L} -- align left (default), @samp{C} -- align center, @samp{R} -- align right. Additional font effects are: @samp{w} -- wire, @samp{o} -- over-lined, @samp{u} -- underlined. Parsing of the string to special (TeX-like) commands will be done if variable @var{parse} is true (it's default). See also @pxref{Font styles}. + +The over way of font and alignment setting is the using of the integer constant. Integer font Id can be one of predefined constants: @code{MGL_FONT_ITAL, MGL_FONT_BOLD, MGL_FONT_BOLD_ITAL = MGL_FONT_ITAL+MGL_FONT_BOLD}. Default font is @code{MGL_FONT_ROMAN}. Also there are flags @code{MGL_FONT_ULINE, MGL_FONT_OLINE, MGL_FONT_WIRE} for additional font effects. Align parameter controls the text alignment: 0 -- align left, 1 -- align center, 2 -- align right. + + +@menu +* Format of font files:: +@end menu + + +@deftypemethod mglFont @code{} mglFont (@code{const char *}name=@code{MGL_DEF_FONT_NAME}, @code{const char *}path=@code{NULL}) +Initialize the font and load data from file @var{name} (default name is "STIX" for Linux and MacOS) or if @var{name}=@code{NULL} limited data from memory (default for Windows). +@end deftypemethod +@deftypemethod mglFont @code{bool} Load (@code{const char *} base, @code{const char *}path=@code{NULL}) +Load font from file @var{path}/@var{base} into the memory. The font may contain 4 files: @var{base}.vfm, @var{base}_b.vfm, @var{base}_i.vfm, @var{base}_bi.vfm. Appendix contain detailed description of font format. +@end deftypemethod +@deftypemethod mglFont @code{void} Restore () +Restore default font. +@end deftypemethod +@deftypemethod mglFont @code{void} (@code{mglFont *} fnt) +Copy data from other font instance. +@end deftypemethod +@deftypemethod mglFont @code{void} Clear () +Clear memory by deleting the loaded font. +@end deftypemethod +@deftypemethod mglFont @code{inline unsigned} GetNumGlyph () +Return the number of glyphs in the font. +@end deftypemethod +@deftypemethod mglFont @code{inline bool} Ready () +Return true if font is loaded and ready for use. +@end deftypemethod + + +@deftypemethod mglFont @code{float} Height (@code{int} font) +Gets height of text for font specified by integer constant. +@end deftypemethod +@deftypemethod mglFont @code{float} Puts (@code{const char *}str, @code{int} font=@code{0}, @code{int} align=@code{0}) +Prints 8-bit text string for font specified by integer constant. +@end deftypemethod +@deftypemethod mglFont @code{float} Width (@code{const char *}str, @code{int} font=@code{0}) +Gets width of 8-bit text string for font specified by integer constant. +@end deftypemethod +@deftypemethod mglFont @code{float} Puts (@code{const wchar_t *}str, @code{int} font=@code{0}, @code{int} align=@code{0}) +Prints Unicode text string for font specified by integer constant. +@end deftypemethod +@deftypemethod mglFont @code{float} Width (@code{const wchar_t *}str, @code{int} font=@code{0}) +Gets width of Unicode text string for font specified by integer constant. +@end deftypemethod + + +@deftypemethod mglFont @code{float} Height (@code{const char *}how) +Gets height of text for font specified by string. +@end deftypemethod +@deftypemethod mglFont @code{float} Puts (@code{const char *}str, @code{const char *}how) +Prints 8-bit text string for font specified by string. +@end deftypemethod +@deftypemethod mglFont @code{float} Width (@code{const char *}str, @code{const char *}how) +Gets width of 8-bit text string for font specified by string. +@end deftypemethod +@deftypemethod mglFont @code{float} Puts (@code{const wchar_t *}str, @code{const char *}how) +Prints Unicode text string for font specified by string. +@end deftypemethod +@deftypemethod mglFont @code{float} Width (@code{const wchar_t *}str, @code{const char *}how) +Gets width of Unicode text string for font specified by string. +@end deftypemethod + +@deftypecv {Parameter} mglFont @code{mglGraph *} gr +Instance of mglGraph class which is used for character drawing. +@end deftypecv +@deftypecv {Parameter} mglFont @code{bool} parse +Flag for switching on/off the parsing of TeX commands. Default value is @code{true}. +@end deftypecv + +@c ------------------------------------------------------------------ +@node Format of font files, , , mglFont class +@subsection Format of font files + +Starting from v.1.6 the MathGL library uses new font files. The font is defined in 4 files with suffixes @samp{*.vfm}, @samp{*_b.vfm}, @samp{*_i.vfm}, @samp{*_bi.vfm}. These files are text files containing the data for roman font, bold font, italic font and bold italic font. The files (or some symbols in the files) for bold, italic or bold italic fonts can be absent. In this case the roman glyph will be used for them. By analogy, if the bold italic font is absent but the bold font is present then bold glyph will be used for bold italic. You may create these font files by yourself from *.ttf, *.otf files with the help of program @code{font_tools}. This program can be found at MathGL home site. + +The format of font files (*.vfm -- vector font for MathGL) is the following. +@enumerate +@item +First string contains human readable comment and is always ignored. +@item +Second string contains 3 numbers, delimited by space or tabulation. The order of numbers is the following: @var{numg} -- the number of glyphs in the file (integer), @var{fact} -- the factor for glyph sizing (float), @var{size} -- the size of buffer for glyph description (integer). +@item +After it @var{numg}-th strings with glyphs description are placed. Each string contains 6 positive numbers, delimited by space of tabulation. The order of numbers is the following: Unicode glyph ID, glyph width, number of lines in glyph, position of lines coordinates in the buffer (length is 2*number of lines), number of triangles in glyph, position of triangles coordinates in the buffer (length is 6*number of triangles). +@item +The end of file contains the buffer with point coordinates at lines or triangles vertexes. The size of buffer (the number of integer) is @var{size}. +@end enumerate + +Each font file can be compressed by gzip. + +Note: the closing contour line is done automatically (so the last segment may be absent). For starting new contour use a point with coordinates @code{@{0x3fff, 0x3fff@}}. + + +@c ------------------------------------------------------------------ +@node mglColor class, mglPoint class, mglFont class, Other classes +@section mglColor class +@cindex mglColor + +Structure for working with colors. This structure is defined in @code{#include }. + +There are two ways to set the color in MathGL. First one is using of float values of red, green and blue channels for precise color definition. The second way is the using of character id. There are a set of characters specifying frequently used colors. Normally capital letter gives more dark color than lowercase one. @xref{Line styles}. + +@deftypecv {Parameter} mglVar @code{float} {r, g, b} +Reg, green and blue component of color. +@end deftypecv + +@deftypemethod mglColor @code{} mglColor (@code{float} R, @code{float} G, @code{float} B) +Constructor sets the color by float values of Red, Green and Blue channels. +@end deftypemethod +@deftypemethod mglColor @code{} mglColor (@code{char} c=@code{'k'}) +Constructor sets the color from character id. The black color is used by default. +@end deftypemethod +@deftypemethod mglColor @code{void} Set (@code{float} R, @code{float} G, @code{float} B) +Sets color from values of Red, Green and Blue channels. This values should be in interval [0,1]. +@end deftypemethod +@deftypemethod mglColor @code{void} Set (@code{mglColor} c, @code{float} bright=@code{1}) +Sets color as ``lighted'' version of color @var{c}. +@end deftypemethod +@deftypemethod mglColor @code{void} Set (@code{char} p) +Sets color from symbolic id. +@end deftypemethod +@deftypemethod mglColor @code{bool} Valid () +Checks correctness of the color. +@end deftypemethod +@deftypemethod mglColor @code{float} Norm () +Gets maximal of spectral component. +@end deftypemethod +@deftypemethod mglColor @code{bool} operator== (@code{const mglColor &}c) +Compare with another color +@end deftypemethod + +@deftypefn {Library Function} {inline mglColor} operator+ (@code{const mglColor &}a, @code{const mglColor &}b) +Adds colors by its RGB values. +@end deftypefn +@deftypefn {Library Function} {inline mglColor} operator- (@code{const mglColor &}a, @code{const mglColor &}b) +Subtracts colors by its RGB values. +@end deftypefn +@deftypefn {Library Function} {inline mglColor} operator* (@code{const mglColor &}a, @code{float} b) +Multiplies color by number. +@end deftypefn +@deftypefn {Library Function} {inline mglColor} operator* (@code{float} a, @code{const mglColor &}b) +Multiplies color by number. +@end deftypefn +@deftypefn {Library Function} {inline mglColor} operator/ (@code{const mglColor &}a, @code{float} b) +Divide color by number. +@end deftypefn +@deftypefn {Library Function} {inline mglColor} operator! (@code{const mglColor &}a) +Return inverted color. +@end deftypefn + +@c ------------------------------------------------------------------ +@node mglPoint class, mglArg class, mglColor class, Other classes +@section mglPoint class +@cindex mglPoint + +Structure describes point in space. This structure is defined in @code{#include } + +@deftypecv {Parameter} mglVar @code{float} {x, y, z} +Point coordinates. By default all values are zero. +@end deftypecv + +@deftypefn {Library Function} {inline mglPoint} operator+ (@code{const mglPoint &}a, @code{const mglPoint &}b) +Point of summation (summation of vectors). +@end deftypefn +@deftypefn {Library Function} {inline mglPoint} operator- (@code{const mglPoint &}a, @code{const mglPoint &}b) +Point of difference (difference of vectors). +@end deftypefn +@deftypefn {Library Function} {inline mglPoint} operator* (@code{float} a, @code{const mglPoint &}b) +Multiplies (scale) points by number. +@end deftypefn +@deftypefn {Library Function} {inline mglPoint} operator* (@code{const mglPoint &}a, @code{float} b) +Multiplies (scale) points by number. +@end deftypefn +@deftypefn {Library Function} {inline mglPoint} operator/ (@code{const mglPoint &}a, @code{float} b) +Multiplies (scale) points by number 1/b. +@end deftypefn +@deftypefn {Library Function} {inline float} operator- (@code{const mglPoint &}a, @code{const mglPoint &}b) +Scalar product of vectors. +@end deftypefn +@deftypefn {Library Function} {inline mglPoint} operator^ (@code{const mglPoint &}a, @code{const mglPoint &}b) +Cross-product of vectors. +@end deftypefn +@deftypefn {Library Function} {inline mglPoint} operator& (@code{const mglPoint &}a, @code{const mglPoint &}b) +The part of @var{a} which is perpendicular to vector @var{b}. +@end deftypefn +@deftypefn {Library Function} {inline mglPoint} operator| (@code{const mglPoint &}a, @code{const mglPoint &}b) +The part of @var{a} which is parallel to vector @var{b}. +@end deftypefn + +@deftypefn {Library Function} {inline mglPoint} operator! (@code{const mglPoint &}a) +Return vector perpendicular to vector @var{a}. +@end deftypefn +@deftypefn {Library Function} {inline bool} Norm (@code{const mglPoint &}a) +Return the norm |@var{a}|^2 of vector @var{a}. +@end deftypefn + +@deftypefn {Library Function} {inline bool} operator== (@code{const mglPoint &}a, @code{const mglPoint &}b) +Return true if points are the same. +@end deftypefn +@deftypefn {Library Function} {inline bool} operator!= (@code{const mglPoint &}a, @code{const mglPoint &}b) +Return true if points are different. +@end deftypefn + +@c ------------------------------------------------------------------ +@node mglVar class, mglCommand class, mglArg class, Other classes +@section mglVar class +@cindex mglVar + +Structure describes variable of type @code{mglData} and its name in MGL script. This structure is used by @code{mglParse} and is defined in @code{#include }. + +@deftypecv {Parameter} mglVar @code{mglData} d +Data itself +@end deftypecv +@deftypecv {Parameter} mglVar @code{wchar_t} s[256] +Data name +@end deftypecv +@deftypecv {Parameter} mglVar @code{void *} o +Pointer to external object for function @var{func}. +@end deftypecv +@deftypecv {Parameter} mglVar @code{mglVar *} next +Pointer to next instance in list +@end deftypecv +@deftypecv {Parameter} mglVar @code{mglVar *} prev +Pointer to prev instance in list +@end deftypecv +@deftypecv {Parameter} mglVar @code{bool} temp +Flag for temporar variable. Temporal variables will be destroyed after script execution. +@end deftypecv +@deftypecv {Parameter} mglVar @code{void (*} func @code{)(void *)} +Callback function for destroying non-temporal variable. +@end deftypecv + +@deftypemethod mglVar @code{void} MoveAfter (@code{mglVar *}var) +Move variable after @var{var} and copy @code{func} from @code{var} (if @code{func} is not 0) +@end deftypemethod + + +@c ------------------------------------------------------------------ +@node mglCommand class, , mglVar class, Other classes +@section mglCommand class +@cindex mglCommand + +Structure describes MGL command, its name, short description, executable and export functions. The structure is used by @code{mglParse} and is defined in @code{#include }. + +@deftypecv {Parameter} mglCommand @code{const wchar_t *} name +Name of command. +@end deftypecv +@deftypecv {Parameter} mglCommand @code{const wchar_t *} desc +Short command description (can be NULL). +@end deftypecv +@deftypecv {Parameter} mglCommand @code{const wchar_t *} form +Format of command arguments (can be NULL). +@end deftypecv +@deftypecv {Parameter} mglCommand @code{int (*} exec @code{)(mglGraph *gr, long n, mglArg *a, int k[10])const wchar_t *} +Function for executing (plotting) the command using grapher @var{gr} and having @var{n}-th arguments @var{a}. Function must return 0 if all is OK; or 1 if arguments are wrong. +@end deftypecv +@deftypecv {Parameter} mglCommand @code{void (*} save @code{)(wchar_t out[1024], long n, mglArg *a, int k[10])const wchar_t *} +Function for exporting in C++ (can be NULL). +@end deftypecv + + +@c ------------------------------------------------------------------ +@node mglArg class, mglVar class, mglPoint class, Other classes +@section mglArg class +@cindex mglArg + +Structure describes arguments of functions in the stucture @code{mglCommand}. It is defined in @code{#include }. + +@deftypecv {Parameter} mglArg @code{int} type +Type of argument: 0-data, 1-string, 2-number. +@end deftypecv +@deftypecv {Parameter} mglArg @code{mglData *} d +Pointer to data (used if type=0). +@end deftypecv +@deftypecv {Parameter} mglArg @code{wchar_t} w[2048] +String with parameters (used if type=1 or if type=0 as variable name). +@end deftypecv +@deftypecv {Parameter} mglArg @code{char} s[2048] +String with parameters (used if type=1). +@end deftypecv +@deftypecv {Parameter} mglArg @code{float} v +Numerical value (used if type==2) +@end deftypecv + diff --git a/texinfo/other_ru.texi b/texinfo/other_ru.texi new file mode 100644 index 0000000..83f546b --- /dev/null +++ b/texinfo/other_ru.texi @@ -0,0 +1,442 @@ + +@c ------------------------------------------------------------------ +@chapter Other classes + +@menu +* mglParse class:: +* mglFormula class:: +* mglFont class:: +* mglColor class:: +* mglPoint class:: +* mglVar class:: +* mglCommand class:: +* mglArg class:: +@end menu + +@c ------------------------------------------------------------------ +@node mglParse class, mglFormula class, , Other classes +@section mglParse class +@cindex mglParse + +Class for parsing and executing MGL script. This class is defined in @code{#include }. + +Class mglParse is the interpreter for MGL scripts (@pxref{MGL interface}). The main function of mglParse class is @code{Parse()}. Exactly this function parses and executes the script string-by-string. Also there are two subservient functions for the finding and creation of a variable. These functions can be useful for displaying values of variables (arrays) in some external program (in window, for example). The variable @var{DataList} contains full list of variables in script. Flag @var{AllowSetSize} allows one to prevent changing the size of the picture inside the script (forbids the MGL command @code{setsize}). + +Note an important feature -- if user defines function @var{func} in variable then it will be called before the destroying of this variable (@pxref{mglVar class}). + +@deftypefn {Method on @code{mglParse} (C++, Python)} @code{} mglParse (@code{bool} setsize=@code{false}) +@deftypefnx {C function} @code{HMPR} mgl_create_parser () +Constructor initializes all values with zero and set @var{AllowSetSize} value. +@end deftypefn + +@deftypefn {Method on @code{mglParse} (C++, Python)} @code{} ~mglParse () +@deftypefnx {C function} @code{void} mgl_delete_parser (@code{HMPR} p) +Destructor delete parser +@end deftypefn + +@deftypefn {Method on @code{mglParse} (C++, Python)} @code{int} Parse (@code{mglGraph *}gr, @code{const char *}str, @code{long} pos=@code{0}) +@deftypefnx {Method on @code{mglParse} (C++)} @code{int} Parse (@code{mglGraph *}gr, @code{const wchar_t *}str, @code{long} pos=@code{0}) +@deftypefnx {C function} @code{int} mgl_parse (@code{HMGL} gr, @code{HMPR} p, @code{const char *}str, @code{int} pos) +@deftypefnx {C function} @code{int} mgl_parsew (@code{HMGL} gr, @code{HMPR} p, @code{const wchar_t *}str, @code{int} pos) +Main function in the class. It parses the string @var{str} and executes it by using @var{gr} as a graphics plotter. Returns the value depending on an error presence in the string @var{str}: 0 -- no error, 1 -- wrong command argument(s), 2 -- unknown command, 3 -- string is too long. Optional argument @var{pos} allows to save the string position in the document (or file) for using @code{for|next} command. +@end deftypefn + +@deftypefn {Method on @code{mglParse} (C++)} @code{int} Export (@code{wchar_t} cpp_out@code{[1024]}, @code{mglGraph *}gr, @code{const wchar_t *}str) +Function parses the string @var{str}, executes it by using @var{gr} as a graphics plotter and exports it to C++ code. Returns the value depending on an error presence in the string @var{str}: 0 -- no error, 1 -- wrong command argument(s), 2 -- unknown command, 3 -- string is too long. Output C++ text will be placed in @var{out} variable. If string @var{str} have options (defined after ';' symbol) then the corresponding C++ texts are placed in variables @var{op1}, @var{op2}. +@end deftypefn + +@deftypefn {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{FILE *}fp, @code{bool} print=@code{false}) +Function parse and execute line-by-line MGL script in file @var{fp}. If @var{print}=@code{true} then all warnings and information will be printed in stdout. Also this function support the @code{for|next} MGL commands. +@end deftypefn +@deftypefn {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{int} num, @code{const wchar_t **}text, @code{void (*} error @code{)(int line, int kind)=NULL}) +Function parse and execute line-by-line MGL script in array @var{text}. If @var{error} is not @code{NULL} then this function will be called for all warnings, information and other messages. Also this function support the @code{for|next} MGL commands. +@end deftypefn + +@deftypefn {Method on @code{mglParse} (C++, Python)} @code{void} Execute (@code{mglGraph *}gr, @code{const char *}text, @code{void (*} error @code{)(int line, int kind)=NULL}) +@deftypefnx {Method on @code{mglParse} (C++)} @code{void} Execute (@code{mglGraph *}gr, @code{const wchar_t *}text, @code{void (*} error @code{)(int line, int kind)=NULL}) +@deftypefnx {C function} @code{void} mgl_parse_text (@code{HMGL} gr, @code{HMPR} p, @code{const char *}text) +@deftypefnx {C function} @code{void} mgl_parsew_text (@code{HMGL} gr, @code{HMPR} p, @code{const wchar_t *}text) +Function parse and execute line-by-line MGL script in string @var{text}. Lines are separated by @samp{\n} symbol as usual. If @var{error} is not @code{NULL} then this function will be called for all warnings, information and other messages. Also this function support the @code{for|next} MGL commands. +@end deftypefn + +@deftypefn {Method on @code{mglParse} (C++, Python)} @code{bool} AddParam (@code{int} n, @code{const char *}str, @code{bool} isstr=@code{true}) +@deftypefnx {Method on @code{mglParse} (C++)} @code{bool} AddParam (@code{int} n, @code{const wchar_t *}str, @code{bool} isstr=@code{true}) +@deftypefnx {C function} @code{void} mgl_add_param (@code{HMPR} p, @code{int} id, @code{const char *}val) +@deftypefnx {C function} @code{void} mgl_add_paramw (@code{HMPR} p, @code{int} id, @code{const wchar_t *}val) +Function set the value of @var{n}-th parameter as string @var{str} (@var{n}=0, 1 ... 9). It return @code{true} for success. +@end deftypefn + +@deftypefn {Method on @code{mglParse} (C++, Python)} @code{mglVar *} FindVar (@code{const char *}name) +@deftypefnx {Method on @code{mglParse} (C++)} @code{mglVar *} FindVar (@code{const wchar_t *}name) +@deftypefnx {C function} @code{const HMDT} mgl_find_var (@code{HMPR} p, @code{const char *}name) +Function returns the pointer to variable with name @var{name} or zero if variable is absent. Use this function to put external data array to the script or get the data from the script. +@end deftypefn +@deftypefn {Method on @code{mglParse} (C++, Python)} @code{mglVar *} AddVar (@code{const char *}name) +@deftypefnx {Method on @code{mglParse} (C++)} @code{mglVar *} AddVar (@code{const wchar_t *}name) +@deftypefnx {C function} @code{const HMDT} mgl_add_var (@code{HMPR} p, @code{const char *}name) +Function returns the pointer to variable with name @var{name}. If variable is absent then new variable is created with name @var{name}. Use this function to put external data array to the script or get the data from the script. +@end deftypefn + +@deftypefn {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{mglVar *}v) +@deftypefnx {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{const char *}name) +@deftypefnx {Method on @code{mglParse} (C++)} @code{void} DeleteVar (@code{const wchar_t *}name) +Function delete the variable specified by its name or by its pointer. +@end deftypefn + +@deftypefn {Method on @code{mglParse} (C++, Python)} @code{inline void} RestoreOnce () +@deftypefnx {C function} @code{void} mgl_restore_once (@code{HMPR} p) +Restore Once flag. +@end deftypefn + +@deftypefn {Method on @code{mglParse} (Python)} @code{void} AllowSetSize (@code{bool} a) +@deftypefnx {C function} @code{void} mgl_parser_allow_setsize (@code{HMPR} p, @code{int} a) +Allow to parse 'setsize' command or not. +@end deftypefn + +@deftypefn {Method on @code{mglParse} (C++)} @code{void} AddCommand (@code{mglCommand *}cmd, @code{int} num=@code{0}) +Add @var{num} commands @var{cmd} to the defined MGL commands list. Parameter @var{cmd} is array of @code{mglCommand} structures. If parameter @var{num}=0 then it will be determined automatically. At this, array @var{cmd} @strong{must have} last element with @code{name=L""} +@end deftypefn + +@deftypecv {Option} mglParse @code{mglVar *} DataList +List of variables defined in script. +@end deftypecv +@deftypecv {Option} mglParse @code{bool} AllowSetSize +Flag which allows/forbids the command @code{setsize} in scripts. +@end deftypecv +@deftypecv {Option} mglParse @code{bool} Stop +Flag which interrupt script execution. +@end deftypecv +@deftypecv {Option} mglParse @code{mglCommand *} Cmd +Table (array) of recognizable MGL commands (can be changed by user). Items in the table @strong{MUST be sorted} by @var{name} field !!! Last items must have empty name (i.e. @code{L""}). +@end deftypecv +@deftypecv {Option} mglParse @code{wchar_t *} op1 +These strings contain command options and should be placed before the command. These variables are used for MGL->C++ (or other language) conversion. +@end deftypecv +@deftypecv {Option} mglParse @code{wchar_t *} op2 +These strings contain command options and should be placed after the command. These variables are used for MGL->C++ (or other language) conversion. +@end deftypecv + +@c ------------------------------------------------------------------ +@node mglFormula class, mglFont class, mglParse class, Other classes +@section mglFormula class +@cindex mglFormula + +Class for evaluating of formula specified by the string. This class is defined in @code{#include }. + +It is the fast variant of formula evaluation. At creation it will be recognized and compiled to tree-like internal code. At evaluation stage only fast calculations are performed. There is no difference between lower or upper case in formulas. If argument value lie outside the range of function definition then function returns NaN. @xref{Textual formulas}. + +@deftypemethod mglFormula @code{} mglFormula (@code{const char *}str) +Parses the formula @var{str} and creates formula-tree. Constructor recursively parses the formula and creates a tree-like structure containing functions and operators for fast further evaluating by @code{Calc()} or @code{CalcD()} functions. +@end deftypemethod +@deftypemethod mglFormula @code{float} Calc (@code{float} x, @code{float} y=@code{0}, @code{float} z=@code{0}, @code{float} u=@code{0}) +Evaluates the formula for @code{'x','r'}=@var{x}, @code{'y','n'}=@var{y}, @code{'z','t'}=@var{z}, @code{'a','u'}=@var{u}. Error code (if one) can be obtained from function @code{GetError()}. +@end deftypemethod +@deftypemethod mglFormula @code{float} Calc (@code{float} x, @code{float} y, @code{float} z, @code{float} u, @code{float} v, @code{float} w) +Evaluates the formula for @code{'x'}=@var{x}, @code{'y'}=@var{y}, @code{'z'}=@var{z}, @code{'u'}=@var{u}, @code{'v'}=@var{v}, @code{'w'}=@var{w}. Error code (if one) can be obtained from function @code{GetError()}. +@end deftypemethod +@deftypemethod mglFormula @code{float} Calc (@code{float} var@code{['z'-'a'+1]}) +Evaluates the formula for variables in array @var{var}['z'-'a']. Error code (if one) can be obtained from function @code{GetError()}. +@end deftypemethod +@deftypemethod mglFormula @code{float} CalcD (@code{float} var@code{['z'-'a'+1]}, @code{char} diff) +Evaluates the formula derivation respect to @var{diff} for variables in array @var{var}['z'-'a']. Error code (if one) can be obtained from function @code{GetError()}. +@end deftypemethod +@deftypemethod mglFormula @code{int} GetError () +Returns error code: @code{0} means no error; @code{ERR_LOG} means error in logarithm or power functions; @code{ERR_ARC} means error in inverse functions (like asin); @code{ERR_SQRT} means error in sqrt function. +@end deftypemethod + +@c ------------------------------------------------------------------ +@node mglFont class, mglColor class, mglFormula class, Other classes +@section mglFont class +@cindex mglFont + +Class for working with font: load, get metrics, parse and draw strings. This class is defined in @code{#include }. + +The class is based on loading and drawing of vector Hershey font. There are two styles of specifying of the font type and aligning: by integer parameters or by string. + +The string can be any combination of characters: @samp{rbiLCRwou}. The font types are: @samp{r} -- roman font, @samp{i} -- italic style, @samp{b} -- bold style. By default roman font (that is @samp{} or @samp{r}) is used. The align types are: @samp{L} -- align left (default), @samp{C} -- align center, @samp{R} -- align right. Additional font effects are: @samp{w} -- wire, @samp{o} -- over-lined, @samp{u} -- underlined. Parsing of the string to special (TeX-like) commands will be done if variable @var{parse} is true (it's default). See also @pxref{Font styles}. + +The over way of font and alignment setting is the using of the integer constant. Integer font Id can be one of predefined constants: @code{MGL_FONT_ITAL, MGL_FONT_BOLD, MGL_FONT_BOLD_ITAL = MGL_FONT_ITAL+MGL_FONT_BOLD}. Default font is @code{MGL_FONT_ROMAN}. Also there are flags @code{MGL_FONT_ULINE, MGL_FONT_OLINE, MGL_FONT_WIRE} for additional font effects. Align parameter controls the text alignment: 0 -- align left, 1 -- align center, 2 -- align right. + + +@menu +* Format of font files:: +@end menu + + +@deftypemethod mglFont @code{} mglFont (@code{const char *}name=@code{MGL_DEF_FONT_NAME}, @code{const char *}path=@code{NULL}) +Initialize the font and load data from file @var{name} (default name is "STIX" for Linux and MacOS) or if @var{name}=@code{NULL} limited data from memory (default for Windows). +@end deftypemethod +@deftypemethod mglFont @code{bool} Load (@code{const char *} base, @code{const char *}path=@code{NULL}) +Load font from file @var{path}/@var{base} into the memory. The font may contain 4 files: @var{base}.vfm, @var{base}_b.vfm, @var{base}_i.vfm, @var{base}_bi.vfm. Appendix contain detailed description of font format. +@end deftypemethod +@deftypemethod mglFont @code{void} Restore () +Restore default font. +@end deftypemethod +@deftypemethod mglFont @code{void} (@code{mglFont *} fnt) +Copy data from other font instance. +@end deftypemethod +@deftypemethod mglFont @code{void} Clear () +Clear memory by deleting the loaded font. +@end deftypemethod +@deftypemethod mglFont @code{inline unsigned} GetNumGlyph () +Return the number of glyphs in the font. +@end deftypemethod +@deftypemethod mglFont @code{inline bool} Ready () +Return true if font is loaded and ready for use. +@end deftypemethod + + +@deftypemethod mglFont @code{float} Height (@code{int} font) +Gets height of text for font specified by integer constant. +@end deftypemethod +@deftypemethod mglFont @code{float} Puts (@code{const char *}str, @code{int} font=@code{0}, @code{int} align=@code{0}) +Prints 8-bit text string for font specified by integer constant. +@end deftypemethod +@deftypemethod mglFont @code{float} Width (@code{const char *}str, @code{int} font=@code{0}) +Gets width of 8-bit text string for font specified by integer constant. +@end deftypemethod +@deftypemethod mglFont @code{float} Puts (@code{const wchar_t *}str, @code{int} font=@code{0}, @code{int} align=@code{0}) +Prints Unicode text string for font specified by integer constant. +@end deftypemethod +@deftypemethod mglFont @code{float} Width (@code{const wchar_t *}str, @code{int} font=@code{0}) +Gets width of Unicode text string for font specified by integer constant. +@end deftypemethod + + +@deftypemethod mglFont @code{float} Height (@code{const char *}how) +Gets height of text for font specified by string. +@end deftypemethod +@deftypemethod mglFont @code{float} Puts (@code{const char *}str, @code{const char *}how) +Prints 8-bit text string for font specified by string. +@end deftypemethod +@deftypemethod mglFont @code{float} Width (@code{const char *}str, @code{const char *}how) +Gets width of 8-bit text string for font specified by string. +@end deftypemethod +@deftypemethod mglFont @code{float} Puts (@code{const wchar_t *}str, @code{const char *}how) +Prints Unicode text string for font specified by string. +@end deftypemethod +@deftypemethod mglFont @code{float} Width (@code{const wchar_t *}str, @code{const char *}how) +Gets width of Unicode text string for font specified by string. +@end deftypemethod + +@deftypecv {Parameter} mglFont @code{mglGraph *} gr +Instance of mglGraph class which is used for character drawing. +@end deftypecv +@deftypecv {Parameter} mglFont @code{bool} parse +Flag for switching on/off the parsing of TeX commands. Default value is @code{true}. +@end deftypecv + +@c ------------------------------------------------------------------ +@node Format of font files, , , mglFont class +@subsection Format of font files + +Starting from v.1.6 the MathGL library uses new font files. The font is defined in 4 files with suffixes @samp{*.vfm}, @samp{*_b.vfm}, @samp{*_i.vfm}, @samp{*_bi.vfm}. These files are text files containing the data for roman font, bold font, italic font and bold italic font. The files (or some symbols in the files) for bold, italic or bold italic fonts can be absent. In this case the roman glyph will be used for them. By analogy, if the bold italic font is absent but the bold font is present then bold glyph will be used for bold italic. You may create these font files by yourself from *.ttf, *.otf files with the help of program @code{font_tools}. This program can be found at MathGL home site. + +The format of font files (*.vfm -- vector font for MathGL) is the following. +@enumerate +@item +First string contains human readable comment and is always ignored. +@item +Second string contains 3 numbers, delimited by space or tabulation. The order of numbers is the following: @var{numg} -- the number of glyphs in the file (integer), @var{fact} -- the factor for glyph sizing (float), @var{size} -- the size of buffer for glyph description (integer). +@item +After it @var{numg}-th strings with glyphs description are placed. Each string contains 6 positive numbers, delimited by space of tabulation. The order of numbers is the following: Unicode glyph ID, glyph width, number of lines in glyph, position of lines coordinates in the buffer (length is 2*number of lines), number of triangles in glyph, position of triangles coordinates in the buffer (length is 6*number of triangles). +@item +The end of file contains the buffer with point coordinates at lines or triangles vertexes. The size of buffer (the number of integer) is @var{size}. +@end enumerate + +Each font file can be compressed by gzip. + +Note: the closing contour line is done automatically (so the last segment may be absent). For starting new contour use a point with coordinates @code{@{0x3fff, 0x3fff@}}. + + +@c ------------------------------------------------------------------ +@node mglColor class, mglPoint class, mglFont class, Other classes +@section mglColor class +@cindex mglColor + +Structure for working with colors. This structure is defined in @code{#include }. + +There are two ways to set the color in MathGL. First one is using of float values of red, green and blue channels for precise color definition. The second way is the using of character id. There are a set of characters specifying frequently used colors. Normally capital letter gives more dark color than lowercase one. @xref{Line styles}. + +@deftypecv {Parameter} mglVar @code{float} {r, g, b} +Reg, green and blue component of color. +@end deftypecv + +@deftypemethod mglColor @code{} mglColor (@code{float} R, @code{float} G, @code{float} B) +Constructor sets the color by float values of Red, Green and Blue channels. +@end deftypemethod +@deftypemethod mglColor @code{} mglColor (@code{char} c=@code{'k'}) +Constructor sets the color from character id. The black color is used by default. +@end deftypemethod +@deftypemethod mglColor @code{void} Set (@code{float} R, @code{float} G, @code{float} B) +Sets color from values of Red, Green and Blue channels. This values should be in interval [0,1]. +@end deftypemethod +@deftypemethod mglColor @code{void} Set (@code{mglColor} c, @code{float} bright=@code{1}) +Sets color as ``lighted'' version of color @var{c}. +@end deftypemethod +@deftypemethod mglColor @code{void} Set (@code{char} p) +Sets color from symbolic id. +@end deftypemethod +@deftypemethod mglColor @code{bool} Valid () +Checks correctness of the color. +@end deftypemethod +@deftypemethod mglColor @code{float} Norm () +Gets maximal of spectral component. +@end deftypemethod +@deftypemethod mglColor @code{bool} operator== (@code{const mglColor &}c) +Compare with another color +@end deftypemethod + +@deftypefn {Library Function} {inline mglColor} operator+ (@code{const mglColor &}a, @code{const mglColor &}b) +Adds colors by its RGB values. +@end deftypefn +@deftypefn {Library Function} {inline mglColor} operator- (@code{const mglColor &}a, @code{const mglColor &}b) +Subtracts colors by its RGB values. +@end deftypefn +@deftypefn {Library Function} {inline mglColor} operator* (@code{const mglColor &}a, @code{float} b) +Multiplies color by number. +@end deftypefn +@deftypefn {Library Function} {inline mglColor} operator* (@code{float} a, @code{const mglColor &}b) +Multiplies color by number. +@end deftypefn +@deftypefn {Library Function} {inline mglColor} operator/ (@code{const mglColor &}a, @code{float} b) +Divide color by number. +@end deftypefn +@deftypefn {Library Function} {inline mglColor} operator! (@code{const mglColor &}a) +Return inverted color. +@end deftypefn + +@c ------------------------------------------------------------------ +@node mglPoint class, mglArg class, mglColor class, Other classes +@section mglPoint class +@cindex mglPoint + +Structure describes point in space. This structure is defined in @code{#include } + +@deftypecv {Parameter} mglVar @code{float} {x, y, z} +Point coordinates. By default all values are zero. +@end deftypecv + +@deftypefn {Library Function} {inline mglPoint} operator+ (@code{const mglPoint &}a, @code{const mglPoint &}b) +Point of summation (summation of vectors). +@end deftypefn +@deftypefn {Library Function} {inline mglPoint} operator- (@code{const mglPoint &}a, @code{const mglPoint &}b) +Point of difference (difference of vectors). +@end deftypefn +@deftypefn {Library Function} {inline mglPoint} operator* (@code{float} a, @code{const mglPoint &}b) +Multiplies (scale) points by number. +@end deftypefn +@deftypefn {Library Function} {inline mglPoint} operator* (@code{const mglPoint &}a, @code{float} b) +Multiplies (scale) points by number. +@end deftypefn +@deftypefn {Library Function} {inline mglPoint} operator/ (@code{const mglPoint &}a, @code{float} b) +Multiplies (scale) points by number 1/b. +@end deftypefn +@deftypefn {Library Function} {inline float} operator- (@code{const mglPoint &}a, @code{const mglPoint &}b) +Scalar product of vectors. +@end deftypefn +@deftypefn {Library Function} {inline mglPoint} operator^ (@code{const mglPoint &}a, @code{const mglPoint &}b) +Cross-product of vectors. +@end deftypefn +@deftypefn {Library Function} {inline mglPoint} operator& (@code{const mglPoint &}a, @code{const mglPoint &}b) +The part of @var{a} which is perpendicular to vector @var{b}. +@end deftypefn +@deftypefn {Library Function} {inline mglPoint} operator| (@code{const mglPoint &}a, @code{const mglPoint &}b) +The part of @var{a} which is parallel to vector @var{b}. +@end deftypefn + +@deftypefn {Library Function} {inline mglPoint} operator! (@code{const mglPoint &}a) +Return vector perpendicular to vector @var{a}. +@end deftypefn +@deftypefn {Library Function} {inline bool} Norm (@code{const mglPoint &}a) +Return the norm |@var{a}|^2 of vector @var{a}. +@end deftypefn + +@deftypefn {Library Function} {inline bool} operator== (@code{const mglPoint &}a, @code{const mglPoint &}b) +Return true if points are the same. +@end deftypefn +@deftypefn {Library Function} {inline bool} operator!= (@code{const mglPoint &}a, @code{const mglPoint &}b) +Return true if points are different. +@end deftypefn + +@c ------------------------------------------------------------------ +@node mglVar class, mglCommand class, mglArg class, Other classes +@section mglVar class +@cindex mglVar + +Structure describes variable of type @code{mglData} and its name in MGL script. This structure is used by @code{mglParse} and is defined in @code{#include }. + +@deftypecv {Parameter} mglVar @code{mglData} d +Data itself +@end deftypecv +@deftypecv {Parameter} mglVar @code{wchar_t} s[256] +Data name +@end deftypecv +@deftypecv {Parameter} mglVar @code{void *} o +Pointer to external object for function @var{func}. +@end deftypecv +@deftypecv {Parameter} mglVar @code{mglVar *} next +Pointer to next instance in list +@end deftypecv +@deftypecv {Parameter} mglVar @code{mglVar *} prev +Pointer to prev instance in list +@end deftypecv +@deftypecv {Parameter} mglVar @code{bool} temp +Flag for temporar variable. Temporal variables will be destroyed after script execution. +@end deftypecv +@deftypecv {Parameter} mglVar @code{void (*} func @code{)(void *)} +Callback function for destroying non-temporal variable. +@end deftypecv + +@deftypemethod mglVar @code{void} MoveAfter (@code{mglVar *}var) +Move variable after @var{var} and copy @code{func} from @code{var} (if @code{func} is not 0) +@end deftypemethod + + +@c ------------------------------------------------------------------ +@node mglCommand class, , mglVar class, Other classes +@section mglCommand class +@cindex mglCommand + +Structure describes MGL command, its name, short description, executable and export functions. The structure is used by @code{mglParse} and is defined in @code{#include }. + +@deftypecv {Parameter} mglCommand @code{const wchar_t *} name +Name of command. +@end deftypecv +@deftypecv {Parameter} mglCommand @code{const wchar_t *} desc +Short command description (can be NULL). +@end deftypecv +@deftypecv {Parameter} mglCommand @code{const wchar_t *} form +Format of command arguments (can be NULL). +@end deftypecv +@deftypecv {Parameter} mglCommand @code{int (*} exec @code{)(mglGraph *gr, long n, mglArg *a, int k[10])const wchar_t *} +Function for executing (plotting) the command using grapher @var{gr} and having @var{n}-th arguments @var{a}. Function must return 0 if all is OK; or 1 if arguments are wrong. +@end deftypecv +@deftypecv {Parameter} mglCommand @code{void (*} save @code{)(wchar_t out[1024], long n, mglArg *a, int k[10])const wchar_t *} +Function for exporting in C++ (can be NULL). +@end deftypecv + + +@c ------------------------------------------------------------------ +@node mglArg class, mglVar class, mglPoint class, Other classes +@section mglArg class +@cindex mglArg + +Structure describes arguments of functions in the stucture @code{mglCommand}. It is defined in @code{#include }. + +@deftypecv {Parameter} mglArg @code{int} type +Type of argument: 0-data, 1-string, 2-number. +@end deftypecv +@deftypecv {Parameter} mglArg @code{mglData *} d +Pointer to data (used if type=0). +@end deftypecv +@deftypecv {Parameter} mglArg @code{wchar_t} w[2048] +String with parameters (used if type=1 or if type=0 as variable name). +@end deftypecv +@deftypecv {Parameter} mglArg @code{char} s[2048] +String with parameters (used if type=1). +@end deftypecv +@deftypecv {Parameter} mglArg @code{float} v +Numerical value (used if type==2) +@end deftypecv + diff --git a/texinfo/overview_en.texi b/texinfo/overview_en.texi index 96cc233..feb038e 100644 --- a/texinfo/overview_en.texi +++ b/texinfo/overview_en.texi @@ -1,5 +1,3 @@ - -@node Overview, Examples, , Top @chapter Overview @cindex MathGL overview @@ -62,7 +60,7 @@ All texts are drawn by vector fonts, which allows for high scalability and porta Special mglData class is used for data encapsulation (@pxref{mglData class}). In addition to a safe creation and deletion of data arrays it includes functions for data processing (smoothing, differentiating, integrating, interpolating and so on) and reading of data files with automatic size determination. Class mglData can handle arrays with up to three dimensions (arrays which depend on up to 3 independent indexes @math{a_@{ijk@}}). Using an array with higher number of dimensions is not meaningful, because I do not know how it can be plotted. Data filling and modification may be done manually or by textual formulas. -The mglFormula class allows a fast evaluation of a textual mathematical expression (@pxref{mglFormula class}). It is based on string precompilation to tree-like code at the creation of class instance. At evaluation stage code performs only fast tree-walk and returns the value of the expression. In addition to changing data values, textual formulas are also used for drawing in @emph{arbitrary} curvilinear coordinates. A set of such curvilinear coordinates is limited only by user's imagination rather than a fixed list like: polar, parabolic, spherical, and so on. +The mglFormula class allows a fast evaluation of a textual mathematical expression (@pxref{mglFormula class}). It is based on string precompilation to tree-like code at the creation of class instance. At evaluation stage code performs only fast tree-walk and returns the value of the expression. In addition to changing data values, textual formulas are also used for drawing in @emph{arbitrary} curvilinear coordinates. A set of such curvilinear coordinates is limited only by user’s imagination rather than a fixed list like: polar, parabolic, spherical, and so on. @node Installation and usage, General concepts, MathGL features, Overview @section Installation and usage @@ -72,7 +70,7 @@ MathGL can be installed in 3 different ways. @item Compile from sources. The standard script for autoconf/automake tool is included in the library beginning from version 1.2.1. To run it, one should execute 3 commands: @code{./configure} after it @code{make} and @code{make install} with root/sudo rights. Sometimes after installation you may need to update the library list -- just execute @code{ldconfig} with root/sudo rights. -Script @code{./configure} have several additional options which are switched off by default. They are: @code{--enable-fltk, --enable-glut, --enable-qt} for ebabling FLTK, GLUT and/or Qt windows; @code{--enable-jpeg, --enable-tiff, --enable-hdf5} for enabling corresponding file formats; @code{--enable-all} for enabling all additional features. For enabling language interfaces use @code{--enable-python, --enable-octave} or @code{--enable-langall} for all languages. The full list of options can be viewed by command @code{./configure --help}. +Script @code{./configure} have several additional options which are switched off by default. They are: @code{--enable-fltk, --enable-glut, --enable-qt} for ebabling FLTK, GLUT and/or Qt windows; @code{--enable-jpeg, --enable-tiff, --enable-hdf5} for enabling corresponding file formats; @code{--enable-all} for enabling all additional features. For using @code{double} as base internal data type use option @code{--enable-double}. For enabling language interfaces use @code{--enable-python, --enable-octave} or @code{--enable-langall} for all languages. The full list of options can be viewed by command @code{./configure --help}. @item Use a precompiled binary. There are binaries for MinGW (platform Win32). For a precompiled variant one needs only to unpack the archive to the location of the compiler (or in any other folder and setup paths). By default, precompiled versions include the support of GSL (www.gsl.org) and PNG. So, one needs to have these libraries installed on system. @item @@ -95,7 +93,7 @@ There are six most general (base) concepts: @item @strong{Every plot settings (style of lines, font, color scheme) are specified by a string.} It provides convenience for user/programmer -- short string with parameters is more comprehensible than a large set of parameters. Also it provides portability -- the strings are the same in any OS so that it is not necessary to think about argument types. @item -@strong{All functions have ``simplified'' and ``advanced'' forms.} It is done for user's convenience. One needs to specify only one data array in the ``simplified'' form in order to see the result. But one may set parametric dependence of coordinates and produce rather complex curves and surfaces in the ``advanced'' form. In both cases the order of function arguments is the same: first data arrays, second the string with plot parameters, and later optional arguments for plot tuning. +@strong{All functions have ``simplified'' and ``advanced'' forms.} It is done for user’s convenience. One needs to specify only one data array in the ``simplified'' form in order to see the result. But one may set parametric dependence of coordinates and produce rather complex curves and surfaces in the ``advanced'' form. In both cases the order of function arguments is the same: first data arrays, second the string with plot parameters, and later optional arguments for plot tuning. @item @strong{All data arrays for plotting are encapsulated in mglData class.} This reduces the number of errors while working with memory and provides a uniform interface for data of different types (float, double and so on) or for formula plotting. @item @@ -110,126 +108,11 @@ In addition to the general concepts I want to comment on some non-trivial or les * Coordinate axes:: * Line styles:: * Color scheme:: -* Font style:: +* Font styles:: +* Textual formulas:: @end menu - -@node Coordinate axes, Line styles, , General concepts -@subsection Coordinate axes - -Two axis representations are used in MathGL. The first one consists of normalizing the data point coordinates in a box @var{Min}x@var{Max} (@pxref{Axis settings}). If @var{Cut} is @code{true} then the outlier points are omitted, otherwise they are projected to the bounding box (@pxref{Cutting}). Also, the point will be omitted if it lies inside the box defined by @var{CutMin} x @var{CutMax} or if the value of formula @code{CutOff}() is nonzero for its coordinates. After that, transformation formulas are applied to the data point (@pxref{Curved coordinates}). Finally, the data point is plotted by one of the functions. - -There is a possibility to set members @var{Max}, @var{Min} directly, but one should call @code{RecalcBorder()} function to setup plotting routines. A safer way is to set these values by calling the @code{Axis()} function, which calls @code{RecalcBorder()} automatically. Another way to specify the scaling of the axis is to set it as a minimal or maximal value of the data array. Functions @code{XRange(), YRange(), ZRange()} do it. The second (optional) argument is used to replace the axis range or to join with the existed range. - -The axis origin is defined by the variable @var{Org} and is applied to all consequent calls of axes or grid drawing. By default, if this point lies outside the bounding box then it is projected onto the one (variable @var{AutoOrg} controls it). If one of the values of @var{Org} is equal to NAN then the corresponding value will be selected automatically. - -There is 4-th axis @emph{c} (color axis or colorbar) in addition to the usual axes @emph{x, y, z}. It sets the range of values for the surface coloring. Its borders are automatically set to values of Min.z, Max.z during the call of @code{Axis()} function. Also, one can directly change the color range by setting variables @var{Cmax}, @var{Cmax}, or calling functions @code{CAxis()} or @code{CRange()}. Use @code{Colorbar()} function for showing the colorbar. - -The form (appearence) of tick labels is controlled by @code{SetTicks()} function (@pxref{Ticks}). It has 3 arguments: first one @var{d} sets the tick step (if positive) or tick number (if negative) or switches logarithmic ticks on (if zero); the second one, @var{ns}, sets the number of subticks; the last one is the starting point for ticks (default is axis origin). Function @var{SetTuneTicks} switches on/off tick enhancing by factoring out acommon multiplier (for small coordinate values, like 0.001 to 0.002, or large, like from 1000 to 2000) or common component (for narrow range, like from 0.999 to 1.000). Finally, you may use functions @code{SetXTT(), SetYTT(), SetZTT(), SetCTT()} for setting templates for tick labels (it supports TeX symbols). Also, there is a possibility to print arbitrary text as tick labels the by help of @code{SetTicksVal()} function. - -@node Line styles, Color scheme, Coordinate axes, General concepts -@subsection Line styles - -@cindex Line style -@cindex Mark style -@cindex Arrows - -The line style is defined by the string which may contain specifications for color (@samp{wkrgbcymhRGBCYMHWlenupqLENUPQ}), dashing style (@samp{-|;:ji} or space), width (@samp{0123456789}) and marks (@samp{o+xsd.^v} and @samp{#} modifier). If one of the type of information is omitted then default values used with the previous color are adopted. - -The color types are the same as described in mglColor class (@pxref{mglColor class}): @samp{k} -- black, @samp{r} -- red, @samp{R} -- dark red, @samp{g} -- green, @samp{G} -- dark green, @samp{b} -- blue, @samp{B} -- dark blue, @samp{c} -- cyan, @samp{C} -- dark cyan, @samp{m} -- magenta, @samp{M} -- dark magenta, @samp{y} -- yellow, @samp{Y} -- dark yellow (gold), @samp{h} -- gray, @samp{H} -- dark gray, @samp{w} -- white, @samp{W} -- bright gray, @samp{l} -- green-blue, @samp{L} -- dark green-blue, @samp{e} -- green-yellow, @samp{E} -- dark green-yellow, @samp{n} -- sky-blue, @samp{N} -- dark sky-blue, @samp{u} -- blue-violet, @samp{U} -- dark blue-violet, @samp{p} -- purple, @samp{P} -- dark purple, @samp{q} -- orange, @samp{Q} -- dark orange (brown). - -Dashing style has the following meaning: space -- no line (usable for plotting only marks), @samp{-} -- solid line (################), @samp{|} -- dashed line (########________), @samp{;} -- small dashed line (####____####____), @samp{:} -- dotted line (#___#___#___#___), @samp{j} -- dash-dotted line (#######____#____), @samp{i} -- small dash-dotted line (###__#__###__#__). - -Marker types are: @samp{o} -- circle, @samp{+} -- cross, @samp{x} -- skew cross, @samp{s} - square, @samp{d} - rhomb (or diamond), @samp{.} -- point, @samp{^} -- triangle up, @samp{v} -- triangle down. If string contain symbol @samp{#} then the solid versions of markers are used. - -@float -@image{png/sample5, 7cm} -@caption{Styles of lines and marks.} -@end float - -One may specify to draw a special symbol (an arrow) at the beginning and at the end of line. This is done if the specification string contains one of the following symbols: @samp{A} -- outer arrow, @samp{V} -- inner arrow, @samp{I} -- transverse hatches, @samp{K} -- arrow with hatches, @samp{T} -- triangle, @samp{S} -- square, @samp{D} -- rhombus, @samp{O} -- circle, @samp{_} -- nothing (the default). The following rule applies: the first symbol specifies the arrow at the end of line, the second specifies the arrow at the beginning of the line. For example, @samp{r-A} defines a red solid line with usual arrow at the end, @samp{b|AI} defines a blue dash line with an arrow at the end and with hatches at the beginning, @samp{_O} defines a line with the current style and with a circle at the beginning. These styles are applicable during the graphics plotting as well (for example, @ref{Plot}). - -@float -@image{png/sampled, 7cm} -@caption{Arrow styles.} -@end float - -@node Color scheme, Font style, Line styles, General concepts -@subsection Color scheme - -@cindex Color scheme - -The color scheme is used for determining the color of surfaces, isolines, isosurfaces and so on. The color scheme is defined by the string, which may contain several characters that are color id (@pxref{mglColor class} or @pxref{Line styles}) or characters @samp{d#:|}. Symbol @samp{d} denotes the interpolation by 3d position instead of the coloring by amplitude. Symbol @samp{#} switches to mesh drawing or to a wire plot. Symbol @samp{|} disables color interpolation in color scheme, which can be useful, for example, for sharp colors during matrix plotting. Symbol @samp{:} finishes the color scheme parsing. Following it, the user may put styles for the text, rotation axis for curves/isocontours, and so on. Color scheme may contain up to 32 color values. - -You may also use ``lighted'' colors in the color scheme specification (@emph{not in line style!}). The ``lighted'' color contain 2 symbols: first one is the usual symbol for color specification, the second one is a digit for its brightness. The digit can be in range @samp{1}...@samp{9}. -Number @samp{5} corresponds to a normal color, @samp{1} is a very dark version of the color (practically black), and @samp{9} is a very bright version of the color (practically white). For example, the color scheme can be @samp{b2b7wr7r2}. - -@float -@image{png/colors, 7cm} -@caption{Colors and its ids.} -@end float - -For coloring by @emph{amplitude} (most common) the final color is a linear interpolation of color array. The color array is constructed from the string ids. The argument is the amplitude normalized between @var{Cmin} -- @var{Cmax} (@pxref{Ranges (bounding box)}). For example, string containing 4 characters @samp{bcyr} corresponds to a colorbar from blue (lowest value) through cyan (next value) through yellow (next value) to the red (highest value). String @samp{kw} corresponds to a colorbar from black (lowest value) to white (highest value). String @samp{m} corresponds to a simple magenta color. - -There are several useful combinations. String @samp{kw} corresponds to the simplest gray color scheme where higher values are brighter. String @samp{wk} presents the inverse gray color scheme where higher value is darker. Strings @samp{kRryw}, @samp{kGgw}, @samp{kBbcw} present the well-known @emph{hot}, @emph{summer} and @emph{winter} color schemes. Strings @samp{BbwrR} and @samp{bBkRr} allow to view bi-color figure on white or black background, where negative values are blue and positive values are red. String @samp{BbcyrR} gives a color scheme similar to the well-known @emph{jet} color scheme. - -Examples of the most popular color schemes: -@table @samp -@item kw -@image{png_static/kw} -@item wk -@image{png_static/wk} -@item hHCcw -@image{png_static/kHCcw} - -@item kRryw -@image{png_static/kRryw} -@item kGgew -@image{png_static/kGgew} -@item kBbcw -@image{png_static/kBbcw} - -@item BbwrR -@image{png_static/BbwrR} -@item BbwgG -@image{png_static/BbwgG} -@item GgwmM -@image{png_static/GgwmM} - -@item bcwyr -@image{png_static/bcwyr} -@item QqwcC -@image{png_static/QqwcC} -@item CcwyY -@image{png_static/CcwyY} - -@item BbcyrR -@image{png_static/BbcyrR} -@item BbcwyrR -@image{png_static/BbcwyrR} -@item bwr -@image{png_static/bwr} - -@item bcyr -@image{png_static/bcyr} -@item bgr -@image{png_static/bgr} -@item BbcyrR| -@image{png_static/sharp} -@end table - -When coloring by @emph{coordinate}, the final color is determined by the position of the point in 3d space and is calculated from formula c=x*c[1] + y*c[2] + z*c[3]. Here, c[1], c[2], c[3] are the first three elements of color array; x, y, z are normalized to @var{Min} -- @var{Max} coordinates of the point. This type of coloring is useful for isosurface plot where color may show the exact position of a piece of surface. For example, @pxref{Surf3}. - -@node Font style, , Color scheme, General concepts -@subsection Font style - -@cindex Font style - -Text style is specified by the string which may contain several characters of font (@samp{ribwou}) and/or alignment (@samp{LRC}) specifications. The string also may contain the color id characters @samp{wkrgbcymhRGBCYMHW} (@pxref{mglColor class}) after the symbol @samp{:}. For example, @samp{biC:b} sets the bold italic font text aligned at the center and with blue color. - -The font types are: @samp{r} -- roman font, @samp{i} -- italic style, @samp{b} -- bold style. By default roman roman font is used. The align types are: @samp{L} -- align left (default), @samp{C} -- align center, @samp{R} -- align right. Additional font effects are: @samp{w} -- wired, @samp{o} -- over-lined, @samp{u} -- underlined. Also a parsing of the LaTeX-like syntax is provided (for detail, @pxref{mglFont class} and @ref{Font settings}). - -The font size can be defined explicitly (if @var{size}>0) or relative to a base font size as |@var{size}|*@var{FontSize} (if @var{size}<0). The value @var{size}=0 specifies that the string will not be printed. The base font size is measured in internal ``MathGL'' units. Special functions @code{SetFontSizePT(), SetFontSizeCM(), SetFontSizeIN()} allow one to set it in more ``common'' variables for a given dpi value of the picture. +@include concept_en.texi @node FAQ, Interfaces, General concepts, Overview @section FAQ @@ -245,7 +128,7 @@ Most ``new'' types of plots can be created by using the existing drawing functio No. The MathGL library is self-contained and does not require the knowledge of external libraries. @item In which language is the library written? For which languages does it have an interface? -The core of the MathGL library is written in C++. But there are interfaces for: pure C, Fortran, Pascal, Forth, and its own command language MGL. Also there is a large set of interpreted languages, which are supported (Python, Java, ALLEGROCL, CHICKEN, Lisp, CFFI, C#, Guile, Lua, Modula 3, Mzscheme, Ocaml, Octave, Perl, PHP, Pike, R, Ruby, Tcl). These interfaces are written using SWIG (both pure C functions and classes) but only the interface for Python and Octave is included in the autoconf/automake script. The reason is that I don't know any other interpreted languages :(. Note that most other languages can use (link to) the pure C functions. +The core of the MathGL library is written in C++. But there are interfaces for: pure C, Fortran, Pascal, Forth, and its own command language MGL. Also there is a large set of interpreted languages, which are supported (Python, Java, ALLEGROCL, CHICKEN, Lisp, CFFI, C#, Guile, Lua, Modula 3, Mzscheme, Ocaml, Octave, Perl, PHP, Pike, R, Ruby, Tcl). These interfaces are written using SWIG (both pure C functions and classes) but only the interface for Python and Octave is included in the autoconf/automake script. The reason is that I don’t know any other interpreted languages :(. Note that most other languages can use (link to) the pure C functions. @item How can I use MathGL with Fortran? You can use MathGL as is with @code{gfortran} because it uses by default the AT&T notation for external functions. For other compilers (like Visual Fortran) you have to switch on the AT&T notation manually. The AT&T notation requires that the symbol @samp{_} is added at the end of each function name, function argument(s) is passed by pointers and the string length(s) is passed at the end of the argument list. For example: @@ -278,6 +161,45 @@ In version 1.10, you can use the header file @code{#include } which @c @strong{Finally!} Please @emph{do not} ask me Windows-specific questions. I do not use Windows. I know nothing about Visual Basic, Visual C++, CBuiled or .NET. Please find the appropriate Usenet discussion group and ask your question there. +@item How I can build MathGL under Windows? +The simplest way is using the combination CMake+MinGW. Also you need some extra libraries like GSL, PNG, JPEG and so on. All of them can be found at @url{http://gnuwin32.sourceforge.net/packages.html}. After installing all components, just run CMake configurator and make the MathGL itself. + +@item How I can create FLTK/GLUT/Qt window in parallel with calculation? +You should create a separate thread for processing window messages. The cross-platform way is using the @code{pthread} library. You can update the data by calling @code{mglGraphFLTK::Update()} function. The code can look like this: +@verbatim +//----------------------------------------------------------------------------- +#include +#include +#include + +mglPoint pnt; // some global variable for changable data +//----------------------------------------------------------------------------- +int sample(mglGraph *gr, void *) +{ + gr->Box(); gr->Line(mglPoint(),pnt,"Ar2"); // just draw a vector + return 0; +} +//----------------------------------------------------------------------------- +void *mgl_fltk_tmp(void *) { mglFlRun(); return 0; } +int main (int argc, char ** argv) +{ + mglGraphFLTK gr; + gr.Window(argc,argv,sample,"test"); // create window + static pthread_t tmp; + pthread_create(&tmp, 0, mgl_fltk_tmp, 0); + pthread_detach(tmp); // run window handling in the separate thread + for(int i=0;i<10;i++) // do calculation + { + sleep(1); // which can be very long + pnt = mglPoint(2*mgl_rnd()-1,2*mgl_rnd()-1); + gr.Update(); // update window + } + return 0; // finish calculations and close the window +} +//----------------------------------------------------------------------------- +@end verbatim + + @item How many people write this library? Most of the library was written by one person. This is a result of nearly a year of work (mostly in the evening and on holidays): I spent half a year to write the kernel and half a year to a year on extending, improving the library and writing documentation. This process continues now :). The autoconf/automake script was written mostly by D.Kulagin, and the export to IDTF was written mostly by M.Vidassov. @@ -285,7 +207,7 @@ Most of the library was written by one person. This is a result of nearly a year You can import data into a @code{mglData} instance and display it by @code{Dens()} function. For example, for black-and-white bitmap you can use the code: @code{mglData bmp; bmp.Import("fname.png","wk"); gr->Dens(bmp,"wk");}. @item How can I use MathGL in Qt, FLTK, wxWidgets etc.? -There are special classes (widgets) for these libraries: QMathGL for Qt, Fl_MathGL for FLTK and so on. If you don't find the appropriate class then you can create your own widget that displays a bitmap using mglGraphAB::GetBits(). +There are special classes (widgets) for these libraries: QMathGL for Qt, Fl_MathGL for FLTK and so on. If you don’t find the appropriate class then you can create your own widget that displays a bitmap using mglGraphAB::GetBits(). @item How can I create U3D file (make 3D in PDF)? There are 2 steps: first you should create IDTF file, and later convert it to U3D. You can use @uref{http://sourceforge.net/project/showfiles.php?group_id=152187&package_id=300628, U3D tools} for converting IDTF file to U3D. It needs @uref{http://libharu.org, libharu} 2.1.0 or later. For installation use @code{./bootstrap, ./configure, make, sudo make install}. It provides IDTFConverter program for converting text files *.idtf to binary files *.u3d. The latter can be included into PDF. @@ -328,7 +250,7 @@ All C functions are described in the header file @code{#include } a @end itemize These variables contain identifiers for graphics drawing objects and for the data objects. -Fortran functions/subroutines have the same names as C functions. However, there is a difference. Variable of type @code{HMGL, HMDT} must be an integer with sufficient size (@code{integer*4} in the 32-bit operating system or @code{integer*8} in the 64-bit operating system). All C functions are subroutines in Fortran, which are called by operator @code{call}. The exceptions are functions, which return variables of types @code{HMGL} or @code{HMDT}. These functions should be declared as integer in Fortran code. Also, one should keep in mind that strings in Fortran are denoted by @code{'} symbol, not the @code{"} symbol. +Fortran functions/subroutines have the same names as C functions. However, there is a difference. Variable of type @code{HMGL, HMDT} must be an integer with sufficient size (@code{integer*4} in the 32-bit operating system or @code{integer*8} in the 64-bit operating system). All C functions are subroutines in Fortran, which are called by operator @code{call}. The exceptions are functions, which return variables of types @code{HMGL} or @code{HMDT}. These functions should be declared as integer in Fortran code. Also, one should keep in mind that strings in Fortran are denoted by @code{’} symbol, not the @code{"} symbol. @strong{Create and delete objects} @@ -407,21 +329,21 @@ Delete the instance of a class. Must be used after the use of every created data @node Python interface, , C interface, Interfaces @subsection Python interface -MathGL provides the interface to a set of languages via SWIG library. Some of these languages support classes. The typical example is Python -- which is named in this chapter's title. +MathGL provides the interface to a set of languages via SWIG library. Some of these languages support classes. The typical example is Python -- which is named in this chapter’s title. To use Python classes just execute @samp{import mathgl}. The simplest example will be: @verbatim import mathgl a=mathgl.mglGraph() a.Box() -a.WritePNG('test.png') +a.WritePNG(’test.png’) @end verbatim Alternatively you can import all classes from @code{mathgl} module and easily access MathGL classes like this: @verbatim from mathgl import * a=mglGraph() a.Box() -a.WritePNG('test.png') +a.WritePNG(’test.png’) @end verbatim This becomes useful if you create many @code{mglData} objects, for example. @@ -438,14 +360,14 @@ To use Python classes just execute @samp{import mathgl}. The simplest example wi import mathgl a=mathgl.mglGraph() a.Box() -a.WritePNG('test.png') +a.WritePNG(’test.png’) @end verbatim Alternatively, you can import all the classes from @code{mathgl} module and easily access MathGL classes: @verbatim from mathgl import * a=mglGraph() a.Box() -a.WritePNG('test.png') +a.WritePNG(’test.png’) @end verbatim This is useful if you create many @code{mglData} objects, for example. @@ -481,11 +403,11 @@ Create the instance of class mglGraph with specified sizes @var{width} and @var{ @item My special thanks to Marina Balakina for the patience during the writing of this library and for the help in documentation writing and spelling. @item -I'm thankful to D. Kulagin and S.M. Plis for making Debian packages. +I’m thankful to D. Kulagin and S.M. Plis for making Debian packages. @item -I'm thankful to M. Vidassov for the help in handling solid UTF-8 fonts. +I’m thankful to M. Vidassov for the help in handling solid UTF-8 fonts. @item -I'm thankful to N. Troickiy and V. Lipatov for making RPM packages. +I’m thankful to N. Troickiy and V. Lipatov for making RPM packages. @item -I'm thankful to S. Skobelev, A. Korotkevich, V. Onuchin, S.M. Plis, R. Kiselev, A. Ivanov, M. Vidiassov and V. Lipatov for fruitful comments. +I’m thankful to S. Skobelev, A. Korotkevich, V. Onuchin, S.M. Plis, R. Kiselev, A. Ivanov, M. Vidiassov and V. Lipatov for fruitful comments. @end itemize diff --git a/texinfo/overview_ru.texi b/texinfo/overview_ru.texi index 52bd561..7e6277b 100644 --- a/texinfo/overview_ru.texi +++ b/texinfo/overview_ru.texi @@ -1,5 +1,4 @@ -@node Overview, Examples, , Top @chapter Обзор MathGL @cindex Обзор MathGL @@ -72,7 +71,7 @@ MathGL это ... @item Скомпилировать библиотеку непосредственно из исходных файлов. С библиотекой поставляется стандартный скрипт для autoconf/automake. Для его запуска достаточно в командной строке выполнить 3 команды: сначала @code{./configure} далее @code{make} и, наконец, с правами суперпользователя @code{make install}. Иногда после компиляции библиотеки может потребоваться обновление списка библиотека в системе -- выполните команду @code{ldconfig} с правами суперпользователя. -Скрипт @code{./configure} имеет несколько дополнительных опций, которые по умолчанию отключены. К их числу относятся: @code{--enable-fltk, --enable-glut, --enable-qt} для поддержки FLTK, GLUT и/или Qt окон; @code{--enable-jpeg, --enable-tiff, --enable-hdf5} для поддержки соответствующих форматов; @code{--enable-all} для включения всех возможностей. Для создания интерфейсов к другим языкам (кроме С/Фортран/MGL) используйте опции @code{--enable-python, --enable-octave} или @code{--enable-langall} для всех поддерживаемых языков. Полный список опций можно увидеть, выполнив @code{./configure --help}. +Скрипт @code{./configure} имеет несколько дополнительных опций, которые по умолчанию отключены. К их числу относятся: @code{--enable-fltk, --enable-glut, --enable-qt} для поддержки FLTK, GLUT и/или Qt окон; @code{--enable-jpeg, --enable-tiff, --enable-hdf5} для поддержки соответствующих форматов; @code{--enable-all} для включения всех возможностей. Для использования типа @code{double} для внутреннего хранения данных используйте опцию @code{--enable-double}. Для создания интерфейсов к другим языкам (кроме С/Фортран/MGL) используйте опции @code{--enable-python, --enable-octave} или @code{--enable-langall} для всех поддерживаемых языков. Полный список опций можно увидеть, выполнив @code{./configure --help}. @item Использовать предварительно скомпилированные файлы -- с библиотекой поставляются файлы для MinGW (платформа Win32). В скомпилированной версии достаточно распаковать заголовочные файлы в папку с заголовочными файлами и библиотеку libmgl.a в папку с библиотеками. По умолчанию, скомпилированная версия включают поддержку GSL (www.gsl.org) и PNG. Соответственно, при сборке программы эти библиотеки должны быть установлены (их можно найти на @uref{http://gnuwin32.sf.net}). @item @@ -108,125 +107,12 @@ MathGL это ... * Coordinate axes:: * Line styles:: * Color scheme:: -* Font style:: +* Font styles:: +* Textual formulas:: @end menu +@include concept_ru.texi -@node Coordinate axes, Line styles, , General concepts -@subsection Оси координат - -Представление системы координат в MathGL состоит из двух частей. Вначале координаты нормируются в интервал @var{Min}x@var{Max} (@pxref{Axis settings}). Если флаг @var{Cut} установлен, то точки вне интервала отбрасываются, в противном случае, они проецируются на ограничивающий параллелепипед (@pxref{Cutting}). Кроме того, отбрасываются точки внутри границ, определенных переменными @var{CutMin}x@var{CutMax} и точки, для которых значение функции @code{CutOff}() не равно нулю. После этого формулы перехода в криволинейную систему координат @code{SetFunc()}применяются к каждой точке. Наконец, точка данных отображается с помощью одной из графических функций. - -Величины @var{Max}, @var{Min} можно изменять вручную. Однако, после этого необходимо вызвать функцию @code{RecalcBorder()} для настройки графика. Более удобный и безопасный путь состоит в вызове функций @code{Axis(), SetRanges()} и др. В последнем случае функция @code{RecalcBorder()} вызывается автоматически. Размеры осей можно задавать и автоматически по минимальному и максимальному значениям массива данных. Для этого предназначены функции @code{XRange(), YRange(), ZRange()}. Второй не обязательный аргумент указывает, заменять ли новые значения диапазона изменения оси координат (по умолчанию) или только расширить уже существующий диапазон. - -Точка пересечения осей координат задается переменной @var{Org} и действует на последующие вызовы функций рисования осей координат и сетки. По умолчанию, если точка пересечения осей координат попадает вне диапазона осей координат, то она проецируется на границу области. Изменить такое поведение можно, задав @var{AutoOrg}=@code{false}. В случае, если одно из значений @var{Org} равно NAN, то соответствующее значение будет выбрано автоматически. - -Кроме привычных осей @emph{x, y, z} есть еще одна ось -- цветовая шкала -- ось @emph{c}. Она используется при окрашивании поверхностей и задает границы изменения функции при окрашивании. При вызове @code{Axis()} ее границы автоматически устанавливаются равными Min.z и Max.z. Возможно и ручное изменение границ цветового интервала посредством вызова функции @code{CAxis()} или изменение границ по заданному массиву @code{CRange()}. Используйте @code{Colorbar()} для отображения цветовой шкалы. - -Вид меток по осям определяется функцией @code{SetTicks()} (@pxref{Ticks}). Она имеет 3 аргумента: первый @var{d} задает шаг меток (если положительны) или их число (если отрицательны) или логарифмические метки (если равны нулю); второ @var{ns} задает число "подметок"; последний определяет начальную точку для меток (по умолчанию это точка пересечения осей). Функция @var{SetTuneTicks} включает/выключает выделение общего множителя (большого или малого факторов в диапазоне) для меток осей координат. Наконец, если стандартный вид меток не устраивает пользователя, то их шаблон можно задать явно (можно использовать и ТеХ символы), воспользовавшись функциями @code{SetXTT(), SetYTT(). SetZTT(). SetCTT()}. Кроме того, в качестве меток можно вывести произвольный текст использовав функцию @code{SetTicksVal()}. - -@node Line styles, Color scheme, Coordinate axes, General concepts -@subsection Стиль линий - -@cindex Стиль линий -@cindex Стиль маркеров -@cindex Стиль стрелок - -Стиль линии задается строкой, которая может содержать символ цвета (@samp{wkrgbcymhRGBCYMHWlenupqLENUPQ}), тип пунктира (@samp{-|;:ji} или пробел), ширину линии (@samp{0123456789}) и тип маркера (@samp{o+xsd.^v} и модификатор @samp{#}). Если пропущен цвет или тип пунктира, то используется значение по умолчанию с последним указанным цветом. - -Символы цвета те же, что и в классе mglColor (@pxref{mglColor class}): @samp{k} -- черный, @samp{r} -- красный, @samp{R} -- темно красный, @samp{g} -- зеленый, @samp{G} -- темно зеленый, @samp{b} -- синий, @samp{B} -- темно синий, @samp{c} -- голубой, @samp{C} -- темно голубой, @samp{m} -- пурпурный, @samp{M} -- темно пурпурный, @samp{y} -- желтый, @samp{Y} -- темно желтый (золотой), @samp{h} -- серый, @samp{H} -- темно серый, @samp{w} -- белый, @samp{W} -- светло серый, @samp{l} -- сине-зеленый, @samp{L} -- темно сине-зеленый, @samp{e} -- желто-зеленый, @samp{E} -- темно желто-зеленый, @samp{n} -- небесно-синий, @samp{N} -- темно небесно-синий, @samp{u} -- сине-фиолетовый, @samp{U} -- темно сине-фиолетовый, @samp{p} -- фиолетовый, @samp{P} -- темно фиолетовый, @samp{q} -- оранжевый, @samp{Q} -- темно оранжевый (коричневый). - -Тип пунктира: пробел -- нет линии (для рисования только маркеров), @samp{-} -- сплошная линия (################), @samp{|} -- пунктир (########________), @samp{;} -- мелкий пунктир (####____####____), @samp{:} -- точки (#___#___#___#___), @samp{j} -- пунктир с точками (#######____#____), @samp{i} -- мелкий пунктир с точками (###__#__###__#__). - -Типы маркеров: @samp{o} -- окружность, @samp{+} -- крест, @samp{x} -- косой крест, @samp{s} - квадрат, @samp{d} - ромб, @samp{.} -- точка, @samp{^} -- треугольник вверх, @samp{v} -- треугольник вниз. Если в строке присутствует символ @samp{#}, то используются символы с заполнением. - -@float -@image{png/sample5, 7cm} -@caption{Стили линий и маркеров.} -@end float - -На конце и в начале линии можно выводить специальный символ (стрелку), если в строке указать один из символов: @samp{A} -- стрелка наружу, @samp{V} -- стрелка внутрь, @samp{I} -- поперечная черта, @samp{K} -- стрелка с чертой, @samp{T} -- треугольник, @samp{S} -- квадрат, @samp{D} -- ромб, @samp{O} -- круг, @samp{_} -- нет стрелки (по умолчанию). При этом действует следующее правило: первый символ определяет стрелку на конце линии, второй символ -- стрелку в начале линии. Например, @samp{r-A} -- красная сплошная линия со стрелкой на конце, @samp{b|AI} -- синий пунктир со стрелкой на конце и чертой вначале, @samp{_O} -- линия с текущим стилем и кружком вначале. Эти стили действуют и при построении графиков (например, @ref{Plot}). - -@float -@image{png/sampled, 7cm} -@caption{Стили стрелок.} -@end float - -@node Color scheme, Font style, Line styles, General concepts -@subsection Цветовая схема - -@cindex Цветовая схема - -Цветовая схема используется для определения цвета поверхностей, линий уровня и пр. Цветовая схема задается строкой @emph{s}, которая содержит символы цвета (@pxref{Line styles}) или символы @samp{d#:|}. Символ @samp{d} указывает на определение цвета в зависимости от положения точки в пространстве, а не по амплитуде данных. Символ @samp{#} переключает рисование поверхности на сетчатое (для трехмерных поверхностей) или включает рисование сетки на поверхности. Символ @samp{|} отключает интерполяцию цвета в цветовой схеме. Это может быть полезно для ``резких'' цветов, например, при рисовании матриц. Если в строке встречается символ @samp{:}, то он принудительно заканчивает разбор строки для стиля поверхности. После этого символа могут идти описание стиля текста или оси вращения кривой/линий уровня. Цветовая схема может содержать до 32 значений цвета. - -В цветовой схеме можно использовать тональные (``подсвеченные'') цвета (@emph{не в стиле линий!}). Тональный цвет задается двумя символами: первый -- обычный цвет, второй -- его яркость цифрой. Цифра может быть в диапазоне @samp{1}...@samp{9}. При этом @samp{5} соответствует нормальному цвету, @samp{1} -- очень темная версия цвета (почти черный), @samp{9} -- очень светлая версия цвета (почти белый). Например цветовая схема может быть @samp{b2b7wr7r2}. - -@float -@image{png/colors, 7cm} -@caption{Цвета и их идентификаторы.} -@end float - -При определении цвета по @emph{амплитуде} (наиболее часто используется) окончательный цвет определяется путем линейной интерполяции массива цветов. Массив цветов формируется из цветов, указанных в строке спецификации. Аргумент -- амплитуда, нормированная между @var{Cmin} -- @var{Cmax} (@pxref{Ranges (bounding box)}). Например, строка из 4 символов @samp{bcyr} соответствует изменению цвета от синего (минимальное значение) через голубой и желтый (промежуточные значения) к красному (максимальное значение). Строка @samp{kw} соответствует изменению цвета от черного (минимальное значение) к белому (максимальное значение). Строка из одного символоа (например, @samp{g}) соответствует однотонному цвету (в данному случае зеленому). - -Есть несколько полезных цветовых схем. Строка @samp{kw} дает обычную серую (черно-белую) схему, когда большие значения светлее. Строка @samp{wk} представляет обратную серую схему, когда большие значения темнее. Строки @samp{kRryw}, @samp{kGgw}, @samp{kBbcw} представляют собой хорошо известные схемы @emph{hot}, @emph{summer} и @emph{winter}. Строки @samp{BbwrR} и @samp{bBkRr} позволяют рисовать двухцветные фигуры на белом или черном фоне, когда отрицательные значения показаны синим цветом, а положительные -- красным. Строка @samp{BbcyrR} дает цветовую схему, близкую к хорошо известной схеме @emph{jet}. - -Примеры наиболее популярных цветовых схем: -@table @samp -@item kw -@image{png_static/kw} -@item wk -@image{png_static/wk} -@item hHCcw -@image{png_static/kHCcw} - -@item kRryw -@image{png_static/kRryw} -@item kGgew -@image{png_static/kGgew} -@item kBbcw -@image{png_static/kBbcw} - -@item BbwrR -@image{png_static/BbwrR} -@item BbwgG -@image{png_static/BbwgG} -@item GgwmM -@image{png_static/GgwmM} - -@item bcwyr -@image{png_static/bcwyr} -@item QqwcC -@image{png_static/QqwcC} -@item CcwyY -@image{png_static/CcwyY} - -@item BbcyrR -@image{png_static/BbcyrR} -@item BbcwyrR -@image{png_static/BbcwyrR} -@item bwr -@image{png_static/bwr} - -@item bcyr -@image{png_static/bcyr} -@item bgr -@image{png_static/bgr} -@item BbcyrR| -@image{png_static/sharp} -@end table - -При определении цвета по @emph{положению точки в пространстве} окончательный цвет определяется по формуле c=x*c[1] + y*c[2] + z*c[3]. Здесь c[1], c[2], c[3] -- первые три цвета в цветовом массиве; x, y, z -- координаты точки, нормированные на @var{Min}x@var{Max}. Такой тип определения цвета полезен, например, при построении поверхностей уровня, когда цвет дает представление о положении точки в пространстве. Например, @pxref{Surf3}. - -@node Font style, , Color scheme, General concepts -@subsection Стиль текста - -@cindex Стиль текста - -Стиль текста задается строкой, которая может содержать несколько символов: тип шрифта (@samp{ribwou}) и/или выравнивания (@samp{LRC}), а также цвет текста @samp{wkrgbcymhRGBCYMHW} (@pxref{mglColor class}) после символа @samp{:}. Например, @samp{biC:b} соответствует жирному курсиву с выравниванием по центру синего цвета. - -Начертания шрифта: @samp{r} -- прямой шрифт, @samp{i} -- курсив, @samp{b} -- жирный. По умолчанию используется прямой шрифт. Типы выравнивания текста: @samp{L} -- по левому краю (по умолчанию), @samp{C} -- по центру, @samp{R} -- по правому краю. Дополнительные эффекты шрифта: @samp{w} -- контурный, @samp{o} -- надчеркнутый, @samp{u} -- подчеркнутый. Синтаксический разбор LaTeX-их команд по умолчанию включен (подробнее см. @pxref{mglFont class} и @ref{Font settings}). - -Размер текста может быть задан явно (если @var{size}>0) или относительно базового размера шрифта для рисунка |@var{size}|*@var{FontSize} при @var{size}<0. Значение @var{size}=0 указывает, что соответствующая строка выводиться не будет. Базовый размер шрифта измеряется во внутренних единицах. Специальные функции @code{SetFontSizePT(), SetFontSizeCM(), SetFontSizeIN()} позволяют задавать его в более ``привычных'' единицах. @node FAQ, Interfaces, General concepts, Overview @section FAQ @@ -275,6 +161,46 @@ gr->Window(argc,argv,foo_draw,"Title",this); @c @strong{Наконец!} Пожалуйста @emph{не спрашивайте} меня вопросы про Windows. Я не использую Windows. Я ничего не знаю о Visual Basic, Visual C++, CBuiled или .NET. Найдите подходящие форумы в интернете и задайте свой вопрос там. +@item Как мне собрать MathGL под Windows? +Простейший путь -- использование комбинации CMake и MinGW. Также Вам может потребоваться дополнительные библиотеки, такие как GSL, PNG, JPEG и пр. Все они могут быть найдены на @url{http://gnuwin32.sourceforge.net/packages.html}. После установки всех компонент, просто запустите конфигуратор CMake и соберите MathGL командой make. + +@item Как создать окно FLTK/GLUT/Qt с текущими результатами параллельно с выполнением основных вычислений? +Следует создать отдельный поток для обработки сообщений в окно. Кросс-платформенный путь -- использование библиотеки @code{pthread}. Обновление данных в окне можно выполнить вызовом функции @code{mglGraphFLTK::Update()}. Пример код имеет вид: +@verbatim +//----------------------------------------------------------------------------- +#include +#include +#include + +mglPoint pnt; // some global variable for changable data +//----------------------------------------------------------------------------- +int sample(mglGraph *gr, void *) +{ + gr->Box(); gr->Line(mglPoint(),pnt,"Ar2"); // just draw a vector + return 0; +} +//----------------------------------------------------------------------------- +void *mgl_fltk_tmp(void *) { mglFlRun(); return 0; } +int main (int argc, char ** argv) +{ + mglGraphFLTK gr; + gr.Window(argc,argv,sample,"test"); // create window + static pthread_t tmp; + pthread_create(&tmp, 0, mgl_fltk_tmp, 0); + pthread_detach(tmp); // run window handling in the separate thread + for(int i=0;i<10;i++) // do calculation + { + sleep(1); // which can be very long + pnt = mglPoint(2*mgl_rnd()-1,2*mgl_rnd()-1); + gr.Update(); // update window + } + return 0; // finish calculations and close the window +} +//----------------------------------------------------------------------------- +@end verbatim + + + @item Сколько человек участвовало в создании библиотеки? Большую часть библиотеки написал один человек. Это результат примерно года работы на написание ядра библиотеки и базовых функций (в основном вечерами и по выходным). Процесс усовершенствования продолжается и теперь :). Скрипты сборки в основном написаны Д.Кулагиным, а экспорт в IDTF написан М.Видассовым. @@ -325,7 +251,7 @@ C интерфейс является базовым для большинств @end itemize Эти переменные содержат идентификаторы объектов графики или данных. -Фортрановские функции имеют те же имена, что и функции C. Однако, есть различие: переменные типов @code{HMGL, HMDT} должны быть объявлены как целые достаточной разрядности (integer*4 на 32-битных системах или integer*8 на 64-битных системах). Все С функции являются процедурами для Фортрана (должны вызываться с помощью оператора call). Исключение составляют функции, возвращающие переменные типа @code{HMGL} или @code{HMDT}. Последние должны быть объявлены целыми для использования в фортрановском коде. Также помните, что строки в фортране обозначаются одинарной кавычкой @code{'}, а не двойной @code{"} как в С/С++. +Фортрановские функции имеют те же имена, что и функции C. Однако, есть различие: переменные типов @code{HMGL, HMDT} должны быть объявлены как целые достаточной разрядности (integer*4 на 32-битных системах или integer*8 на 64-битных системах). Все С функции являются процедурами для Фортрана (должны вызываться с помощью оператора call). Исключение составляют функции, возвращающие переменные типа @code{HMGL} или @code{HMDT}. Последние должны быть объявлены целыми для использования в фортрановском коде. Также помните, что строки в фортране обозначаются одинарной кавычкой @code{’}, а не двойной @code{"} как в С/С++. @strong{Создание и удаление графического объекта} @@ -411,14 +337,14 @@ To use Python classes just execute @samp{import mathgl}. The simplest example wi import mathgl a=mathgl.mglGraph() a.Box() -a.WritePNG('test.png') +a.WritePNG(’test.png’) @end verbatim Alternatively you can import all classes from @code{mathgl} module and easily access MathGL classes: @verbatim from mathgl import * a=mglGraph() a.Box() -a.WritePNG('test.png') +a.WritePNG(’test.png’) @end verbatim It become useful if you will create many @code{mglData} object, for example. @@ -435,14 +361,14 @@ To use Python classes just execute @samp{import mathgl}. The simplest example wi import mathgl a=mathgl.mglGraph() a.Box() -a.WritePNG('test.png') +a.WritePNG(’test.png’) @end verbatim Alternatively you can import all classes from @code{mathgl} module and easily access MathGL classes: @verbatim from mathgl import * a=mglGraph() a.Box() -a.WritePNG('test.png') +a.WritePNG(’test.png’) @end verbatim It become useful if you will create many @code{mglData} object, for example. @@ -455,7 +381,7 @@ There are 2 classes in Python interface: @c @item @code{mglParse} -- practically the same as C++ class @code{mglParse} (@pxref{mglParse class}). @end itemize -There is main difference from C++ classes -- Python class @code{mglGraph} don't have variables (options). All corresponding features are moved to methods. +There is main difference from C++ classes -- Python class @code{mglGraph} don’t have variables (options). All corresponding features are moved to methods. The core of MathGL Python class is @strong{mglGraph} class. It contains a lot of plotting functions for 1D, 2D and 3D plots. So most of sections is describe its methods. Its constructor have following arguments: @defop Constructor {mglGraph (Python)} @code{} mglGraph (@code{int} kind=@code{0}, @code{int} width=@code{600}, @code{int} height=@code{400}) @@ -463,7 +389,7 @@ Create the instance of class mglGraph with specified sizes @var{width} and @var{ @end defop @end itemize -There is main difference from C++ classes -- Python class @code{mglGraph} don't have variables (options). All corresponding features are moved to methods. The core of MathGL Python class is @strong{mglGraph} class. It contains a lot of plotting functions for 1D, 2D and 3D plots. So most of sections is describe its methods. Its constructor have following arguments: +There is main difference from C++ classes -- Python class @code{mglGraph} don’t have variables (options). All corresponding features are moved to methods. The core of MathGL Python class is @strong{mglGraph} class. It contains a lot of plotting functions for 1D, 2D and 3D plots. So most of sections is describe its methods. Its constructor have following arguments: @defop Constructor {mglGraph (Python)} @code{} mglGraph (@code{int} kind=@code{0}, @code{int} width=@code{600}, @code{int} height=@code{400}) Create the instance of class mglGraph with specified sizes @var{width} and @var{height}. Parameter @var{type} may have following values: @samp{0} -- use @code{mglGraphZB} plotter (default), @samp{1} -- use @code{mglGraphPS} plotter, @samp{2} -- use @code{mglGraphGL} plotter, @samp{3} -- use @code{mglGraphIDTF} plotter. @@ -477,11 +403,11 @@ Create the instance of class mglGraph with specified sizes @var{width} and @var{ @item My special thanks to Marina Balakina for the patience during library writing and for the help in documentation writing and spelling. @item -I'm thankful to D. Kulagin and S.M. Plis for making Debian packages. +I’m thankful to D. Kulagin and S.M. Plis for making Debian packages. @item -I'm thankful to M. Vidassov for the help in handling solid UTF-8 fonts. +I’m thankful to M. Vidassov for the help in handling solid UTF-8 fonts. @item -I'm thankful to N. Troickiy and V. Lipatov for making RPM packages. +I’m thankful to N. Troickiy and V. Lipatov for making RPM packages. @item -I'm thankful to S. Skobelev, A. Korotkevich, V. Onuchin, S.M. Plis, R. Kiselev, A. Ivanov, M. Vidiassov and V. Lipatov for fruitful comments. +I’m thankful to S. Skobelev, A. Korotkevich, V. Onuchin, S.M. Plis, R. Kiselev, A. Ivanov, M. Vidiassov and V. Lipatov for fruitful comments. @end itemize diff --git a/texinfo/png/Makefile.in b/texinfo/png/Makefile.in index 27b62da..07439f3 100644 --- a/texinfo/png/Makefile.in +++ b/texinfo/png/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.11 from Makefile.am. +# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, @@ -112,6 +112,8 @@ GREP = @GREP@ GSL_FLAGS = @GSL_FLAGS@ GSL_LIBS = @GSL_LIBS@ HAVE_SWIG = @HAVE_SWIG@ +HDF4_FLAGS = @HDF4_FLAGS@ +HDF4_LIBS = @HDF4_LIBS@ HDF5_FLAGS = @HDF5_FLAGS@ HDF5_LIBS = @HDF5_LIBS@ INSTALL = @INSTALL@ @@ -132,6 +134,7 @@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MGL_AGE = @MGL_AGE@ MGL_CURRENT = @MGL_CURRENT@ +MGL_RELEASE = @MGL_RELEASE@ MGL_REVISION = @MGL_REVISION@ MKDIR_P = @MKDIR_P@ MOC = @MOC@ diff --git a/texinfo/png_static/BbcwyrR.png b/texinfo/png_static/BbcwyrR.png deleted file mode 100644 index 92f7cda91c929723ec950fe15e3f09c4199fa32d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 292 zcmeAS@N?(olHy`uVBq!ia0y~yV9WrrWjWY@WP9y5VIaj=9OUlAui(P=vF=sTU*Z4& diff --git a/texinfo/png_static/BbcyrR.png b/texinfo/png_static/BbcyrR.png deleted file mode 100644 index 524f007a4009e116615203432eaafefec43dd551..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 332 zcmeAS@N?(olHy`uVBq!ia0y~yV9WrrWjWY@WP9y5VIaj=9OUlAui(P=vFgu(AmV!Q`_!*Rc5#>2Hwu1(VOd}=s-b={r#m-B7! ztzEJ!#pBZR+I4et&n|v9?`z%tpxDy^$-jIgKg~M*KL2@OxqtQk-jzF-E>j7fRA_j7 z>gKhTSMCbmpC5f`(wXyH|NJZ2w)Ot&bE5xVG96ImG-+^PR=B{x#0#W3Ops`xAeaxP gkrZK7{2~3F=gYf0?Uvb31p14?)78&qol`;+0DeJvI{*Lx diff --git a/texinfo/png_static/BbwgG.png b/texinfo/png_static/BbwgG.png deleted file mode 100644 index 86ec705ae2899f62088ff817ac3698b3d0fd444f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 296 zcmeAS@N?(olHy`uVBq!ia0y~yV9WrrWjWY@WP9y5VIaj=9OUlAui(P=vFar2vT@qhXLpC^Cb+O%oX%#^p~`zq|`-mJHhW_+N|Y0}`ptZ;#W si5Ez7m>|(WK`FVdQ&MBb@0B9#&$p8QV diff --git a/texinfo/png_static/BbwrR.png b/texinfo/png_static/BbwrR.png deleted file mode 100644 index fb213b6181ccec35d1d176856113483f529113cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 296 zcmeAS@N?(olHy`uVBq!ia0y~yV9WrrWjWY@WP9y5VIaj=9OUlAui(P=vFg8hDByZ<{+FYBD}=-!D=pwVmE*E%foDe5->9N!Pwz{`dw&1VdH!$q?`xA* zOi(P=vFi(P=vFB)X9e!Uxj`MOYO#*cY?!Y!URhf6?v<(Af;0u6{1-oD!Mi(P=vFMP2&wLJ~L?(L?UIWMY{m!LoF)wp%nBD6n0SFShY1o56a@3ZG?F5$ia#Xh&1@F*m|~{e3G@Slr>mdK II;Vst0OVz4fdBvi diff --git a/texinfo/png_static/bBkRr.png b/texinfo/png_static/bBkRr.png deleted file mode 100644 index e8c6d8c66b64716de70de484332d8f7d5455ea5f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 263 zcmeAS@N?(olHy`uVBq!ia0y~yV9WrrWjWY@WP9y5VIaj=9OUlAui(P=vFi(P=vFjaGYtG;O zeM0}_t@9uEzWINvTJ`R}=Z&>24dFr=42^6K3m93XfV4mc1A+z$g82{{p$Mzu2gznR XO*<^VS>{CpoyXwm>gTe~DWM4fI!{*A diff --git a/texinfo/png_static/bcyr.png b/texinfo/png_static/bcyr.png deleted file mode 100644 index 5970690d3155fe61b7b6a46992c67f9d1701c27e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 266 zcmeAS@N?(olHy`uVBq!ia0y~yV9WrrWjWY@WP9y5VIaj=9OUlAui(P=vFeSCtj$0E|68rL zPI~iA#_s>u{~QeALKzH=Yz_+;S)_opKn4SX1`2}t5E`KftKtXgaSEPaEDzpZt`2k+ NgQu&X%Q~loCIBA_PsIQL diff --git a/texinfo/png_static/bgr.png b/texinfo/png_static/bgr.png deleted file mode 100644 index 9738dc0e6ada1d7c8fb5865aaa5249cb5ffd2f32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 258 zcmeAS@N?(olHy`uVBq!ia0y~yV9WrrWjWY@WP9y5VIaj=9OUlAui(P=vF@c2Oc?+G diff --git a/texinfo/png_static/br.png b/texinfo/png_static/br.png deleted file mode 100644 index 54fb8cd97798325b450ff8e0c85dffec7950bbbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 256 zcmeAS@N?(olHy`uVBq!ia0y~yV9WrrWjWY@WP9y5VIaj=9OUlAui(P=vFi(P=vF?;{W|O_d59WoSCwi%VlEcZq?Ae>TAz#zW2NKS9*SZ>3pwa9;=>3 zzW;0Yck}lBJKi%s@MPjuxWK?+(%`@hq?ve;XbuwyA50@D!m9Ys8TQYeneO*?iH8H7 O#o+1c=d#Wzp$Py~T2qby diff --git a/texinfo/png_static/kBbcw.png b/texinfo/png_static/kBbcw.png deleted file mode 100644 index ccdb7fb09e45fe9b15fd87a659bc6bad9c27efed..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 272 zcmeAS@N?(olHy`uVBq!ia0y~yV9WrrWjWY@WP9y5VIaj=9OUlAui(P=vF2&T!3`#$xh$ SW^4)2Z492SelF{r5}E*~7E(?C diff --git a/texinfo/png_static/kGgew.png b/texinfo/png_static/kGgew.png deleted file mode 100644 index f345f841a52a4277c4f7beb60a213866e096a8ab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 273 zcmeAS@N?(olHy`uVBq!ia0y~yV9WrrWjWY@WP9y5VIaj=9OUlAui(P=vFlrg-1zx(!tcL%8-MS&t^XVC zsT0q6EG_?D8TRW#T7CX~#s`yGq#PD73S=-evH@upDI^*w2k diff --git a/texinfo/png_static/kHCcw.png b/texinfo/png_static/kHCcw.png deleted file mode 100644 index 715cb6bf7db19375dc82ef7c77e1199ca8bcfb1f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 312 zcmeAS@N?(olHy`uVBq!ia0y~yV9WrrWjWY@WP9y5VIaj=9OUlAui(P=vF$u7FkxWgRk*;wVbb8hj6^f>Lik`Bp$NO;`e%$EcKe$!L^P@a{lMVq L>gTe~DWM4fF*9q8 diff --git a/texinfo/png_static/kRryw.png b/texinfo/png_static/kRryw.png deleted file mode 100644 index b16d63338e24dc1c2636d61827021ecaa716f7cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 269 zcmeAS@N?(olHy`uVBq!ia0y~yV9WrrWjWY@WP9y5VIaj=9OUlAui(P=vF}dBdb&7< zRNQ)d#gOZOf`IG6{jdL?pJO7H$t2d+V!*seCpvPES5e8NSi(P=vFb7<7>+8$kzq!3V|Ng(vyW<)5 zOmbl6FkxWgRk*;wVbb8hj6^f>Lik`Bp$NNT`C_IR4i@9ELw{U>Zej3r^>bP0l+XkK DcX~@k diff --git a/texinfo/png_static/r.png b/texinfo/png_static/r.png deleted file mode 100644 index 87efae7589098dc05358e1f0965618631d329e35..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 234 zcmeAS@N?(olHy`uVBq!ia0y~yV9WrrWjWY@WP9y5VIaj=9OUlAui(P=vF65h95o*q}YYBfs8wzE{-7@=Su?vr?M#Wyk5hslfcLw!N3`DfXM@b7&sLcem9&xyLPvG zT}ADZ%uAEL->W{qU%_hcF^S|e=I=wjG?xl|y;uGIOvwQt=_``lW4P~Q(K*ZXG{qKy zrkz`_Mg5+)gPTH P&0+9#^>bP0l+XkKgS4CX diff --git a/texinfo/png_static/s_in.png b/texinfo/png_static/s_in.png deleted file mode 100644 index 092470e6d1280aa91937e0cdc0d6f685e135b119..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 324 zcmeAS@N?(olHy`uVBq!ia0vp^96-z|zy>7a4{yu`Qfx`y?k@kqfHUIz9guW^M`SUO z&I99+M|_4r#vD%<#}JM4Qzts|vMBPndT(Oe5WpSbz%90+flUR(a?-tW=>Fj)Ih#0V z&Memym-{;(s4Mr`oMOKRvr1ZK&YY>SW5M@()&Ey|X)c{2@PaQiG<3nWsBG4lA0&&^HED`8OZ%uP&BRY*_GOD#$) zNlj5ms#I_f@KJEj$S*D_PA4uhwwpUXO@ GgeCy_Xn2YM diff --git a/texinfo/png_static/s_sqrt.png b/texinfo/png_static/s_sqrt.png deleted file mode 100644 index 09619c5737f3c7cea2ae0f83bd4bb230cc244400..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 430 zcmeAS@N?(olHy`uVBq!ia0vp^JU}cUzy>6XK03JoDYhhUcbETQz!~xV4p4-%z$3C4 zNaulZ$Rj>O1_nkpPZ!4!i_>eTME9~N3b-c9CNOeG9ANTb;EZ74RAA)J$W&=)v6f$w zW_DTe?nx7SQMr}XuUOd`8f^Ei*?KMN!TZePd%xeaR#-YE$mp0x)AAe+#TJGh!($Ts zZVpe1&snM`J8>woJnx?@f4oqJ-Ql^t`-Tqt+)YL2E#KCQX#jOeT#m|Kd;Yt6WB#J* zo$8JJKcgFDs^0JY?%<`lv}C%>jfwliv)68Ay8={oVAa3n9@g1F(_{8q%dSykw0u72 z^G!y^x9{{>lX?u@95k0sv9jLby-#!j=aLXX!>{IFf5$TJ`~7Cci!Jd@CISD|zGl6h z(m5jzsIU0@$?clIwyowpAAcbBH`A5r9r01iroI9OjZKMbM2T~LZf zLV9XmYEfcIYKlTqrGk5akAizfesM{0a#3bMiGoH-YFTD-s%=4DZc$>nCKtQ{IvztAw(&oeTR-3MdhYOw=Nh>8-toZ5Y&BDWO zT5T!Hc-Zl*LNrLM^86GI3BIhdB0Z+I=2^FOxUK$jtx}o|68m|o1#E1w8c5yhH6UZtrfdU=Z8H`CSs(n& z^*}+u=Q);w1~OMliqt{s!s=XrV#Sk11%I5^zkEq)*R05$z>s2K@O1TaS?83{1OUD| Bm39CC diff --git a/texinfo/png_static/u2v2.png b/texinfo/png_static/u2v2.png deleted file mode 100644 index 1e2d333d74a2a4cf33885e105785679ee8646a65..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 702 zcmV;v0zv(WP) zSad^gZEa<4bO0bpZDD6+AZKN6WpZJ3Wn>^?c_2qnOdv;SZ*z2WV{&P5bRZ~XWp-&} zWj%0iZE|6EDGCQC&hP*L0s~1zK~zY`)mOo>s~{9T=Klt00hd|Y0x3aDz!Gqo>`Vz- zf|MX7gc4-y4z}6xRx%o6Lgpv$PtJ@p!T_EF_Z}~a_ueBCNs{2(v5OsOjDZjW-uth9 z{>BP!+ZIBIsIgK?Xsuz4L7wNx^ZeIOa+8CPz%UG+a~?C)_kHgPAz|M1{+oEjAxf|i z!Vkj`{lUxS;=T9YTKken?q|2LI^nL9}#rRLrRG>O`meu-JawnyV#|oDA0A?YKM!W0AmcCb2#Uars-;K463SHh2WHXb8Pv* z;c!5n=OJX3Qmd0*VNy;h^-a?(tbN{|13+-?zVE{>TWkNxSzmSOIS*^?A{w_4a+q_D zwrv+?^~i80*H%h_QVONirVo4ygpj~PN*Pt){5c+vM*!IG_c)zSA*AMJb&Kou3avH9 zal|-|VFT`k<12^?$s561YdGhSWf=$|&+h~C%R^a~VId(z)B^8BRaKw=Z{L=X0HVvt kZ^Wv!WQ@I3Mt&Q90KcA<#hm5KdjJ3c07*qoM6N<$f=2N#nE(I) diff --git a/texinfo/png_static/u2v2w2.png b/texinfo/png_static/u2v2w2.png deleted file mode 100644 index 50d5be19b1df1a13e192ee184a8fa205656c4217..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 843 zcmV-R1GM~!P) zSad^gZEa<4bO0bpZDD6+AZKN6WpZJ3Wn>^?c_2qnOdv;SZ*z2WV{&P5bRZ~XWp-&} zWj%0iZE|6EDGCQC&hP*L0+2~WK~z}7?U+6CsxTDA55Bj7Y$2AGSX$x|!V2Phjw7A`hKTCz4Y745hLxi81D$ zYwpL?Conw2T zFmx$wv)TMe=zju(FVn=w3!*4;ZLKw`szMycSAA`1t-%T@WiFr7|EWoUCG zN#gpp+b!z41^~?Ga}-7KkZICC@wcj?W)teVhP4))b10=chSR*XJx)p)Y`5FNCw_~g zeNe_==yNm+ZLLL?Wnhc}0E7^3ZSFD|V@OJQGY{r@PP^UCwVV6RW<*B^$V%Xf|G z03ZMqMbY57_#Q{o{|dva9C@Bo7=|4~F3a*EQ&5&AS!GbMZA7xo~71~YSZ0lZ5UoMvrLb%Ybs_H5t#^y+p1e|kM&MT!5MUjh) zn`(B0b541lcXqJdZVP~`mddhpr@$EVQuXj`Rnq1##&n`~Y>sB`jImB7d2bEda-JZi z>=;N<6b}upsg|m$0_Pl6Ro(TKcZo6PIFwR9_CdxN17j?();f=9Jitf4R;$$t0A{lp z*6Xzk!?q#!b-7%iwZ{2;#`%19n{q3JpV71FgfRxKHLSG=!|-v)zn^2Z-|w+lEMTq0 z@p#1Xc=W5x+F>E3bSC|3Y8fL9{4X5n|DFKg{fpwOVHEU#WiOXYi(P=vFV^WNXRdpGCb-&gzl{`++d z1uBhf0vQY}QVt6kfpjAq63rq7;e%-;MOYQrJ!6|~`aAs8%M5m)V;DSL{an^LB{Ts5 DCg4m6 diff --git a/texinfo/png_static/qt.png b/texinfo/qt.png similarity index 100% rename from texinfo/png_static/qt.png rename to texinfo/qt.png diff --git a/texinfo/samples_en.texi b/texinfo/samples_en.texi index 14d0dae..8586e99 100644 --- a/texinfo/samples_en.texi +++ b/texinfo/samples_en.texi @@ -1,13 +1,10 @@ @c ------------------------------------------------------------------ -@node Samples, TeX-like symbols, MGL interface, Top @chapter Samples - -This chapter contain a lot of sample codes for all types of plots and for most important examples and hints. The same sample (with pictures) you can find at @uref{http://mathgl.sf.net/pictures.html}. Most of examples have the sample code on 5 languages: C++, MGL, C, Fortran and Python. However, I put only C++ code for some of examples due to a lot of them and clearency how to write code for other languages. All samples are divided on 6 large categories. - +This chapter contain a lot of sample codes for all types of plots and for most important examples and hints. The same sample (with pictures) you can find at @uref{http://mathgl.sf.net/pictures.html}. +@ifclear UDAV +Most of examples have the sample code on 5 languages: C++, MGL, C, Fortran and Python. However, I put only C++ code for some of examples due to a lot of them and clearency how to write code for other languages. All samples are divided on 6 large categories. The minimal code to view the samples for different languages are following. - @strong{C++ code} - For compilation use: @code{g++ -o sample sample.cpp -lmgl}. @verbatim #include @@ -22,7 +19,6 @@ int main() } @end verbatim @strong{MGL code} - For preview use: @code{mglview sample.mgl}. @verbatim #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -31,7 +27,6 @@ For preview use: @code{mglview sample.mgl}. #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @end verbatim @strong{Pure C code} - For compilation use: @code{gcc -o sample sample.c -lmgl}. @verbatim #include @@ -47,7 +42,6 @@ int main() } @end verbatim @strong{Fortran code} - For compilation use: @code{gfortran -o sample sample.f90 -lmgl}. Note, fortran don't have argument checking. So you have to take special attention to pass real variables to real arguments of functions and integer variables to integer arguments of functions. There is no other special checking for that!!! @verbatim integer gr, mgl_create_graph_zb @@ -60,7 +54,6 @@ call mgl_delete_graph(gr) end @end verbatim @strong{Python} - For preview use: @code{python sample.py}. @verbatim from mathgl import * @@ -70,31 +63,34 @@ gr = mglGraph(); #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ gr.ShowImage(); @end verbatim - - +@end ifclear @menu * 1D plotting samples:: * 2D plotting samples:: * 3D plotting samples:: * Dual plotting samples:: +* Basic features:: * Additional features:: * Advanced features:: @end menu - @c ------------------------------------------------------------------ @node 1D plotting samples, 2D plotting samples, , Samples @section 1D plotting samples - @menu * Plot sample:: -* Radar sample:: +* Radar sample:: * Tens sample:: * Area sample:: +* Area gradient sample:: * Bars sample:: +* Bars 2 colors sample:: +* Bars above sample:: +* Bars fall sample:: * Barh sample:: * Step sample:: * Stem sample:: * Region sample:: +* Region gradient sample:: * Error sample:: * BoxPlot sample:: * Mark sample:: @@ -104,18 +100,17 @@ gr.ShowImage(); * Torus sample:: * Chart sample:: * Pie chart sample:: +* Ring chart sample:: @end menu - @c ------------------------------------------------------------------ @node Plot sample, Radar sample, , 1D plotting samples @subsection Plot sample @cindex Plot - @float -@image{png/plot, 7cm} -@caption{Example of Plot. @tdref{plot}} +@image{../png/plot, 7cm} +@c @caption{Example of Plot. @tdref{plot}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData y(50,3); @@ -126,6 +121,7 @@ gr->Box(); gr->Plot(y); @end verbatim @strong{MGL code} +@end ifclear @verbatim new y 50 3 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)' @@ -134,6 +130,7 @@ modify y 'cos(2*pi*x)' 2 box plot y @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT y = mgl_create_data_size(50,3,1); @@ -164,19 +161,16 @@ y.Modify("cos(2*pi*x)",2); gr.Box(); gr.Plot(y); @end verbatim - - - +@end ifclear @c ------------------------------------------------------------------ @node Radar sample, Tens sample, Plot sample, 1D plotting samples @subsection Radar sample @cindex Radar - @float -@image{png/radar, 7cm} -@caption{Example of Plot. @tdref{radar}} +@image{../png/radar, 7cm} +@c @caption{Example of Plot. @tdref{radar}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData y(10,3); @@ -184,11 +178,13 @@ y.Modify("0.4*sin(pi*(2*x+y/2))+0.1*rnd"); gr->Radar(y,"#"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new y 10 3 modify y '0.4*sin(pi*(2*x+y/2))+0.1*rnd' radar y '#' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT y = mgl_create_data_size(10,3,1); @@ -210,18 +206,16 @@ y = mglData(10,3); y.Modify("0.4*sin(pi*(2*x+y/2))+0.1*rnd"); gr.Radar(y,"#"); @end verbatim - - +@end ifclear @c ------------------------------------------------------------------ @node Tens sample, Area sample, Radar sample, 1D plotting samples @subsection Tens sample @cindex Tens - @float -@image{png/tens, 7cm} -@caption{Example of Tens. @tdref{tens}} +@image{../png/tens, 7cm} +@c @caption{Example of Tens. @tdref{tens}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData y(50), c(50); @@ -231,6 +225,7 @@ gr->Box(); gr->Tens(y,c); @end verbatim @strong{MGL code} +@end ifclear @verbatim new y 50 new c 50 @@ -239,6 +234,7 @@ modify c 'sin(2*pi*x)' box tens y c @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT y = mgl_create_data_size(50,1,1); @@ -271,17 +267,16 @@ c.Modify("sin(2*pi*x)"); gr.Box(); gr.Tens(y,c); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ -@node Area sample, Bars sample, Tens sample, 1D plotting samples +@node Area sample, Area gradient sample, Tens sample, 1D plotting samples @subsection Area sample @cindex Area - @float -@image{png/area, 7cm} -@caption{Example of Area. @tdref{area}} +@image{../png/area, 7cm} +@c @caption{Example of Area. @tdref{area}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData y(50,3); @@ -293,6 +288,7 @@ gr->Box(); gr->Area(y); @end verbatim @strong{MGL code} +@end ifclear @verbatim new y 50 3 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)' @@ -302,6 +298,7 @@ origin 0 0 box area y @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT y = mgl_create_data_size(50,3,1); @@ -335,17 +332,81 @@ gr.SetOrigin(0.,0.); gr.Box(); gr.Area(y); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ -@node Bars sample, Barh sample, Area sample, 1D plotting samples +@node Area gradient sample, Bars sample, Area sample, 1D plotting samples +@subsection Area with gradient filling sample +@cindex Area +@float +@image{../png/area_2, 7cm} +@c @caption{Example of Area. @tdref{area}} +@end float +@ifclear UDAV +@strong{C++ code} +@verbatim +mglData y(50,3); +y.Modify("0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0); +y.Modify("sin(2*pi*x)",1); +y.Modify("cos(2*pi*x)",2); +gr->Org=mglPoint(0,0); +gr->Box(); +gr->Area(y,"cbgGyr"); +@end verbatim +@strong{MGL code} +@end ifclear +@verbatim +new y 50 3 +modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)' +modify y 'sin(2*pi*x)' 1 +modify y 'cos(2*pi*x)' 2 +origin 0 0 +box +area y 'cbgGyr' +@end verbatim +@ifclear UDAV +@strong{Pure C code} +@verbatim +HMDT y = mgl_create_data_size(50,3,1); +mgl_data_modify(y,"0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0); +mgl_data_modify(y,"sin(2*pi*x)",1); +mgl_data_modify(y,"cos(2*pi*x)",2); +mgl_set_origin(gr,0.,0.,0.); +mgl_box(gr,1); +mgl_area(gr,y,"cbgGyr"); +mgl_delete_data(y); +@end verbatim +@strong{Fortran code} +@verbatim +integer y, mgl_create_data_size +y = mgl_create_data_size(50,3,1) +call mgl_data_modify(y,'0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)',0) +call mgl_data_modify(y,'sin(2*pi*x)',1) +call mgl_data_modify(y,'cos(2*pi*x)',2) +call mgl_set_origin(gr,0.,0.,0.) +call mgl_box(gr,1) +call mgl_area(gr,y,'cbgGyr') +call mgl_delete_data(y) +@end verbatim +@strong{Python} +@verbatim +y = mglData(50,3); +y.Modify("0.7*sin(2*pi*x)+0.5*cos(3*pi*x)+0.2*sin(pi*x)",0); +y.Modify("sin(2*pi*x)",1); +y.Modify("cos(2*pi*x)",2); +gr.SetOrigin(0.,0.); +gr.Box(); +gr.Area(y,"cbgGyr"); +@end verbatim +@end ifclear +@c ------------------------------------------------------------------ +@node Bars sample, Bars 2 colors sample, Area gradient sample, 1D plotting samples @subsection Bars sample @cindex Bars - @float -@image{png/bars, 7cm} -@caption{Example of Bars. @tdref{bars}} +@image{../png/bars, 7cm} +@c @caption{Example of Bars. @tdref{bars}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData y(10,3); @@ -355,6 +416,7 @@ gr->Box(); gr->Bars(y); @end verbatim @strong{MGL code} +@end ifclear @verbatim new y 10 3 modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd' @@ -362,6 +424,7 @@ origin 0 0 box bars y @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT y = mgl_create_data_size(10,3,1); @@ -389,17 +452,181 @@ gr.SetOrigin(0.,0.); gr.Box(); gr.Bars(y); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ -@node Barh sample, Step sample, Bars sample, 1D plotting samples +@node Bars 2 colors sample, Bars above sample, Bars sample, 1D plotting samples +@subsection Bars 2 colors sample +@cindex Bars +@float +@image{../png/bars_2, 7cm} +@c @caption{Example of Bars. @tdref{bars}} +@end float +@ifclear UDAV +@strong{C++ code} +@verbatim +mglData y(10,3); +y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd"); +gr->Org=mglPoint(0,0); +gr->Box(); +gr->Bars(y,"cbgGyr"); +@end verbatim +@strong{MGL code} +@end ifclear +@verbatim +new y 10 3 +modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd' +origin 0 0 +box +bars y 'cbgGyr' +@end verbatim +@ifclear UDAV +@strong{Pure C code} +@verbatim +HMDT y = mgl_create_data_size(10,3,1); +mgl_data_modify(y,"0.8*sin(pi*(2*x+y/2))+0.2*rnd"); +mgl_set_origin(gr,0.,0.,0.); +mgl_box(gr,1); +mgl_bars(gr,y,"cbgGyr"); +mgl_delete_data(y); +@end verbatim +@strong{Fortran code} +@verbatim +integer y, mgl_create_data_size +y = mgl_create_data_size(10,3,1) +call mgl_data_modify(y,'0.8*sin(pi*(2*x+y/2))+0.2*rnd') +call mgl_set_origin(gr,0.,0.,0.) +call mgl_box(gr,1) +call mgl_bars(gr,y,'cbgGyr') +call mgl_delete_data(y) +@end verbatim +@strong{Python} +@verbatim +y = mglData(10,3); +y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd"); +gr.SetOrigin(0.,0.); +gr.Box(); +gr.Bars(y,"cbgGyr"); +@end verbatim +@end ifclear +@c ------------------------------------------------------------------ +@node Bars above sample, Bars fall sample, Bars 2 colors sample, 1D plotting samples +@subsection Bars above sample +@cindex Bars +@float +@image{../png/bars_a, 7cm} +@c @caption{Example of Bars. @tdref{bars}} +@end float +@ifclear UDAV +@strong{C++ code} +@verbatim +mglData y(10,3); +y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd"); +gr->Org=mglPoint(0,0); +gr->Box(); +gr->Bars(y,"a"); +@end verbatim +@strong{MGL code} +@end ifclear +@verbatim +new y 10 3 +modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd' +origin 0 0 +box +bars y 'a' +@end verbatim +@ifclear UDAV +@strong{Pure C code} +@verbatim +HMDT y = mgl_create_data_size(10,3,1); +mgl_data_modify(y,"0.8*sin(pi*(2*x+y/2))+0.2*rnd"); +mgl_set_origin(gr,0.,0.,0.); +mgl_box(gr,1); +mgl_bars(gr,y,"a"); +mgl_delete_data(y); +@end verbatim +@strong{Fortran code} +@verbatim +integer y, mgl_create_data_size +y = mgl_create_data_size(10,3,1) +call mgl_data_modify(y,'0.8*sin(pi*(2*x+y/2))+0.2*rnd') +call mgl_set_origin(gr,0.,0.,0.) +call mgl_box(gr,1) +call mgl_bars(gr,y,'a') +call mgl_delete_data(y) +@end verbatim +@strong{Python} +@verbatim +y = mglData(10,3); +y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd"); +gr.SetOrigin(0.,0.); +gr.Box(); +gr.Bars(y,"a"); +@end verbatim +@end ifclear +@c ------------------------------------------------------------------ +@node Bars fall sample, Barh sample, Bars above sample, 1D plotting samples +@subsection Bars fall sample +@cindex Bars +@float +@image{../png/bars_f, 7cm} +@c @caption{Example of Bars. @tdref{bars}} +@end float +@ifclear UDAV +@strong{C++ code} +@verbatim +mglData y(10,3); +y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd"); +gr->Org=mglPoint(0,0); +gr->Box(); +gr->Bars(y,"f"); +@end verbatim +@strong{MGL code} +@end ifclear +@verbatim +new y 10 3 +modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd' +origin 0 0 +box +bars y 'f' +@end verbatim +@ifclear UDAV +@strong{Pure C code} +@verbatim +HMDT y = mgl_create_data_size(10,3,1); +mgl_data_modify(y,"0.8*sin(pi*(2*x+y/2))+0.2*rnd"); +mgl_set_origin(gr,0.,0.,0.); +mgl_box(gr,1); +mgl_bars(gr,y,"f"); +mgl_delete_data(y); +@end verbatim +@strong{Fortran code} +@verbatim +integer y, mgl_create_data_size +y = mgl_create_data_size(10,3,1) +call mgl_data_modify(y,'0.8*sin(pi*(2*x+y/2))+0.2*rnd') +call mgl_set_origin(gr,0.,0.,0.) +call mgl_box(gr,1) +call mgl_bars(gr,y,'f') +call mgl_delete_data(y) +@end verbatim +@strong{Python} +@verbatim +y = mglData(10,3); +y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd"); +gr.SetOrigin(0.,0.); +gr.Box(); +gr.Bars(y,"f"); +@end verbatim +@end ifclear +@c ------------------------------------------------------------------ +@node Barh sample, Step sample, Bars fall sample, 1D plotting samples @subsection Barh sample @cindex Barh - @float -@image{png/barh, 7cm} -@caption{Example of Barh. @tdref{barh}} +@image{../png/barh, 7cm} +@c @caption{Example of Barh. @tdref{barh}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData y(10,3); @@ -409,6 +636,7 @@ gr->Box(); gr->Barh(y); @end verbatim @strong{MGL code} +@end ifclear @verbatim new y 10 3 modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd' @@ -416,6 +644,7 @@ origin 0 0 box barh y @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT y = mgl_create_data_size(10,3,1); @@ -443,17 +672,16 @@ gr.SetOrigin(0.,0.); gr.Box(); gr.Barh(y); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Step sample, Stem sample, Barh sample, 1D plotting samples @subsection Step sample @cindex Step - @float -@image{png/step, 7cm} -@caption{Example of Step. @tdref{step}} +@image{../png/step, 7cm} +@c @caption{Example of Step. @tdref{step}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData y(50,3); @@ -464,6 +692,7 @@ gr->Box(); gr->Step(y); @end verbatim @strong{MGL code} +@end ifclear @verbatim new y 50 3 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)' @@ -472,6 +701,7 @@ modify y 'cos(2*pi*x)' 2 box step y @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT y = mgl_create_data_size(50,3,1); @@ -502,17 +732,16 @@ y.Modify("cos(2*pi*x)",2); gr.Box(); gr.Step(y); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Stem sample, Region sample, Step sample, 1D plotting samples @subsection Stem sample @cindex Stem - @float -@image{png/stem, 7cm} -@caption{Example of Stem. @tdref{stem}} +@image{../png/stem, 7cm} +@c @caption{Example of Stem. @tdref{stem}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData y(50,3); @@ -524,6 +753,7 @@ gr->Box(); gr->Stem(y,"o"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new y 50 3 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)' @@ -533,6 +763,7 @@ origin 0 0 box stem y 'o' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT y = mgl_create_data_size(50,3,1); @@ -566,17 +797,16 @@ gr.SetOrigin(0.,0.); gr.Box(); gr.Stem(y,"o"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ -@node Region sample, Error sample, Stem sample, 1D plotting samples +@node Region sample, Region gradient sample, Stem sample, 1D plotting samples @subsection Region sample @cindex Region - @float -@image{png/region, 7cm} -@caption{Example of Region. @tdref{region}} +@image{../png/region, 7cm} +@c @caption{Example of Region. @tdref{region}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData y1(50), y2(50); @@ -588,6 +818,7 @@ gr->Plot(y1,"k2"); gr->Plot(y2,"k2"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new y1 50 new y2 50 @@ -598,6 +829,7 @@ region y1 y2 'r' plot y1 'k2' plot y2 'k2' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT y1 = mgl_create_data_size(50,1,1); @@ -635,17 +867,86 @@ gr.Region(y1,y2,"r"); gr.Plot(y1,"k2"); gr.Plot(y2,"k2"); @end verbatim - +@end ifclear +@c ------------------------------------------------------------------ +@node Region gradient sample, Error sample, Region sample, 1D plotting samples +@subsection Region gradient sample +@cindex Region +@float +@image{../png/region_2, 7cm} +@c @caption{Example of Region. @tdref{region}} +@end float +@ifclear UDAV +@strong{C++ code} +@verbatim +mglData y1(50), y2(50); +y1.Modify("0.3*sin(2*pi*x)"); +y2.Modify("0.5+0.3*cos(2*pi*x)"); +gr->Box(); +gr->Region(y1,y2,"yr"); +gr->Plot(y1,"k2"); +gr->Plot(y2,"k2"); +@end verbatim +@strong{MGL code} +@end ifclear +@verbatim +new y1 50 +new y2 50 +modify y1 '0.3*sin(2*pi*x)' +modify y2 '0.5+0.3*cos(2*pi*x)' +box +region y1 y2 'yr' +plot y1 'k2' +plot y2 'k2' +@end verbatim +@ifclear UDAV +@strong{Pure C code} +@verbatim +HMDT y1 = mgl_create_data_size(50,1,1); +HMDT y2 = mgl_create_data_size(50,1,1); +mgl_data_modify(y1,"0.3*sin(2*pi*x)",0); +mgl_data_modify(y2,"0.5+0.3*cos(2*pi*x)",0); +mgl_box(gr,1); +mgl_region(gr,y1,y2,"yr",1); +mgl_plot(gr,y1,"k2"); +mgl_plot(gr,y2,"k2"); +mgl_delete_data(y1); +mgl_delete_data(y2); +@end verbatim +@strong{Fortran code} +@verbatim +integer y1, y2, mgl_create_data_size +y1 = mgl_create_data_size(50,1,1); +y2 = mgl_create_data_size(50,1,1); +call mgl_data_modify(y1,'0.3*sin(2*pi*x)',0); +call mgl_data_modify(y2,'0.5+0.3*cos(2*pi*x)',0); +call mgl_box(gr,1); +call mgl_region(gr,y1,y2,'yr',1); +call mgl_plot(gr,y1,'k2'); +call mgl_plot(gr,y2,'k2'); +call mgl_delete_data(y1); +call mgl_delete_data(y2); +@end verbatim +@strong{Python} +@verbatim +y1, y2, x = mglData(50), mglData(50), mglData(50); +y1.Modify("0.3*sin(2*pi*x)"); +y2.Modify("0.5+0.3*cos(2*pi*x)"); +gr.Box(); +gr.Region(y1,y2,"yr"); +gr.Plot(y1,"k2"); +gr.Plot(y2,"k2"); +@end verbatim +@end ifclear @c ------------------------------------------------------------------ -@node Error sample, BoxPlot sample, Region sample, 1D plotting samples +@node Error sample, BoxPlot sample, Region gradient sample, 1D plotting samples @subsection Error sample @cindex Error - @float -@image{png/error, 7cm} -@caption{Example of Error. @tdref{error}} +@image{../png/error, 7cm} +@c @caption{Example of Error. @tdref{error}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData y(50,1), x0(10), y0(10), ex(10), ey(10); @@ -658,6 +959,7 @@ gr->Plot(y); gr->Error(x0,y0,ex,ey,"ko"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new y 50 new x0 10 @@ -673,6 +975,7 @@ box plot y error x0 y0 ex ey 'ko' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT y = mgl_create_data_size(50,1,1); @@ -684,7 +987,6 @@ mgl_data_modify(y,"0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0); mgl_data_modify(x0,"2*x-1 + 0.1*rnd-0.05",0); mgl_data_modify(y0,"0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x) + 0.2*rnd-0.1",0); mgl_data_modify(ey,"0.2",0); mgl_data_modify(ex,"0.1",0); - mgl_box(gr,1); mgl_plot(gr,y,NULL); mgl_error_exy(gr,x0,y0,ex,ey,"ko"); @@ -706,7 +1008,6 @@ call mgl_data_modify(y0,'0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + & 0.2*sin(pi*x) + 0.2*rnd-0.1',0); call mgl_data_modify(ey,'0.2',0) call mgl_data_modify(ex,'0.1',0); - call mgl_box(gr,1) call mgl_plot(gr,y,'') call mgl_error_exy(gr,x0,y0,ex,ey,'ko') @@ -726,17 +1027,16 @@ ey.Modify("0.2"); ex.Modify("0.1"); gr.Box(); gr.Plot(y); gr.Error(x0,y0,ex,ey,"ko"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node BoxPlot sample, Mark sample, Error sample, 1D plotting samples @subsection BoxPlot sample @cindex BoxPlot - @float -@image{png/boxplot, 7cm} -@caption{Example of BoxPlot. @tdref{boxplot}} +@image{../png/boxplot, 7cm} +@c @caption{Example of BoxPlot. @tdref{boxplot}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(10,7); @@ -746,17 +1046,18 @@ gr->Box(); gr->Plot(a," ko"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 10 7 modify a '(2*rnd-1)^3/2' boxplot a box:plot a ' ko' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(10,7,1); mgl_data_modify(a,"(2*rnd-1)^3/2",0); - mgl_box(gr,1); mgl_plot(gr,a," ko"); mgl_boxplot(gr,a,NULL); @@ -767,7 +1068,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size y = mgl_create_data_size(10,7,1) call mgl_data_modify(a,'(2*rnd-1)^3/2',0); - call mgl_box(gr,1) call mgl_plot(gr,a,' ko') call mgl_boxplot(gr,a,'') @@ -781,17 +1081,16 @@ gr.Box(); gr.Plot(a," ko"); gr.BoxPlot(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Mark sample, TextMark sample, BoxPlot sample, 1D plotting samples @subsection Mark sample @cindex Mark - @float -@image{png/mark, 7cm} -@caption{Example of Mark. @tdref{mark}} +@image{../png/mark, 7cm} +@c @caption{Example of Mark. @tdref{mark}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData y(50,3), y1(50); @@ -803,6 +1102,7 @@ gr->Box(); gr->Mark(y,y1,"bs"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new y 50 3 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)' @@ -813,6 +1113,7 @@ modify y1 '0.5+0.3*cos(2*pi*x)' box mark y y1 'bs' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT y = mgl_create_data_size(50,3,1); @@ -849,17 +1150,16 @@ y1.Modify("0.5+0.3*cos(2*pi*x)"); gr.Box(); gr.Mark(y,y1,"bs"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node TextMark sample, Tube sample, Mark sample, 1D plotting samples @subsection TextMark sample @cindex TextMark - @float -@image{png/textmark, 7cm} -@caption{Example of TextMark. @tdref{textmark}} +@image{../png/textmark, 7cm} +@c @caption{Example of TextMark. @tdref{textmark}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData y(50,3), y1(50); @@ -871,6 +1171,7 @@ gr->Box(); gr->TextMark(y,y1,"\\gamma"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new y 50 3 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)' @@ -881,6 +1182,7 @@ modify y1 '0.5+0.3*cos(2*pi*x)' box textmark y y1 '\gamma' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT y, y1; @@ -918,48 +1220,46 @@ y1.Modify("0.5+0.3*cos(2*pi*x)"); gr.Box(); gr.TextMark(y,y1,"\\gamma"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Tube sample, Text sample, TextMark sample, 1D plotting samples @subsection Tube sample @cindex Tube - @float -@image{png/tube, 7cm} -@caption{Example of Tube. @tdref{tube}} +@image{../png/tube, 7cm} +@c @caption{Example of Tube. @tdref{tube}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData y(50,3); y.Modify("0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0); y.Modify("sin(2*pi*x)",1); y.Modify("cos(2*pi*x)",2); - gr->Rotate(40,60); gr->Light(true); gr->Box(); gr->Tube(y,0.05); @end verbatim @strong{MGL code} +@end ifclear @verbatim new y 50 3 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)' modify y 'sin(2*pi*x)' 1 modify y 'cos(2*pi*x)' 2 - rotate 40 60 light on box tube y 0.05 @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT y = mgl_create_data_size(50,3,1); mgl_data_modify(y,"0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0); mgl_data_modify(y,"sin(2*pi*x)",1); mgl_data_modify(y,"cos(2*pi*x)",2); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -973,7 +1273,6 @@ y = mgl_create_data_size(50,3,1) call mgl_data_modify(y,'0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)',0) call mgl_data_modify(y,'sin(2*pi*x)',1) call mgl_data_modify(y,'cos(2*pi*x)',2) - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -988,17 +1287,16 @@ y.Modify("sin(2*pi*x)",1); y.Modify("cos(2*pi*x)",2); gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Tube(y,0.05); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Text sample, Torus sample, Tube sample, 1D plotting samples @subsection Text sample @cindex Text - @float -@image{png/text, 7cm} -@caption{Example of Text. @tdref{text}} +@image{../png/text, 7cm} +@c @caption{Example of Text. @tdref{text}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData y(50,3); @@ -1011,6 +1309,7 @@ gr->Text(y,"This is very long string drawn along a curve",":k"); gr->Text(y,"Another string drawn above a curve","T:r"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new y 50 3 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)' @@ -1021,6 +1320,7 @@ plot y(:,0) text y 'This is very long string drawn along a curve' ':k' text y 'Another string drawn above a curve' 'T:r' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT y = mgl_create_data_size(50,1,1); @@ -1052,47 +1352,45 @@ gr.Plot(y.SubData(-1,0)); gr.Text(y,"This is very long string drawn along a curve",":k"); gr.Text(y,"Another string drawn above a curve","T:r"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Torus sample, Chart sample, Text sample, 1D plotting samples @subsection Torus sample @cindex Torus - @float -@image{png/torus, 7cm} -@caption{Example of Torus. @tdref{torus}} +@image{../png/torus, 7cm} +@c @caption{Example of Torus. @tdref{torus}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData y1(50), y2(50); y1.Modify("0.5+0.3*cos(2*pi*x)"); y2.Modify("0.3*sin(2*pi*x)"); - gr->Rotate(40,60); gr->Light(true); gr->Box(); gr->Torus(y1,y2,"pz"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new y1 50 new y2 50 modify y1 '0.5+0.3*cos(2*pi*x)' modify y2 '0.3*sin(2*pi*x)' - rotate 40 60 light on box torus y1 y2 'pz' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT y1 = mgl_create_data_size(50,1,1); HMDT y2 = mgl_create_data_size(50,1,1); mgl_data_modify(y1,"0.5+0.3*cos(2*pi*x)",0); mgl_data_modify(y2,"0.3*sin(2*pi*x)",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -1107,7 +1405,6 @@ y1 = mgl_create_data_size(50,1,1); y2 = mgl_create_data_size(50,1,1); call mgl_data_modify(y1,"0.5+0.3*cos(2*pi*x)",0); call mgl_data_modify(y2,"0.3*sin(2*pi*x)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -1124,42 +1421,40 @@ gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Torus(y1,y2,"pz"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Chart sample, Pie chart sample, Torus sample, 1D plotting samples @subsection Chart sample @cindex Chart - @float -@image{png/chart, 7cm} -@caption{Example of Chart. @tdref{chart}} +@image{../png/chart, 7cm} +@c @caption{Example of Chart. @tdref{chart}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData ch(7,2); ch.Modify("rnd+0.1"); - gr->Rotate(40,60); gr->Light(true); gr->Box(); gr->Chart(ch,"#"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new ch 7 2 modify ch 'rnd+0.1' - rotate 40 60 light on box chart ch @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT ch = mgl_create_data_size(7,2,1); mgl_data_modify(ch,"rnd+0.1",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -1171,7 +1466,6 @@ mgl_delete_data(ch); integer ch, mgl_create_data_size ch = mgl_create_data_size(7,2,1) call mgl_data_modify(ch,'rnd+0.1',0) - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -1185,23 +1479,21 @@ gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Chart(ch,"#"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ -@node Pie chart sample, , Chart sample, 1D plotting samples +@node Pie chart sample, Ring chart sample, Chart sample, 1D plotting samples @subsection Pie chart sample @cindex Chart @cindex Axis - @float -@image{png/pie_chart, 7cm} -@caption{Example of Chart in cylindrical coordinates. @tdref{pie_chart}} +@image{../png/pie_chart, 7cm} +@c @caption{Example of Chart in cylindrical coordinates. @tdref{pie_chart}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData ch(7,2); ch.Modify("rnd+0.1"); - gr->Rotate(40,60); gr->Light(true); gr->SetFunc("(y+1)/2*cos(pi*x)","(y+1)/2*sin(pi*x)"); @@ -1209,24 +1501,88 @@ gr->Box(); gr->Chart(ch,"bgr cmy#"); @end verbatim @strong{MGL code} +@end ifclear +@verbatim +new ch 7 2 +modify ch 'rnd+0.1' +rotate 40 60 +light on +axis '(y+1)/2*cos(pi*x)' '(y+1)/2*sin(pi*x)' '' +box +chart ch 'bgr cmy#' +@end verbatim +@ifclear UDAV +@strong{Pure C code} +@verbatim +HMDT ch = mgl_create_data_size(7,2,1); +mgl_data_modify(ch,"rnd+0.1",0); +mgl_rotate(gr,40.,60.,0.); +mgl_set_light(gr,1); +mgl_set_func(gr,"(y+1)/2*cos(pi*x)","(y+1)/2*sin(pi*x)",0); +mgl_box(gr,1); +mgl_chart(gr,ch,"bgr cmy#"); +mgl_delete_data(ch); +@end verbatim +@strong{Fortran code} +@verbatim +integer ch, mgl_create_data_size +ch = mgl_create_data_size(7,2,1) +call mgl_data_modify(ch,'rnd+0.1',0) +call mgl_rotate(gr,40.,60.,0.) +call mgl_set_light(gr,1) +call mgl_set_func(gr,'(y+1)/2*cos(pi*x)','(y+1)/2*sin(pi*x)',''); +call mgl_box(gr,1) +call mgl_chart(gr,ch,'bgr cmy#') +call mgl_delete_data(ch) +@end verbatim +@strong{Python} +@verbatim +ch = mglData(7,2); ch.Modify("rnd+0.1"); +gr.Rotate(40,60); gr.Light(True); +gr.SetFunc("(y+1)/2*cos(pi*x)","(y+1)/2*sin(pi*x)"); +gr.Box(); +gr.Chart(ch,"bgr cmy#"); +@end verbatim +@end ifclear +@c ------------------------------------------------------------------ +@node Ring chart sample, , Pie chart sample, 1D plotting samples +@subsection Ring chart sample +@cindex Chart +@cindex Axis +@float +@image{../png/ring_chart, 7cm} +@c @caption{Example of Chart in cylindrical coordinates. @tdref{pie_chart}} +@end float +@ifclear UDAV +@strong{C++ code} +@verbatim +mglData ch(7,2); +ch.Modify("rnd+0.1"); +gr->Rotate(40,60); +gr->Light(true); +gr->SetFunc("(y+2)/3*cos(pi*x)","(y+2)/3*sin(pi*x)"); +gr->Box(); +gr->Chart(ch,"bgr cmy#"); +@end verbatim +@strong{MGL code} +@end ifclear @verbatim new ch 7 2 modify ch 'rnd+0.1' - rotate 40 60 light on -axis '(y+1)/2*cos(pi*x)' '(y+1)/2*sin(pi*x)' '' +axis '(y+2)/3*cos(pi*x)' '(y+2)/3*sin(pi*x)' '' box chart ch 'bgr cmy#' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT ch = mgl_create_data_size(7,2,1); mgl_data_modify(ch,"rnd+0.1",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); -mgl_set_func(gr,"(y+1)/2*cos(pi*x)","(y+1)/2*sin(pi*x)",0); +mgl_set_func(gr,"(y+2)/3*cos(pi*x)","(y+2)/3*sin(pi*x)",0); mgl_box(gr,1); mgl_chart(gr,ch,"bgr cmy#"); mgl_delete_data(ch); @@ -1236,10 +1592,9 @@ mgl_delete_data(ch); integer ch, mgl_create_data_size ch = mgl_create_data_size(7,2,1) call mgl_data_modify(ch,'rnd+0.1',0) - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) -call mgl_set_func(gr,'(y+1)/2*cos(pi*x)','(y+1)/2*sin(pi*x)',''); +call mgl_set_func(gr,'(y+2)/3*cos(pi*x)','(y+2)/3*sin(pi*x)',''); call mgl_box(gr,1) call mgl_chart(gr,ch,'bgr cmy#') call mgl_delete_data(ch) @@ -1248,15 +1603,14 @@ call mgl_delete_data(ch) @verbatim ch = mglData(7,2); ch.Modify("rnd+0.1"); gr.Rotate(40,60); gr.Light(True); -gr.SetFunc("(y+1)/2*cos(pi*x)","(y+1)/2*sin(pi*x)"); +gr.SetFunc("(y+2)/3*cos(pi*x)","(y+2)/3*sin(pi*x)"); gr.Box(); gr.Chart(ch,"bgr cmy#"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node 2D plotting samples, 3D plotting samples, 1D plotting samples, Samples @section 2D plotting samples - @menu * Surf sample:: * Transparent surface sample:: @@ -1272,43 +1626,41 @@ gr.Chart(ch,"bgr cmy#"); * ContF sample:: * ContD sample:: * Axial sample:: +* Grad sample:: @end menu - @c ------------------------------------------------------------------ @node Surf sample, Transparent surface sample, , 2D plotting samples @subsection Surf sample @cindex Surf - @float -@image{png/surf, 7cm} -@caption{Example of Surf. @tdref{surf}} +@image{../png/surf, 7cm} +@c @caption{Example of Surf. @tdref{surf}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Box(); gr->Surf(a); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on box surf a @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -1320,7 +1672,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -1334,23 +1685,21 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Surf(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Transparent surface sample, Surface in fog sample, Surf sample, 2D plotting samples @subsection Transparent surface sample @cindex Surf @cindex Alpha - @float -@image{png/surf_alpha, 7cm} -@caption{Example of Surf & Alpha. @tdref{surf_alpha}} +@image{../png/surf_alpha, 7cm} +@c @caption{Example of Surf & Alpha. @tdref{surf_alpha}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Alpha(true); @@ -1358,21 +1707,21 @@ gr->Box(); gr->Surf(a); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on alpha on box surf a @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_alpha(gr,1); @@ -1385,7 +1734,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_alpha(gr,1) @@ -1401,23 +1749,21 @@ gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Alpha(True); gr.Surf(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Surface in fog sample, Sharp colors sample, Transparent surface sample, 2D plotting samples @subsection Surface in fog sample @cindex Surf @cindex Fog - @float -@image{png/surf_fog, 7cm} -@caption{Example of Surf & Fog. @tdref{surf_fog}} +@image{../png/surf_fog, 7cm} +@c @caption{Example of Surf & Fog. @tdref{surf_fog}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Fog(1); @@ -1425,21 +1771,21 @@ gr->Box(); gr->Surf(a); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on fog 1 box surf a @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_fog(gr,1.,0.25); @@ -1452,7 +1798,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_fog(gr,1.,0.25) @@ -1468,42 +1813,40 @@ gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Fog(1); gr.Surf(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Sharp colors sample, Mesh sample, Surface in fog sample, 2D plotting samples @subsection Sharp colors sample @cindex Surf - @float -@image{png/surf_sl, 7cm} -@caption{Example of sharp color scheme. @tdref{surf_sl}} +@image{../png/surf_sl, 7cm} +@c @caption{Example of sharp color scheme. @tdref{surf_sl}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Box(); gr->Surf(a,"BbcyrR|"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on box surf a 'BbcyrR|' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -1515,7 +1858,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -1529,40 +1871,38 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Surf(a,"BbcyrR|"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Mesh sample, Fall sample, Sharp colors sample, 2D plotting samples @subsection Mesh sample @cindex Mesh - @float -@image{png/mesh, 7cm} -@caption{Example of Mesh. @tdref{mesh}} +@image{../png/mesh, 7cm} +@c @caption{Example of Mesh. @tdref{mesh}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Box(); gr->Mesh(a); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 box mesh a @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_box(gr,1); mgl_mesh(gr,a,0); @@ -1573,7 +1913,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_box(gr,1) call mgl_mesh(gr,a,'') @@ -1586,40 +1925,38 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Mesh(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Fall sample, Belt sample, Mesh sample, 2D plotting samples @subsection Fall sample @cindex Fall - @float -@image{png/fall, 7cm} -@caption{Example of Fall. @tdref{fall}} +@image{../png/fall, 7cm} +@c @caption{Example of Fall. @tdref{fall}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Box(); gr->Fall(a); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 box fall a @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_box(gr,1); mgl_fall(gr,a,0); @@ -1630,7 +1967,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_box(gr,1) call mgl_fall(gr,a,'') @@ -1643,42 +1979,40 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Fall(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Belt sample, Tile sample, Fall sample, 2D plotting samples @subsection Belt sample @cindex Belt - @float -@image{png/belt, 7cm} -@caption{Example of Belt. @tdref{belt}} +@image{../png/belt, 7cm} +@c @caption{Example of Belt. @tdref{belt}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Box(); gr->Belt(a); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on box belt a @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -1690,7 +2024,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -1704,42 +2037,40 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Belt(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Tile sample, Boxs sample, Belt sample, 2D plotting samples @subsection Tile sample @cindex Tile - @float -@image{png/tile, 7cm} -@caption{Example of Tile. @tdref{tile}} +@image{../png/tile, 7cm} +@c @caption{Example of Tile. @tdref{tile}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Box(); gr->Tile(a); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on box tile a @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -1751,7 +2082,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -1765,17 +2095,16 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Tile(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Boxs sample, Dens sample, Tile sample, 2D plotting samples @subsection Boxs sample @cindex Boxs - @float -@image{png/boxs, 7cm} -@caption{Example of Boxs. @tdref{boxs}} +@image{../png/boxs, 7cm} +@c @caption{Example of Boxs. @tdref{boxs}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(50,40); @@ -1786,6 +2115,7 @@ gr->Box(); gr->Boxs(a); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' @@ -1795,11 +2125,11 @@ origin 0 0 0 box boxs a @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_origin(gr,0.,0.,0.); @@ -1812,7 +2142,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_origin(gr,0.,0.,0.); @@ -1828,18 +2157,17 @@ gr.Rotate(40,60); gr.Light(True); gr.SetOrigin(0.,0.,0.); gr.Box(); gr.Boxs(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Dens sample, Cont sample, Boxs sample, 2D plotting samples @subsection Dens sample @cindex Dens @cindex Colorbar - @float -@image{png/dens, 7cm} -@caption{Example of Dens & Colorbar. @tdref{dens}} +@image{../png/dens, 7cm} +@c @caption{Example of Dens & Colorbar. @tdref{dens}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(50,40); @@ -1849,6 +2177,7 @@ gr->Dens(a); gr->Colorbar(); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' @@ -1856,6 +2185,7 @@ box dens a colorbar @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(50,40,1); @@ -1883,17 +2213,16 @@ gr.Box(); gr.Dens(a); gr.Colorbar(); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Cont sample, ContF sample, Dens sample, 2D plotting samples @subsection Cont sample @cindex Cont - @float -@image{png/cont, 7cm} -@caption{Example of Cont. @tdref{cont}} +@image{../png/cont, 7cm} +@c @caption{Example of Cont. @tdref{cont}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(50,40); @@ -1903,6 +2232,7 @@ gr->Box(); gr->Cont(a); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' @@ -1910,11 +2240,11 @@ rotate 40 60 box cont a @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_box(gr,1); mgl_cont(gr,a,0,7,NAN); @@ -1928,7 +2258,6 @@ real zero, nan zero = 0; nan = zero/zero a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_box(gr,1) call mgl_cont(gr,a,'',7,nan) @@ -1942,41 +2271,39 @@ gr.Rotate(40,60); gr.Box(); gr.Cont(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node ContF sample, ContD sample, Cont sample, 2D plotting samples @subsection ContF sample @cindex ContF - @float -@image{png/contf, 7cm} -@caption{Example of ContF. @tdref{contf}} +@image{../png/contf, 7cm} +@c @caption{Example of ContF. @tdref{contf}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Box(); gr->ContF(a); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on box contf a @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -1991,7 +2318,6 @@ real zero, nan zero = 0; nan = zero/zero a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -2006,17 +2332,16 @@ gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.ContF(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node ContD sample, Axial sample, ContF sample, 2D plotting samples @subsection ContD sample @cindex ContD - @float -@image{png/contd, 7cm} -@caption{Example of ContD. @tdref{contd}} +@image{../png/contd, 7cm} +@c @caption{Example of ContD. @tdref{contd}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(50,40), v(9); @@ -2027,6 +2352,7 @@ gr->ContD(v,a); gr->Colorbar(v); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' @@ -2035,6 +2361,7 @@ box contd v a colorbar v @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(50,40,1); @@ -2069,22 +2396,20 @@ gr.Box(); gr.ContD(v,a); gr.Colorbar(v); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ -@node Axial sample, , ContD sample, 2D plotting samples +@node Axial sample, Grad sample, ContD sample, 2D plotting samples @subsection Axial sample @cindex Axial - @float -@image{png/axial, 7cm} -@caption{Example of Axial. @tdref{axial}} +@image{../png/axial, 7cm} +@c @caption{Example of Axial. @tdref{axial}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Alpha(true); @@ -2092,21 +2417,21 @@ gr->Box(); gr->Axial(a); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on alpha on box axial a @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_alpha(gr,1); @@ -2119,7 +2444,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_alpha(gr,1) @@ -2135,11 +2459,64 @@ gr.Rotate(40,60); gr.Light(True); gr.Alpha(True); gr.Box(); gr.Axial(a); @end verbatim - +@end ifclear +@c ------------------------------------------------------------------ +@node Grad sample, , Axial sample, 2D plotting samples +@subsection Grad sample +@cindex Grad +@float +@image{../png/grad, 7cm} +@c @caption{Example of Grad. @tdref{grad}} +@end float +@ifclear UDAV +@strong{C++ code} +@verbatim +mglData a(50,40); +a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); +gr->Box(); gr->Alpha(true); gr->Dens(a); +gr->Grad(a); +@end verbatim +@strong{MGL code} +@end ifclear +@verbatim +new a 50 40 +modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' +box:alpha on:dens a +grad a +@end verbatim +@ifclear UDAV +@strong{Pure C code} +@verbatim +HMDT a = mgl_create_data_size(50,40,1); +mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); +mgl_box(gr,1); +mgl_set_alpha(gr,1); +mgl_dens(gr,a,0,0); +mgl_grad(gr,a,0,0); +mgl_delete_data(a); +@end verbatim +@strong{Fortran code} +@verbatim +integer a, mgl_create_data_size +a = mgl_create_data_size(50,40,1); +call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); +call mgl_box(gr,1) +call mgl_set_alpha(gr,1) +call mgl_dens(gr,a,'',0) +call mgl_grad(gr,a,'',0) +call mgl_delete_data(a) +@end verbatim +@strong{Python} +@verbatim +a = mglData(50,40); +a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))"); +gr.Box(); gr.Alpha(1); gr.Dens(a); +gr.Colorbar(); +@end verbatim +@end ifclear @c ------------------------------------------------------------------ @node 3D plotting samples, Dual plotting samples, 2D plotting samples, Samples @section 3D plotting samples - @menu * Surf3 sample:: * Cloud sample:: @@ -2150,25 +2527,22 @@ gr.Axial(a); * Cont projection sample:: * Dens projection sample:: * CutMinMax sample:: -* ``Isocaps'' sample:: +* Isocaps sample:: * CutOff sample:: @end menu - @c ------------------------------------------------------------------ @node Surf3 sample, Cloud sample, , 3D plotting samples @subsection Surf3 sample @cindex Surf3 - @float -@image{png/surf3, 7cm} -@caption{Example of Surf3. @tdref{surf3}} +@image{../png/surf3, 7cm} +@c @caption{Example of Surf3. @tdref{surf3}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Light(true); gr->Alpha(true); @@ -2176,21 +2550,21 @@ gr->Box(); gr->Surf3(a); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' - rotate 40 60 light on alpha on box surf3 a @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_alpha(gr,1); @@ -2203,7 +2577,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_alpha(gr,1) @@ -2219,42 +2592,40 @@ gr.Rotate(40,60); gr.Light(True); gr.Alpha(True); gr.Box(); gr.Surf3(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Cloud sample, CloudP sample, Surf3 sample, 3D plotting samples @subsection Cloud sample @cindex Cloud - @float -@image{png/cloud, 7cm} -@caption{Example of Cloud. @tdref{cloud}} +@image{../png/cloud, 7cm} +@c @caption{Example of Cloud. @tdref{cloud}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Alpha(true); gr->Box(); gr->Cloud(a,"wyrRk"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' - rotate 40 60 alpha on box cloud a 'wyrRk' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_alpha(gr,1); mgl_box(gr,1); @@ -2266,7 +2637,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_alpha(gr,1) call mgl_box(gr,1) @@ -2281,36 +2651,33 @@ gr.Rotate(40,60); gr.Alpha(True); gr.Box(); gr.Cloud(a,"wyrRk"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node CloudP sample, Dens3 sample, Cloud sample, 3D plotting samples @subsection CloudP sample @cindex CloudP - @float -@image{png/cloudp, 7cm} -@caption{Example of CloudP. @tdref{cloudp}} +@image{../png/cloudp, 7cm} +@c @caption{Example of CloudP. @tdref{cloudp}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Alpha(true); gr->Box(); gr->CloudP(a,"wyrRk"); @end verbatim @strong{MGL code} - +@end ifclear Not available. - +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_alpha(gr,1); mgl_box(gr,1); @@ -2322,7 +2689,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_alpha(gr,1) call mgl_box(gr,1) @@ -2330,36 +2696,32 @@ call mgl_cloudp(gr,a,'wyrRk',1.) call mgl_delete_data(a) @end verbatim @strong{Python} - Not available. - - +@end ifclear @c ------------------------------------------------------------------ @node Dens3 sample, Cont3 sample, CloudP sample, 3D plotting samples @subsection Dens3 sample @cindex Dens3 @cindex Axis - @float -@image{png/densa, 7cm} -@caption{Example of Dens3. @tdref{densa}} +@image{../png/densa, 7cm} +@c @caption{Example of Dens3. @tdref{densa}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Alpha(true); gr->Org = mglPoint(0,0,0); gr->Box(); gr->DensA(a); gr->Axis(); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' - rotate 40 60 alpha on origin 0 0 0 @@ -2367,11 +2729,11 @@ box densa a axis @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_alpha(gr,1); mgl_set_origin(gr,0.,0.,0.); @@ -2385,7 +2747,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_alpha(gr,1) call mgl_set_origin(gr,0.,0.,0.); @@ -2403,40 +2764,38 @@ gr.SetOrigin(0,0,0); gr.Box(); gr.Axis(); gr.DensA(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Cont3 sample, ContF3 sample, Dens3 sample, 3D plotting samples @subsection Cont3 sample @cindex Cont3 - @float -@image{png/conta, 7cm} -@caption{Example of Cont3. @tdref{conta}} +@image{../png/conta, 7cm} +@c @caption{Example of Cont3. @tdref{conta}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Box(); gr->ContA(a); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' - rotate 40 60 box conta a @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_box(gr,1); mgl_cont_all(gr,a,0,7); @@ -2447,7 +2806,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_box(gr,1) call mgl_cont_all(gr,a,'',7) @@ -2461,41 +2819,39 @@ gr.Rotate(40,60); gr.Box(); gr.ContA(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node ContF3 sample, Cont projection sample, Cont3 sample, 3D plotting samples @subsection ContF3 sample @cindex ContF3 - @float -@image{png/contfa, 7cm} -@caption{Example of ContF3. @tdref{contfa}} +@image{../png/contfa, 7cm} +@c @caption{Example of ContF3. @tdref{contfa}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Light(true); gr->Box(); gr->ContFA(a); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' - rotate 40 60 light on box contfa a @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -2507,7 +2863,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -2522,24 +2877,22 @@ gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.ContFA(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Cont projection sample, Dens projection sample, ContF3 sample, 3D plotting samples @subsection Cont projection sample @cindex ContX @cindex ContY @cindex ContZ - @float -@image{png/cont_xyz, 7cm} -@caption{Example of projection by Cont[XYZ]. @tdref{cont_xyz}} +@image{../png/cont_xyz, 7cm} +@c @caption{Example of projection by Cont[XYZ]. @tdref{cont_xyz}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Box(); gr->ContX(a.Sum("x"),"",-1); @@ -2547,10 +2900,10 @@ gr->ContY(a.Sum("y"),"",1); gr->ContZ(a.Sum("z"),"",-1); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' - rotate 40 60 box sum s a 'x' @@ -2560,11 +2913,11 @@ conty s '' 1 sum s a 'z' contz s '' -1 @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(60,50,40), s; mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_box(gr,1); s=mgl_data_sum(a,"x"); mgl_cont_x(gr,s,0,-1.,7); mgl_delete_data(s); @@ -2577,7 +2930,6 @@ mgl_delete_data(a); integer a,s, mgl_create_data_size, mgl_data_sum a = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_box(gr,1) s=mgl_data_sum(a,'x') @@ -2600,24 +2952,22 @@ gr.ContX(a.Sum("x"),"",-1); gr.ContY(a.Sum("y"),"",1); gr.ContZ(a.Sum("z"),"",-1); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Dens projection sample, CutMinMax sample, Cont projection sample, 3D plotting samples @subsection Dens projection sample @cindex DensX @cindex DensY @cindex DensZ - @float -@image{png/dens_xyz, 7cm} -@caption{Example of projection by Dens[XYZ]. @tdref{dens_xyz}} +@image{../png/dens_xyz, 7cm} +@c @caption{Example of projection by Dens[XYZ]. @tdref{dens_xyz}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Box(); gr->DensX(a.Sum("x"),"",-1); @@ -2625,10 +2975,10 @@ gr->DensY(a.Sum("y"),"",1); gr->DensZ(a.Sum("z"),"",-1); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' - rotate 40 60 box sum s a 'x' @@ -2638,11 +2988,11 @@ densy s '' 1 sum s a 'z' densz s '' -1 @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a, s; a = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_box(gr,1); s=mgl_data_sum(a,"x"); mgl_dens_x(gr,s,0,-1.); mgl_delete_data(s); @@ -2655,7 +3005,6 @@ mgl_delete_data(a); integer a,s, mgl_create_data_size, mgl_data_sum a = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_box(gr,1) s=mgl_data_sum(a,'x') @@ -2678,24 +3027,22 @@ gr.DensX(a.Sum("x"),"",-1); gr.DensY(a.Sum("y"),"",1); gr.DensZ(a.Sum("z"),"",-1); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ -@node CutMinMax sample, ``Isocaps'' sample, Dens projection sample, 3D plotting samples +@node CutMinMax sample, Isocaps sample, Dens projection sample, 3D plotting samples @subsection CutMinMax sample @cindex Surf3 @cindex CutMin @cindex CutMax - @float -@image{png/cutminmax, 7cm} -@caption{Example of Surf3 & CutMin, CutMax. @tdref{cutminmax}} +@image{../png/cutminmax, 7cm} +@c @caption{Example of Surf3 & CutMin, CutMax. @tdref{cutminmax}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Light(true); gr->Alpha(true); @@ -2704,10 +3051,10 @@ gr->Box(); gr->Surf3(a); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' - rotate 40 60 light on alpha on @@ -2715,11 +3062,11 @@ cut 0 -1 -1 1 0 1 box surf3 a @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_alpha(gr,1); @@ -2733,7 +3080,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_alpha(gr,1) @@ -2750,25 +3096,23 @@ gr.Rotate(40,60); gr.Light(True); gr.Alpha(True); gr.SetCutBox(0,-1,-1,1,0,1); gr.Box(); gr.Surf3(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ -@node ``Isocaps'' sample, CutOff sample, CutMinMax sample, 3D plotting samples +@node Isocaps sample, CutOff sample, CutMinMax sample, 3D plotting samples @subsection ``Isocaps'' sample @cindex Surf3 @cindex ContF3 @cindex CutMin @cindex CutMax - @float -@image{png/cutminmax2, 7cm} -@caption{Example of ``Isocaps''. @tdref{cutminmax2}} +@image{../png/cutminmax2, 7cm} +@c @caption{Example of ``Isocaps''. @tdref{cutminmax2}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(61,51,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Light(true); gr->CutMin = mglPoint(0,-1,-1); gr->CutMax = mglPoint(1,0,1.1); @@ -2778,10 +3122,10 @@ gr->ContF3(a,'x',-1); gr->ContF3(a,'y',-1); gr->ContF3(a,'z', 0); gr->ContF3(a,'z',39); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 61 51 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' - rotate 40 60 light on cut 0 -1 -1 1 0 1.1 @@ -2792,11 +3136,11 @@ contf3 a 'y' -1 contf3 a 'z' 0 contf3 a 'z' 39 @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(61,51,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_cut_box(gr,0.,-1.,-1.,1.,0.,1.1); @@ -2812,7 +3156,6 @@ mgl_delete_data(a); @verbatim a = mgl_create_data_size(61,51,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_cut_box(gr,0.,-1.,-1.,1.,0.,1.1); @@ -2834,23 +3177,21 @@ gr.Surf3(-1,a); gr.ContF3(a,"x",-1); gr.ContF3(a,"y",-1); gr.ContF3(a,"z",0); gr.ContF3(a,"z",39); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ -@node CutOff sample, , ``Isocaps'' sample, 3D plotting samples +@node CutOff sample, , Isocaps sample, 3D plotting samples @subsection CutOff sample @cindex Surf3 @cindex CutOff - @float -@image{png/surf3_cutoff, 7cm} -@caption{Example of Surf3 & CutOff. @tdref{surf3_cutoff}} +@image{../png/surf3_cutoff, 7cm} +@c @caption{Example of Surf3 & CutOff. @tdref{surf3_cutoff}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Light(true); gr->Alpha(true); @@ -2859,10 +3200,10 @@ gr->Box(); gr->Surf3(a); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' - rotate 40 60 light on alpha on @@ -2870,11 +3211,11 @@ cut '(z>(x+0.5*y-1)^2-1) & (z>(x-0.5*y-1)^2-1)' box surf3 a @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_alpha(gr,1); @@ -2888,7 +3229,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(60,50,40); call mgl_data_modify(a,'-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)',0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_alpha(gr,1) @@ -2906,12 +3246,10 @@ gr.CutOff("(z>(x+0.5*y-1)^2-1) & (z>(x-0.5*y-1)^2-1)"); gr.Box(); gr.Surf3(a); @end verbatim - - +@end ifclear @c ------------------------------------------------------------------ -@node Dual plotting samples, Additional features, 3D plotting samples, Samples +@node Dual plotting samples, Basic features, 3D plotting samples, Samples @section Dual plotting samples - @menu * SurfC sample:: * SurfA sample:: @@ -2934,47 +3272,44 @@ gr.Surf3(a); * Crust sample:: * Dots sample:: @end menu - @c ------------------------------------------------------------------ @node SurfC sample, SurfA sample, , Dual plotting samples @subsection SurfC sample @cindex SurfC - @float -@image{png/surfc, 7cm} -@caption{Example of SurfC. @tdref{surfc}} +@image{../png/surfc, 7cm} +@c @caption{Example of SurfC. @tdref{surfc}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(50,40), b(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Box(); gr->SurfC(a,b); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 50 40 new b 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on box surfc a b @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(50,40,1); HMDT b = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -2988,7 +3323,6 @@ a = mgl_create_data_size(50,40,1); b = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -3005,23 +3339,21 @@ gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.SurfC(a,b); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node SurfA sample, TileS sample, SurfC sample, Dual plotting samples @subsection SurfA sample @cindex SurfA - @float -@image{png/surfa, 7cm} -@caption{Example of SurfA. @tdref{surfa}} +@image{../png/surfa, 7cm} +@c @caption{Example of SurfA. @tdref{surfa}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(50,40), b(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Alpha(true); @@ -3029,18 +3361,19 @@ gr->Box(); gr->SurfA(a,b); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 50 40 new b 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on alpha on box surfa a b @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a, b; @@ -3048,7 +3381,6 @@ a = mgl_create_data_size(50,40,1); b = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_alpha(gr,1); @@ -3063,7 +3395,6 @@ a = mgl_create_data_size(50,40,1); b = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_alpha(gr,1); @@ -3081,36 +3412,35 @@ gr.Rotate(40,60); gr.Light(True); gr.Alpha(True); gr.Box(); gr.SurfC(a,b); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node TileS sample, Map sample, SurfA sample, Dual plotting samples -@subsection Tiles sample +@subsection TileS sample @cindex TileS - @float -@image{png/tiles, 7cm} -@caption{Example of TileS. @tdref{tiles}} +@image{../png/tiles, 7cm} +@c @caption{Example of TileS. @tdref{tiles}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(50,40), b(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Box(); gr->TileS(a,b); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 50 40 new b 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))' - box tile a b @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a, b; @@ -3118,7 +3448,6 @@ a = mgl_create_data_size(50,40,1); b = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_box(gr,1); mgl_tiles(gr,a,b,0); mgl_delete_data(a); mgl_delete_data(b); @@ -3130,7 +3459,6 @@ a = mgl_create_data_size(50,40,1); b = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_box(gr,1) call mgl_tiles(gr,a,b,'') call mgl_delete_data(a) @@ -3144,28 +3472,25 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Box(); gr.TileS(a,b); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Map sample, Traj sample, TileS sample, Dual plotting samples @subsection Map sample @cindex Map - @float -@image{png/map, 7cm} -@caption{Example of Map. @tdref{map}} +@image{../png/map, 7cm} +@c @caption{Example of Map. @tdref{map}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(50, 40), b(50, 40); gr->Puts(mglPoint(0, 0), "\\to", "", -1.4); gr->Axis(mglPoint(-1,-1,-2),mglPoint(1,1,2)); - gr->SubPlot(2, 1, 0); a.Fill("x", gr->Min, gr->Max); b.Fill("y", gr->Min, gr->Max); gr->Puts(mglPoint(0, 1.1), "\\{x, y\\}", "C", -2); gr->Box(); gr->Map(a, b, "brgk", 0, false); - gr->SubPlot(2, 1, 1); a.Fill("(x^3+y^3)/2", gr->Min, gr->Max); b.Fill("(x-y)/2", gr->Min, gr->Max); @@ -3174,19 +3499,18 @@ gr->Box(); gr->Map(a, b, "brgk", 0, false); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 50 40 new b 50 40 text 0 0 '\to' zrange -2 2 - subplot 2 1 0 text 0 1.1 '\{x, y\}' '' -2 box fill a 'x' fill b 'y' map a b 'brgk' 0 0 - subplot 2 1 1 text 0 1.1 '\{\frac{x^3+y^3}{2}, \frac{x-y}{2}\}' '' -2 box @@ -3194,27 +3518,25 @@ fill a '(x^3+y^3)/2' fill b '(x-y)/2' map a b 'brgk' 0 0 @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(50,40,1); HMDT b = mgl_create_data_size(50,40,1); mgl_puts_ext(gr, 0.,0.,0., "\\to", "", -1.4, 't'); mgl_set_axis_3d(gr,-1.,-1.,-2.,1.,1.,2.); - mgl_subplot(gr, 2, 1, 0); mgl_data_fill_eq(gr, a, "x", 0, 0); mgl_data_fill_eq(gr, b, "y", 0, 0); mgl_puts_ext(gr, 0.,1.1,0., "\\{x, y\\}", "C", -2., 't'); mgl_box(gr,1); mgl_map(gr, a, b, "brgk", 0, 0); - mgl_subplot(gr, 2, 1, 1); mgl_data_fill_eq(gr, a, "(x^3+y^3)/2", 0, 0); mgl_data_fill_eq(gr, b, "(x-y)/2", 0, 0); mgl_puts_ext(gr, 0.,1.1,0., "\\{\\frac{x^3+y^3}{2}, \\frac{x-y}{2}\\}", "C", -2., 't'); mgl_box(gr,1); mgl_map(gr, a, b, "brgk", 0, 0); - mgl_box(gr,1); mgl_map(gr,a,b,0,0,1); mgl_delete_data(a); mgl_delete_data(b); @@ -3226,14 +3548,12 @@ a = mgl_create_data_size(50,40,1); b = mgl_create_data_size(50,40,1); call mgl_puts_ext(gr, 0.,0.,0., '\to', '', -1.4, 't'); call mgl_set_axis_3d(gr,-1.,-1.,-2.,1.,1.,2.); - call mgl_subplot(gr, 2, 1, 0); call mgl_data_fill_eq(gr, a, 'x', 0, 0); call mgl_data_fill_eq(gr, b, 'y', 0, 0); call mgl_puts_ext(gr, 0.,1.1,0., '\{x, y\}', 'C', -2., 't'); call mgl_box(gr,1); call mgl_map(gr, a, b, 'brgk', 0, 0); - call mgl_subplot(gr, 2, 1, 1); call mgl_data_fill_eq(gr, a, '(x^3+y^3)/2', 0, 0); call mgl_data_fill_eq(gr, b, '(x-y)/2', 0, 0); @@ -3250,30 +3570,27 @@ call mgl_delete_data(b) a, b = mglData(50,40), mglData(50,40); gr.Puts(0, 0, 0, "\\to", "", -1.4); gr.SetRanges(-1,1,-1,1,-2,2); - gr.SubPlot(2, 1, 0); gr.Fill(a, "x"); gr.Fill(b, "y"); gr.Puts(0, 1.1, 0, "\\{x, y\\}", "C", -2); gr.Box(); gr.Map(a, b, "brgk", 0, 0); - gr.SubPlot(2, 1, 1); gr.Fill(a, "(x^3+y^3)/2"); gr.Fill(b, "(x-y)/2"); gr.Puts(0, 1.1, 0, "\\{\\frac{x^3+y^3}{2}, \\frac{x-y}{2}\\}", "C", -2); gr.Box(); gr.Map(a, b, "brgk", 0, 0); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Traj sample, Vect sample, Map sample, Dual plotting samples @subsection Traj sample @cindex Traj - @float -@image{png/traj, 7cm} -@caption{Example of Plot. @tdref{traj}} +@image{../png/traj, 7cm} +@c @caption{Example of Plot. @tdref{traj}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData y(50,3), x(50), y1(50), y2(50); @@ -3283,12 +3600,12 @@ y.Modify("cos(2*pi*x)",2); y1.Modify("0.5+0.3*cos(2*pi*x)"); y2.Modify("0.3*sin(2*pi*x)"); x.Fill(-1,1,'x'); - gr->Box(); gr->Plot(x,y); gr->Traj(x,y,y1,y2); @end verbatim @strong{MGL code} +@end ifclear @verbatim new y 50 3 new x 50 @@ -3304,6 +3621,7 @@ box plot x y traj x y y1 y2 @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT y = mgl_create_data_size(50,3,1); @@ -3356,28 +3674,26 @@ gr.Box(); gr.Plot(x,y); gr.Traj(x,y,y1,y2); @end verbatim - - +@end ifclear @c ------------------------------------------------------------------ @node Vect sample, VectL sample, Traj sample, Dual plotting samples @subsection Vect sample @cindex Vect - @float -@image{png/vect, 7cm} -@caption{Example of Vect. @tdref{vect}} +@image{../png/vect, 7cm} +@c @caption{Example of Vect. @tdref{vect}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(20,30), b(20,30); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Box(); gr->Vect(a,b); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 20 30 new b 20 30 @@ -3386,13 +3702,13 @@ modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))' box vect a b @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(20,30,1); HMDT b = mgl_create_data_size(20,30,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_box(gr,1); mgl_vect_2d(gr,a,b,0,0.); mgl_delete_data(a); mgl_delete_data(b); @@ -3404,7 +3720,6 @@ a = mgl_create_data_size(20,30,1); b = mgl_create_data_size(20,30,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_box(gr,1) call mgl_vect_2d(gr,a,b,'',0.) call mgl_delete_data(a) @@ -3418,27 +3733,26 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Box(); gr.Vect(a,b); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node VectL sample, VectC sample, Vect sample, Dual plotting samples @subsection VectL sample @cindex VectL - @float -@image{png/vectl, 7cm} -@caption{Example of VectL. @tdref{vectl}} +@image{../png/vectl, 7cm} +@c @caption{Example of VectL. @tdref{vectl}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(20,30), b(20,30); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Box(); gr->VectL(a,b); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 20 30 new b 20 30 @@ -3447,6 +3761,7 @@ modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))' box vectl a b @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a, b; @@ -3454,7 +3769,6 @@ a = mgl_create_data_size(20,30,1); b = mgl_create_data_size(20,30,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_box(gr,1); mgl_vectl_2d(gr,a,b,0,0.); mgl_delete_data(a); mgl_delete_data(b); @@ -3466,7 +3780,6 @@ a = mgl_create_data_size(20,30,1); b = mgl_create_data_size(20,30,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_box(gr,1) call mgl_vectl_2d(gr,a,b,'',0.) call mgl_delete_data(a) @@ -3480,28 +3793,26 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Box(); gr.VectL(a,b); @end verbatim - - +@end ifclear @c ------------------------------------------------------------------ @node VectC sample, Flow sample, VectL sample, Dual plotting samples @subsection VectC sample @cindex VectC - @float -@image{png/vectc, 7cm} -@caption{Example of VectC. @tdref{vectc}} +@image{../png/vectc, 7cm} +@c @caption{Example of VectC. @tdref{vectc}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(20,30), b(20,30); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Box(); gr->VectC(a,b); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 20 30 new b 20 30 @@ -3510,6 +3821,7 @@ modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))' box vectc a b @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a, b; @@ -3517,7 +3829,6 @@ a = mgl_create_data_size(20,30,1); b = mgl_create_data_size(20,30,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_box(gr,1); mgl_vectc_2d(gr,a,b,0,0.); mgl_delete_data(a); mgl_delete_data(b); @@ -3529,7 +3840,6 @@ a = mgl_create_data_size(20,30,1); b = mgl_create_data_size(20,30,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_box(gr,1) call mgl_vectc_2d(gr,a,b,'',0.) call mgl_delete_data(a) @@ -3543,28 +3853,26 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Box(); gr.VectC(a,b); @end verbatim - - +@end ifclear @c ------------------------------------------------------------------ @node Flow sample, Pipe sample, VectC sample, Dual plotting samples @subsection Flow sample @cindex Flow - @float -@image{png/flow, 7cm} -@caption{Example of Flow. @tdref{flow}} +@image{../png/flow, 7cm} +@c @caption{Example of Flow. @tdref{flow}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(20,30), b(20,30); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Box(); gr->Flow(a,b); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 20 30 new b 20 30 @@ -3573,13 +3881,13 @@ modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))' box flow a b @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(20,30,1); HMDT b = mgl_create_data_size(20,30,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_box(gr,1); mgl_flow_2d(gr,a,b,0,5,1,0.); mgl_delete_data(a); mgl_delete_data(b); @@ -3591,7 +3899,6 @@ a = mgl_create_data_size(20,30,1); b = mgl_create_data_size(20,30,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_box(gr,1) call mgl_flow_2d(gr,a,b,'',5,1,0.) call mgl_delete_data(a) @@ -3605,17 +3912,16 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Box(); gr.Flow(a,b); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Pipe sample, Dew sample, Flow sample, Dual plotting samples @subsection Pipe sample @cindex Pipe - @float -@image{png/pipe, 7cm} -@caption{Example of Pipe. @tdref{pipe}} +@image{../png/pipe, 7cm} +@c @caption{Example of Pipe. @tdref{pipe}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(20,30), b(20,30); @@ -3626,6 +3932,7 @@ gr->Box(); gr->Pipe(a,b); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 20 30 new b 20 30 @@ -3635,6 +3942,7 @@ light on box pipe a b @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(20,30,1); @@ -3667,17 +3975,16 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Light(True); gr.Box(); gr.Pipe(a,b); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Dew sample, Surf3C sample, Pipe sample, Dual plotting samples @subsection Dew sample @cindex Dew - @float -@image{png/dew, 7cm} -@caption{Example of Dew. @tdref{dew}} +@image{../png/dew, 7cm} +@c @caption{Example of Dew. @tdref{dew}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(20,30), b(20,30); @@ -3688,6 +3995,7 @@ gr->Light(true); gr->Dew(a,b); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 20 30 new b 20 30 @@ -3697,6 +4005,7 @@ box light on dew a b @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(20,30,1); @@ -3729,23 +4038,21 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Light(True); gr.Box(); gr.Dew(a,b); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Surf3C sample, Surf3A sample, Dew sample, Dual plotting samples @subsection Surf3C sample @cindex Surf3C - @float -@image{png/surf3c, 7cm} -@caption{Example of Surf3C. @tdref{surf3c}} +@image{../png/surf3c, 7cm} +@c @caption{Example of Surf3C. @tdref{surf3c}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(60,50,40), b(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); b.Modify("1-2*tanh(4*(x+y-1)^2)"); - gr->Rotate(40,60); gr->Light(true); gr->Alpha(true); @@ -3753,25 +4060,25 @@ gr->Box(); gr->Surf3C(a, b); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 60 50 40 new b 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' modify b '1-2*tanh(4*(x+y-1)^2)' - rotate 40 60 light on alpha on box surf3c a b @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(60,50,40); HMDT b = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); mgl_data_modify(b,"1-2*tanh(4*(x+y-1)^2)",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_alpha(gr,1); @@ -3786,7 +4093,6 @@ a = mgl_create_data_size(60,50,40); b = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); call mgl_data_modify(b,"1-2*tanh(4*(x+y-1)^2)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_alpha(gr,1) @@ -3804,24 +4110,21 @@ gr.Rotate(40,60); gr.Light(True); gr.Alpha(True); gr.Box(); gr.Surf3C(a,b); @end verbatim - - +@end ifclear @c ------------------------------------------------------------------ @node Surf3A sample, Vect 3D sample, Surf3C sample, Dual plotting samples @subsection Surf3A sample @cindex Surf3A - @float -@image{png/surf3a, 7cm} -@caption{Example of Surf3A. @tdref{surf3a}} +@image{../png/surf3a, 7cm} +@c @caption{Example of Surf3A. @tdref{surf3a}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(60,50,40), b(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); b.Modify("1-2*tanh(4*(x+y-1)^2)"); - gr->Rotate(40,60); gr->Light(true); gr->Alpha(true); @@ -3829,25 +4132,25 @@ gr->Box(); gr->Surf3A(a, b); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 60 50 40 new b 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' modify b '1-2*tanh(4*(x+y-1)^2)' - rotate 40 60 light on alpha on box surf3a a b @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a, b; a = mgl_create_data_size(60,50,40); b = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); mgl_data_modify(b,"1-2*tanh(4*(x+y-1)^2)",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_alpha(gr,1); @@ -3862,7 +4165,6 @@ a = mgl_create_data_size(60,50,40); b = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); call mgl_data_modify(b,"1-2*tanh(4*(x+y-1)^2)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_alpha(gr,1) @@ -3880,17 +4182,16 @@ gr.Rotate(40,60); gr.Light(True); gr.Alpha(True); gr.Box(); gr.Surf3A(a,b); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Vect 3D sample, VectL 3D sample, Surf3A sample, Dual plotting samples @subsection Vect 3D sample @cindex Vect - @float -@image{png/vect3, 7cm} -@caption{Example of Vect in 3D. @tdref{vect3}} +@image{../png/vect3, 7cm} +@c @caption{Example of Vect in 3D. @tdref{vect3}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData ex(10,10,10), ey(10,10,10), ez(10,10,10); @@ -3905,6 +4206,7 @@ gr->Box(); gr->Vect(ex, ey, ez, "bwr"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new ex 10 10 10 new ey 10 10 10 @@ -3912,11 +4214,11 @@ new ez 10 10 10 fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)' fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)' fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)' - rotate 40 60 box vect ex ey ez 'bwr' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT ex, ey, ez; @@ -3929,7 +4231,6 @@ mgl_data_fill_eq(gr, ey, "0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - \ 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0); mgl_data_fill_eq(gr, ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \ 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0); - mgl_rotate(gr,40.,60.,0.); mgl_box(gr,1); mgl_vect_3d(gr,ex,ey,ez,"bwr"); @@ -3947,7 +4248,6 @@ call mgl_data_fill_eq(gr, ey, '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - & 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0); call mgl_data_fill_eq(gr, ez, '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - & 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0); - call mgl_rotate(gr,40.,60.,0.) call mgl_box(gr,1); call mgl_vect_3d(gr,ex,ey,ez,'bwr') @@ -3967,17 +4267,16 @@ gr.Fill(ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \ gr.Rotate(40,60); gr.Box(); gr.Vect(ex,ey,ez,"bwr"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node VectL 3D sample, VectC 3D sample, Vect 3D sample, Dual plotting samples @subsection VectL 3D sample @cindex VectL - @float -@image{png/vectl3, 7cm} -@caption{Example of VectL in 3D. @tdref{vectl3}} +@image{../png/vectl3, 7cm} +@c @caption{Example of VectL in 3D. @tdref{vectl3}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData ex(10,10,10), ey(10,10,10), ez(10,10,10); @@ -3992,6 +4291,7 @@ gr->Box(); gr->VectL(ex, ey, ez, "bwr"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new ex 10 10 10 new ey 10 10 10 @@ -3999,11 +4299,11 @@ new ez 10 10 10 fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)' fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)' fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)' - rotate 40 60 box vectl ex ey ez 'bwr' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT ex, ey, ez; @@ -4016,7 +4316,6 @@ mgl_data_fill_eq(gr, ey, "0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - \ 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0); mgl_data_fill_eq(gr, ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \ 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0); - mgl_rotate(gr,40.,60.,0.); mgl_box(gr,1); mgl_vectl_3d(gr,ex,ey,ez,"bwr"); @@ -4034,7 +4333,6 @@ call mgl_data_fill_eq(gr, ey, '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - & 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0); call mgl_data_fill_eq(gr, ez, '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - & 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0); - call mgl_rotate(gr,40.,60.,0.) call mgl_box(gr,1); call mgl_vectl_3d(gr,ex,ey,ez,'bwr') @@ -4054,17 +4352,16 @@ gr.Fill(ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \ gr.Rotate(40,60); gr.Box(); gr.VectL(ex,ey,ez,"bwr"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node VectC 3D sample, Flow 3D sample, VectL 3D sample, Dual plotting samples @subsection VectC 3D sample @cindex VectC - @float -@image{png/vectc3, 7cm} -@caption{Example of VectC in 3D. @tdref{vectc3}} +@image{../png/vectc3, 7cm} +@c @caption{Example of VectC in 3D. @tdref{vectc3}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData ex(10,10,10), ey(10,10,10), ez(10,10,10); @@ -4079,6 +4376,7 @@ gr->Box(); gr->VectC(ex, ey, ez, "bwr"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new ex 10 10 10 new ey 10 10 10 @@ -4086,11 +4384,11 @@ new ez 10 10 10 fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)' fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)' fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)' - rotate 40 60 box vectc ex ey ez 'bwr' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT ex, ey, ez; @@ -4103,7 +4401,6 @@ mgl_data_fill_eq(gr, ey, "0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - \ 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0); mgl_data_fill_eq(gr, ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \ 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0); - mgl_rotate(gr,40.,60.,0.); mgl_box(gr,1); mgl_vectc_3d(gr,ex,ey,ez,"bwr"); @@ -4121,7 +4418,6 @@ call mgl_data_fill_eq(gr, ey, '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - & 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0); call mgl_data_fill_eq(gr, ez, '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - & 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0); - call mgl_rotate(gr,40.,60.,0.) call mgl_box(gr,1); call mgl_vectc_3d(gr,ex,ey,ez,'bwr') @@ -4141,17 +4437,16 @@ gr.Fill(ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \ gr.Rotate(40,60); gr.Box(); gr.VectC(ex,ey,ez,"bwr"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Flow 3D sample, Pipe 3D sample, VectC 3D sample, Dual plotting samples @subsection Flow 3D sample @cindex Flow - @float -@image{png/flow3, 7cm} -@caption{Example of Flow in 3D. @tdref{flow3}} +@image{../png/flow3, 7cm} +@c @caption{Example of Flow in 3D. @tdref{flow3}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData ex(30,30,30), ey(30,30,30), ez(30,30,30); @@ -4166,6 +4461,7 @@ gr->Box(); gr->Flow(ex, ey, ez, "bwr"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new ex 30 30 30 new ey 30 30 30 @@ -4173,11 +4469,11 @@ new ez 30 30 30 fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)' fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)' fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)' - rotate 40 60 box flow ex ey ez 'bwr' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT ex, ey, ez; @@ -4190,7 +4486,6 @@ mgl_data_fill_eq(gr, ey, "0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - \ 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0); mgl_data_fill_eq(gr, ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \ 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0); - mgl_rotate(gr,40.,60.,0.); mgl_box(gr,1); mgl_flow_3d(gr,ex,ey,ez,"bwr",3,1); @@ -4208,7 +4503,6 @@ call mgl_data_fill_eq(gr, ey, '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - & 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0); call mgl_data_fill_eq(gr, ez, '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - & 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0); - call mgl_rotate(gr,40.,60.,0.) call mgl_box(gr,1); call mgl_flow_3d(gr,ex,ey,ez,'bwr',3,1) @@ -4228,17 +4522,16 @@ gr.Fill(ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \ gr.Rotate(40,60); gr.Box(); gr.Flow(ex,ey,ez,"bwr"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Pipe 3D sample, Crust sample, Flow 3D sample, Dual plotting samples @subsection Pipe 3D sample @cindex Pipe - @float -@image{png/pipe3, 7cm} -@caption{Example of Pipe in 3D. @tdref{pipe3}} +@image{../png/pipe3, 7cm} +@c @caption{Example of Pipe in 3D. @tdref{pipe3}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData ex(10,10,10), ey(10,10,10), ez(10,10,10); @@ -4254,6 +4547,7 @@ gr->Box(); gr->Pipe(ex, ey, ez, "bwr"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new ex 10 10 10 new ey 10 10 10 @@ -4261,12 +4555,12 @@ new ez 10 10 10 fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)' fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)' fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)' - rotate 40 60 light on box pipe ex ey ez 'bwr' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT ex, ey, ez; @@ -4279,7 +4573,6 @@ mgl_data_fill_eq(gr, ey, "0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - \ 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0); mgl_data_fill_eq(gr, ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \ 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -4298,7 +4591,6 @@ call mgl_data_fill_eq(gr, ey, '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - & 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0); call mgl_data_fill_eq(gr, ez, '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - & 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1); call mgl_box(gr,1); @@ -4319,17 +4611,16 @@ gr.Fill(ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \ gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Pipe(ex,ey,ez,"bwr"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Crust sample, Dots sample, Pipe 3D sample, Dual plotting samples @subsection Crust sample @cindex Crust - @float -@image{png/crust, 7cm} -@caption{Example of Crust. @tdref{crust}} +@image{../png/crust, 7cm} +@c @caption{Example of Crust. @tdref{crust}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a("hotdogs.pts"); @@ -4340,6 +4631,7 @@ gr->Box(); gr->Crust(a,"p"); @end verbatim @strong{MGL code} +@end ifclear @verbatim read a 'hotdogs.pts' norm a -1 1 on @@ -4348,6 +4640,7 @@ light on box crust a 'p' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_file("hotdogs.pts"); @@ -4377,17 +4670,16 @@ gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Crust(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Dots sample, , Crust sample, Dual plotting samples @subsection Dots sample @cindex Dots - @float -@image{png/dots, 7cm} -@caption{Example of Dots. @tdref{dots}} +@image{../png/dots, 7cm} +@c @caption{Example of Dots. @tdref{dots}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a("hotdogs.pts"); @@ -4397,6 +4689,7 @@ gr->Box(); gr->Dots(a,"p"); @end verbatim @strong{MGL code} +@end ifclear @verbatim read a 'hotdogs.pts' norm a -1 1 on @@ -4404,6 +4697,7 @@ rotate 40 60 box dots a 'p' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_file("hotdogs.pts"); @@ -4431,13 +4725,695 @@ gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Dots(a); @end verbatim +@end ifclear +@c ------------------------------------------------------------------ + +@c ------------------------------------------------------------------ +@node Basic features, Additional features, Dual plotting samples, Samples +@section Basic features +@menu +* 1D plot sample:: +* 2D plot sample:: +* 3D plot sample:: +* Line styles sample:: +* Arrow styles sample:: +* Text styles sample:: +* TeX parsing sample:: +* Font faces sample:: +* Colors sample:: +* Color schemes sample:: +* Normal transparency:: +* Glass-like transparency:: +* Lamp-like transparency:: +@end menu +@c ------------------------------------------------------------------ +@node 1D plot sample, 2D plot sample, , Basic features +@subsection 1D plot sample +@cindex Plot +@cindex Bars +@cindex SubPlot +@float +@image{../png/sample8, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ code} +@verbatim +mglData y0(50); y0.Modify("sin(pi*(2*x-1))"); +gr->SubPlot(2,2,0); +gr->Plot(y0); gr->Box(); + +gr->SubPlot(2,2,1); +mglData y1(50,2); +y1.Modify("sin(pi*2*x-pi)"); y1.Modify("cos(pi*2*x-pi)/2",1); +gr->Plot(y1); gr->Box(); + +mglData x(50); x.Modify("cos(pi*2*x-pi)"); +gr->Plot(x,y0,"Y+"); + +gr->Plot(y1.SubData(-1,0),y1.SubData(-1,1),"q|"); + +gr->SubPlot(2,2,2); gr->Rotate(60,40); +mglData z(50); z.Modify("2*x-1"); +gr->Plot(x,y0,z); gr->Box(); + +mglData y2(10,3); y2.Modify("cos(pi*(2*x-1-y))"); +y2.Modify("2*x-1",2); +gr->Plot(y2.SubData(-1,0),y2.SubData(-1,1),y2.SubData(-1,2),"bo "); + +gr->SubPlot(2,2,3); gr->Rotate(60,40); +gr->Bars(x,y0,z,"ri"); gr->Box(); +@end verbatim +@strong{MGL code} +@end ifclear +@verbatim +new y0 50: modify y0 'sin(pi*(2*x-1))' +subplot 2 2 0 +plot y0: box + +subplot 2 2 1 +new y1 50 2 +modify y1 'sin(pi*2*x-pi)' +modify y1 'cos(pi*2*x-pi)/2' 1 +plot y1: box + +new x 50: modify x 'cos(pi*2*x-pi)' +plot x y0 'Y+' +plot y1(:,0) y(:,1) 'q|' + +subplot 2 2 2:rotate 60 40 +new z 50: modify z '2*x-1' +plot x y0 z 'g':box +new y2 10 3 +modify y2 'cos(pi*(2*x-1-y))' +modify y2 '2*x-1' 2 +plot y2(:,0) y2(:,1) y2(:,2) 'bo ' + +subplot 2 2 3:rotate 60 40 +bars x y0 z 'r':box +@end verbatim +@c ------------------------------------------------------------------ +@node 2D plot sample, 3D plot sample, 1D plot sample, Basic features +@subsection 2D plot sample +@cindex Surf +@cindex Dens +@cindex Alpha +@float +@image{../png/sample9, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ code} +@verbatim +gr->Light(true); +mglData a0(50,40); +a0.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); +gr->SubPlot(2,2,0); gr->Rotate(60,40); +gr->Surf(a0); gr->Box(); + +mglData x(50,40),y(50,40),z(50,40); +x.Modify("0.8*sin(2*pi*x)*sin(pi*y)"); +y.Modify("0.8*cos(2*pi*x)*sin(pi*y)"); +z.Modify("0.8*cos(pi*y)"); +gr->SubPlot(2,2,1); gr->Rotate(60,40); +gr->Surf(x,y,z,"BbwrR"); gr->Box(); + +mglData a1(50,40,3); +a1.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); +a1.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*sin(3*pi*(x*y))",1); +a1.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",2); +gr->SubPlot(2,2,2); gr->Rotate(60,40); +gr->Alpha(true); +gr->Surf(a1); gr->Box(); + +gr->SubPlot(2,2,3); gr->Rotate(60,40); +gr->Dens(a1); gr->Box(); +@end verbatim +@strong{MGL code} +@end ifclear +@verbatim +light on + +new a0 50 40 +modify a0 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))' +subplot 2 2 0:rotate 60 40 +surf a0: box + +new x 50 40: new y 50 40: new z 50 40 +modify x '0.8*sin(2*pi*x)*sin(pi*y)' +modify y '0.8*cos(2*pi*x)*sin(pi*y)' +modify z '0.8*cos(pi*y)' +subplot 2 2 1:rotate 60 40 +surf x y z 'bbwrr': box + +new a1 50 40 3 +modify a1 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))' +modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*sin(3*pi*(x*y))' 1 +modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))' 2 +subplot 2 2 2:rotate 60 40 +alpha on +surf a1: box + +subplot 2 2 3: rotate 60 40 +dens a1: box +@end verbatim +@c ------------------------------------------------------------------ +@node 3D plot sample, Line styles sample, 2D plot sample, Basic features +@subsection 3D plot sample +@cindex Surf +@cindex Dens +@cindex Alpha +@float +@image{../png/sampleb, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ code} +@verbatim +gr->Alpha(true); gr->Light(true); gr->Light(0,mglPoint(0,0,1)); +mglData a(30,30,30), b(30,30,30); +a.Modify("exp(-16*((z-0.5)^2+(y-0.5)^2)/(1+4*x^2))"); +b.Modify("16*((z-0.5)^2+(y-0.5)^2)*(x)/(1+4*x^2)"); +gr->CAxis(0,1); + +gr->SubPlot(2,2,0); gr->Rotate(40,60); +gr->Surf3(a,"wgk"); gr->Box(); +gr->SubPlot(2,2,1); gr->Rotate(40,60); +gr->DensA(a); gr->Box(); gr->Axis(); +gr->SubPlot(2,2,2); gr->Rotate(40,60); +gr->Cloud(a); gr->Box(); +gr->SubPlot(2,2,3); gr->Rotate(40,60); +gr->Surf3A(b,a,"q"); gr->Box(); +@end verbatim +@strong{MGL code} +@end ifclear +@verbatim +alpha on: light on +light 0 0 0 1 +new a 30 30 30: new b 30 30 30 +modify a 'exp(-16*((z-0.5)^2+(y-0.5)^2)/(1+4*x^2))' +modify b '16*((z-0.5)^2+(y-0.5)^2)*(x)/(1+4*x^2)' +caxis 0 1 + +subplot 2 2 0: rotate 40 60 +surf3 a 'wgk': box +subplot 2 2 1: rotate 40 60 +densa a: box: axis +subplot 2 2 2: rotate 40 60 +cloud a: box +subplot 2 2 3: rotate 40 60 +surf3a b a 'q': box +@end verbatim +@c ------------------------------------------------------------------ +@node Line styles sample, Arrow styles sample, 3D plot sample, Basic features +@subsection Line styles sample +@cindex Mark +@cindex Line +@float +@image{../png/sample5, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ code} +@verbatim +float d,x1,x2,x0,y=0.95; +d=0.3, x0=0.2, x1=0.5, x2=0.6; +gr->Line(mglPoint(x0,1-0*d),mglPoint(x1,1-0*d),"k-"); gr->Puts(mglPoint(x2,y-0*d),"Solid '-'","rL"); +gr->Line(mglPoint(x0,1-1*d),mglPoint(x1,1-1*d),"k|"); gr->Puts(mglPoint(x2,y-1*d),"Long Dash '|'","rL"); +gr->Line(mglPoint(x0,1-2*d),mglPoint(x1,1-2*d),"k;"); gr->Puts(mglPoint(x2,y-2*d),"Dash ';'","rL"); +gr->Line(mglPoint(x0,1-3*d),mglPoint(x1,1-3*d),"k="); gr->Puts(mglPoint(x2,y-3*d),"Small dash '='","rL"); +gr->Line(mglPoint(x0,1-4*d),mglPoint(x1,1-4*d),"kj"); gr->Puts(mglPoint(x2,y-4*d),"Dash-dot 'j'","rL"); +gr->Line(mglPoint(x0,1-5*d),mglPoint(x1,1-5*d),"ki"); gr->Puts(mglPoint(x2,y-5*d),"Small dash-dot 'i'","rL"); +gr->Line(mglPoint(x0,1-6*d),mglPoint(x1,1-6*d),"k:"); gr->Puts(mglPoint(x2,y-6*d),"Dots ':'","rL"); +gr->Line(mglPoint(x0,1-7*d),mglPoint(x1,1-7*d),"k "); gr->Puts(mglPoint(x2,y-7*d),"None ' '","rL"); + +d=0.25; x1=-1; x0=-0.8; y = -0.05; +gr->Mark(mglPoint(x1,5*d),'.'); gr->Puts(mglPoint(x0,y+5*d),"'.'","rL"); +gr->Mark(mglPoint(x1,4*d),'+'); gr->Puts(mglPoint(x0,y+4*d),"'+'","rL"); +gr->Mark(mglPoint(x1,3*d),'x'); gr->Puts(mglPoint(x0,y+3*d),"'x'","rL"); +gr->Mark(mglPoint(x1,2*d),'*'); gr->Puts(mglPoint(x0,y+2*d),"'*'","rL"); +gr->Mark(mglPoint(x1,d),'s'); gr->Puts(mglPoint(x0,y+d),"'s'","rL"); +gr->Mark(mglPoint(x1,0),'d'); gr->Puts(mglPoint(x0,y),"'d'","rL"); +gr->Mark(mglPoint(x1,-d,0),'o'); gr->Puts(mglPoint(x0,y-d),"'o'","rL"); +gr->Mark(mglPoint(x1,-2*d,0),'^'); gr->Puts(mglPoint(x0,y-2*d),"'\\^'","rL"); +gr->Mark(mglPoint(x1,-3*d,0),'v'); gr->Puts(mglPoint(x0,y-3*d),"'v'","rL"); +gr->Mark(mglPoint(x1,-4*d,0),'<'); gr->Puts(mglPoint(x0,y-4*d),"'<'","rL"); +gr->Mark(mglPoint(x1,-5*d,0),'>'); gr->Puts(mglPoint(x0,y-5*d),"'>'","rL"); + +d=0.25; x1=-0.5; x0=-0.3; y = -0.05; +gr->Mark(mglPoint(x1,5*d),'C'); gr->Puts(mglPoint(x0,y+5*d),"'\\#.'","rL"); +gr->Mark(mglPoint(x1,4*d),'P'); gr->Puts(mglPoint(x0,y+4*d),"'\\#+'","rL"); +gr->Mark(mglPoint(x1,3*d),'X'); gr->Puts(mglPoint(x0,y+3*d),"'\\#x'","rL"); +gr->Mark(mglPoint(x1,2*d),'Y'); gr->Puts(mglPoint(x0,y+2*d),"'\\#*'","rL"); +gr->Mark(mglPoint(x1,d),'S'); gr->Puts(mglPoint(x0,y+d),"'\\#s'","rL"); +gr->Mark(mglPoint(x1,0),'D'); gr->Puts(mglPoint(x0,y),"'\\#d'","rL"); +gr->Mark(mglPoint(x1,-d,0),'O'); gr->Puts(mglPoint(x0,y-d),"'\\#o'","rL"); +gr->Mark(mglPoint(x1,-2*d,0),'T'); gr->Puts(mglPoint(x0,y-2*d),"'\\#\\^'","rL"); +gr->Mark(mglPoint(x1,-3*d,0),'V'); gr->Puts(mglPoint(x0,y-3*d),"'\\#v'","rL"); +gr->Mark(mglPoint(x1,-4*d,0),'L'); gr->Puts(mglPoint(x0,y-4*d),"'\\#<'","rL"); +gr->Mark(mglPoint(x1,-5*d,0),'R'); gr->Puts(mglPoint(x0,y-5*d),"'\\#>'","rL"); +@end verbatim +@strong{MGL code} +@end ifclear +@verbatim +NOT AVAILABLE +@end verbatim +@c ------------------------------------------------------------------ +@node Arrow styles sample, Text styles sample, Line styles sample, Basic features +@subsection Arrow styles sample +@cindex Line +@float +@image{../png/sampled, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ code} +@verbatim +float a=0.1,b=0.4,c=0.5; +gr->Line(mglPoint(a,1),mglPoint(b,1),"k-A"); gr->Puts(mglPoint(c,1),"Style 'A' or 'A\\_'","rL"); +gr->Line(mglPoint(a,0.8),mglPoint(b,0.8),"k-V"); gr->Puts(mglPoint(c,0.8),"Style 'V' or 'V\\_'","rL"); +gr->Line(mglPoint(a,0.6),mglPoint(b,0.6),"k-K"); gr->Puts(mglPoint(c,0.6),"Style 'K' or 'K\\_'","rL"); +gr->Line(mglPoint(a,0.4),mglPoint(b,0.4),"k-I"); gr->Puts(mglPoint(c,0.4),"Style 'I' or 'I\\_'","rL"); +gr->Line(mglPoint(a,0.2),mglPoint(b,0.2),"k-D"); gr->Puts(mglPoint(c,0.2),"Style 'D' or 'D\\_'","rL"); +gr->Line(mglPoint(a,0),mglPoint(b,0),"k-S"); gr->Puts(mglPoint(c,0),"Style 'S' or 'S\\_'","rL"); +gr->Line(mglPoint(a,-0.2),mglPoint(b,-0.2),"k-O"); gr->Puts(mglPoint(c,-0.2),"Style 'O' or 'O\\_'","rL"); +gr->Line(mglPoint(a,-0.4),mglPoint(b,-0.4),"k-T"); gr->Puts(mglPoint(c,-0.4),"Style 'T' or 'T\\_'","rL"); +gr->Line(mglPoint(a,-0.6),mglPoint(b,-0.6),"k-_"); gr->Puts(mglPoint(c,-0.6),"Style '\\_' or none","rL"); +gr->Line(mglPoint(a,-0.8),mglPoint(b,-0.8),"k-AS"); gr->Puts(mglPoint(c,-0.8),"Style 'AS'","rL"); +gr->Line(mglPoint(a,-1),mglPoint(b,-1),"k-_A"); gr->Puts(mglPoint(c,-1),"Style '\\_A'","rL"); + +a=-1; b=-0.7; c=-0.6; +gr->Line(mglPoint(a,1),mglPoint(b,1),"kAA"); gr->Puts(mglPoint(c,1),"Style 'AA'","rL"); +gr->Line(mglPoint(a,0.8),mglPoint(b,0.8),"kVV"); gr->Puts(mglPoint(c,0.8),"Style 'VV'","rL"); +gr->Line(mglPoint(a,0.6),mglPoint(b,0.6),"kKK"); gr->Puts(mglPoint(c,0.6),"Style 'KK'","rL"); +gr->Line(mglPoint(a,0.4),mglPoint(b,0.4),"kII"); gr->Puts(mglPoint(c,0.4),"Style 'II'","rL"); +gr->Line(mglPoint(a,0.2),mglPoint(b,0.2),"kDD"); gr->Puts(mglPoint(c,0.2),"Style 'DD'","rL"); +gr->Line(mglPoint(a,0),mglPoint(b,0),"kSS"); gr->Puts(mglPoint(c,0),"Style 'SS'","rL"); +gr->Line(mglPoint(a,-0.2),mglPoint(b,-0.2),"kOO"); gr->Puts(mglPoint(c,-0.2),"Style 'OO'","rL"); +gr->Line(mglPoint(a,-0.4),mglPoint(b,-0.4),"kTT"); gr->Puts(mglPoint(c,-0.4),"Style 'TT'","rL"); +gr->Line(mglPoint(a,-0.6),mglPoint(b,-0.6),"k-__"); gr->Puts(mglPoint(c,-0.6),"Style '\\_\\_'","rL"); +gr->Line(mglPoint(a,-0.8),mglPoint(b,-0.8),"k-VA"); gr->Puts(mglPoint(c,-0.8),"Style 'VA'","rL"); +gr->Line(mglPoint(a,-1),mglPoint(b,-1),"k-AV"); gr->Puts(mglPoint(c,-1),"Style 'AV'","rL"); +@end verbatim +@strong{MGL code} +@end ifclear +@verbatim +NOT AVAILABLE +@end verbatim +@c ------------------------------------------------------------------ +@node Text styles sample, TeX parsing sample, Arrow styles sample, Basic features +@subsection Text styles sample +@cindex Puts +@float +@image{../png/sample4, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ code} +@verbatim +gr->Putsw(mglPoint(0,1),L"Text can be in ASCII and in Unicode"); +gr->Puts(mglPoint(0,0.6),"It can be \\wire{wire}, \\big{big} or #r{colored}"); +gr->Puts(mglPoint(0,0.2),"One can change style in string: " + "\\b{bold}, \\i{italic, \\b{both}}"); +gr->Puts(mglPoint(0,-0.2),"Easy to \\a{overline} or " + "\\u{underline}"); +gr->Puts(mglPoint(0,-0.6),"Easy to change indexes ^{up} _{down} @{center}"); +gr->Puts(mglPoint(0,-1),"It parse TeX: \\int \\alpha \\cdot " + "\\sqrt3{sin(\\pi x)^2 + \\gamma_{i_k}} dx"); +@end verbatim +@strong{MGL code} +@end ifclear +@verbatim +text 0 1 'Text can be in ASCII and in Unicode' +text 0 0.6 'It can be \wire{wire}, \big{big} or #r{colored}' +text 0 0.2 'One can change style in string: \b{bold}, \i{italic, \b{both}}' +text 0 -0.2 'Easy to \a{overline} or \u{underline}' +text 0 -0.6 'Easy to change indexes ^{up} _{down} @{center}' +text 0 -1 'It parse TeX: \int \alpha \cdot \sqrt3{sin(\pi x)^2 + \gamma_{i_k}} dx' +@end verbatim +@c ------------------------------------------------------------------ +@node TeX parsing sample, Font faces sample, Text styles sample, Basic features +@subsection TeX parsing sample +@cindex Puts +@float +@image{../png/samplee, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ code} +@verbatim +gr->Puts(mglPoint(0), "\\sqrt{\\frac{\\alpha^{\\gamma^2}+" + "\\overset 1{\\big\\infty}}{\\sqrt3{2+b}}}", 0, -4); +@end verbatim +@strong{MGL code} +@end ifclear +@verbatim +text 0 0 '\sqrt{\frac{\alpha^{\gamma^2}+\overset 1{\big\infty}}{\sqrt3{2+b}}}' '' -4 +@end verbatim +@c ------------------------------------------------------------------ +@node Font faces sample, Colors sample, TeX parsing sample, Basic features +@subsection Font faces sample +@cindex Puts +@float +@image{../png/fonts, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ code} +@verbatim +float h=1.1, d=0.25; +gr->LoadFont("STIX"); gr->Puts(mglPoint(0,h), "default font (STIX)"); +gr->LoadFont("adventor"); gr->Puts(mglPoint(0,h-d), "adventor font"); +gr->LoadFont("bonum"); gr->Puts(mglPoint(0,h-2*d), "bonum font"); +gr->LoadFont("chorus"); gr->Puts(mglPoint(0,h-3*d), "chorus font"); +gr->LoadFont("cursor"); gr->Puts(mglPoint(0,h-4*d), "cursor font"); +gr->LoadFont("heros"); gr->Puts(mglPoint(0,h-5*d), "heros font"); +gr->LoadFont("heroscn"); gr->Puts(mglPoint(0,h-6*d), "heroscn font"); +gr->LoadFont("pagella"); gr->Puts(mglPoint(0,h-7*d), "pagella font"); +gr->LoadFont("schola"); gr->Puts(mglPoint(0,h-8*d), "schola font"); +gr->LoadFont("termes"); gr->Puts(mglPoint(0,h-9*d), "termes font"); +@end verbatim +@strong{MGL code} +@end ifclear +@verbatim +NOT AVAILABLE +@end verbatim +@c ------------------------------------------------------------------ +@node Colors sample, Color schemes sample, Font faces sample, Basic features +@subsection Colors sample +@float +@image{../png/colors, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ code} +@verbatim +//#LENUQ +gr->FaceZ(-1, -1, 0, 0.4, 0.3, "L#"); gr->Puts(mglPoint(-0.8,-0.9), "L", "C:w", -1.4); +gr->FaceZ(-0.6, -1, 0, 0.4, 0.3, "E#"); gr->Puts(mglPoint(-0.4,-0.9), "E", "C:w", -1.4); +gr->FaceZ(-0.2, -1, 0, 0.4, 0.3, "N#"); gr->Puts(mglPoint(0, -0.9), "N", "C:w", -1.4); +gr->FaceZ(0.2, -1, 0, 0.4, 0.3, "U#"); gr->Puts(mglPoint(0.4,-0.9), "U", "C:w", -1.4); +gr->FaceZ(0.6, -1, 0, 0.4, 0.3, "Q#"); gr->Puts(mglPoint(0.8,-0.9), "Q", "C:w", -1.4); +//#lenuq +gr->FaceZ(-1, -0.7, 0, 0.4, 0.3, "l#"); gr->Puts(mglPoint(-0.8,-0.6), "l", "C:k", -1.4); +gr->FaceZ(-0.6, -0.7, 0, 0.4, 0.3, "e#"); gr->Puts(mglPoint(-0.4,-0.6), "e", "C:k", -1.4); +gr->FaceZ(-0.2, -0.7, 0, 0.4, 0.3, "n#"); gr->Puts(mglPoint(0, -0.6), "n", "C:k", -1.4); +gr->FaceZ(0.2, -0.7, 0, 0.4, 0.3, "u#"); gr->Puts(mglPoint(0.4,-0.6), "u", "C:k", -1.4); +gr->FaceZ(0.6, -0.7, 0, 0.4, 0.3, "q#"); gr->Puts(mglPoint(0.8,-0.6), "q", "C:k", -1.4); +//#CMYkP +gr->FaceZ(-1, -0.4, 0, 0.4, 0.3, "C#"); gr->Puts(mglPoint(-0.8,-0.3), "C", "C:w", -1.4); +gr->FaceZ(-0.6, -0.4, 0, 0.4, 0.3, "M#"); gr->Puts(mglPoint(-0.4,-0.3), "M", "C:w", -1.4); +gr->FaceZ(-0.2, -0.4, 0, 0.4, 0.3, "Y#"); gr->Puts(mglPoint(0, -0.3), "Y", "C:w", -1.4); +gr->FaceZ(0.2, -0.4, 0, 0.4, 0.3, "k#"); gr->Puts(mglPoint(0.4,-0.3), "k", "C:w", -1.4); +gr->FaceZ(0.6, -0.4, 0, 0.4, 0.3, "P#"); gr->Puts(mglPoint(0.8,-0.3), "P", "C:w", -1.4); +//#cmywp +gr->FaceZ(-1, -0.1, 0, 0.4, 0.3, "c#"); gr->Puts(mglPoint(-0.8, 0), "c", "C:k", -1.4); +gr->FaceZ(-0.6, -0.1, 0, 0.4, 0.3, "m#"); gr->Puts(mglPoint(-0.4, 0), "m", "C:k", -1.4); +gr->FaceZ(-0.2, -0.1, 0, 0.4, 0.3, "y#"); gr->Puts(mglPoint(0, 0), "y", "C:k", -1.4); +gr->FaceZ(0.2, -0.1, 0, 0.4, 0.3, "w#"); gr->Puts(mglPoint(0.4, 0), "w", "C:k", -1.4); +gr->FaceZ(0.6, -0.1, 0, 0.4, 0.3, "p#"); gr->Puts(mglPoint(0.8, 0), "p", "C:k", -1.4); +//#BGRHW +gr->FaceZ(-1, 0.2, 0, 0.4, 0.3, "B#"); gr->Puts(mglPoint(-0.8, 0.3), "B", "C:w", -1.4); +gr->FaceZ(-0.6, 0.2, 0, 0.4, 0.3, "G#"); gr->Puts(mglPoint(-0.4, 0.3), "G", "C:w", -1.4); +gr->FaceZ(-0.2, 0.2, 0, 0.4, 0.3, "R#"); gr->Puts(mglPoint(0, 0.3), "R", "C:w", -1.4); +gr->FaceZ(0.2, 0.2, 0, 0.4, 0.3, "H#"); gr->Puts(mglPoint(0.4, 0.3), "H", "C:w", -1.4); +gr->FaceZ(0.6, 0.2, 0, 0.4, 0.3, "W#"); gr->Puts(mglPoint(0.8, 0.3), "W", "C:w", -1.4); +//#bgrhw +gr->FaceZ(-1, 0.2, 0, 0.4, 0.3, "b#"); gr->Puts(mglPoint(-0.8, 0.6), "b", "C:k", -1.4); +gr->FaceZ(-0.6, 0.5, 0, 0.4, 0.3, "g#"); gr->Puts(mglPoint(-0.4, 0.6), "g", "C:k", -1.4); +gr->FaceZ(-0.2, 0.2, 0, 0.4, 0.3, "r#"); gr->Puts(mglPoint(0, 0.6), "r", "C:k", -1.4); +gr->FaceZ(0.2, 0.2, 0, 0.4, 0.3, "h#"); gr->Puts(mglPoint(0.4, 0.6), "h", "C:k", -1.4); +gr->FaceZ(0.6, 0.2, 0, 0.4, 0.3, "w#"); gr->Puts(mglPoint(0.8, 0.6), "w", "C:k", -1.4); +//#brighted +gr->FaceZ(-1, 0.8, 0, 0.4, 0.3, "r1#"); gr->Puts(mglPoint(-0.8, 0.9), "r1", "C:w", -1.4); +gr->FaceZ(-0.6, 0.8, 0, 0.4, 0.3, "r3#"); gr->Puts(mglPoint(-0.4, 0.9), "r3", "C:w", -1.4); +gr->FaceZ(-0.2, 0.8, 0, 0.4, 0.3, "r5#"); gr->Puts(mglPoint(0, 0.9), "r5", "C:k", -1.4); +gr->FaceZ(0.2, 0.8, 0, 0.4, 0.3, "r7#"); gr->Puts(mglPoint(0.4, 0.9), "r7", "C:k", -1.4); +gr->FaceZ(0.6, 0.8, 0, 0.4, 0.3, "r9#"); gr->Puts(mglPoint(0.8, 0.9), "r9", "C:k", -1.4); +@end verbatim +@strong{MGL code} +@end ifclear +@verbatim +#LENUQ +facez -1 -1 0 0.4 0.3 'L#': text -0.8 -0.9 'L' 'C:w' +facez -0.6 -1 0 0.4 0.3 'E#': text -0.4 -0.9 'E' 'C:w' +facez -0.2 -1 0 0.4 0.3 'N#': text 0 -0.9 'N' 'C:w' +facez 0.2 -1 0 0.4 0.3 'U#': text 0.4 -0.9 'U' 'C:w' +facez 0.6 -1 0 0.4 0.3 'Q#': text 0.8 -0.9 'Q' 'C:w' +#lenuq +facez -1 -0.7 0 0.4 0.3 'l#': text -0.8 -0.6 'l' 'C:k' +facez -0.6 -0.7 0 0.4 0.3 'e#': text -0.4 -0.6 'e' 'C:k' +facez -0.2 -0.7 0 0.4 0.3 'n#': text 0 -0.6 'n' 'C:k' +facez 0.2 -0.7 0 0.4 0.3 'u#': text 0.4 -0.6 'u' 'C:k' +facez 0.6 -0.7 0 0.4 0.3 'q#': text 0.8 -0.6 'q' 'C:k' +#CMYkP +facez -1 -0.4 0 0.4 0.3 'C#': text -0.8 -0.3 'C' 'C:w' +facez -0.6 -0.4 0 0.4 0.3 'M#': text -0.4 -0.3 'M' 'C:w' +facez -0.2 -0.4 0 0.4 0.3 'Y#': text 0 -0.3 'Y' 'C:w' +facez 0.2 -0.4 0 0.4 0.3 'k#': text 0.4 -0.3 'k' 'C:w' +facez 0.6 -0.4 0 0.4 0.3 'P#': text 0.8 -0.3 'P' 'C:w' +#lenuq +facez -1 -0.1 0 0.4 0.3 'c#': text -0.8 0 'c' 'C:k' +facez -0.6 -0.1 0 0.4 0.3 'm#': text -0.4 0 'm' 'C:k' +facez -0.2 -0.1 0 0.4 0.3 'y#': text 0 0 'y' 'C:k' +facez 0.2 -0.1 0 0.4 0.3 'w#': text 0.4 0 'w' 'C:k' +facez 0.6 -0.1 0 0.4 0.3 'p#': text 0.8 0 'p' 'C:k' +#BGRHW +facez -1 0.2 0 0.4 0.3 'B#': text -0.8 0.3 'B' 'C:k' +facez -0.6 0.2 0 0.4 0.3 'G#': text -0.4 0.3 'G' 'C:k' +facez -0.2 0.2 0 0.4 0.3 'R#': text 0 0.3 'R' 'C:k' +facez 0.2 0.2 0 0.4 0.3 'H#': text 0.4 0.3 'H' 'C:k' +facez 0.6 0.2 0 0.4 0.3 'W#': text 0.8 0.3 'W' 'C:k' +#bgrhw +facez -1 0.5 0 0.4 0.3 'b#': text -0.8 0.6 'b' 'C:w' +facez -0.6 0.5 0 0.4 0.3 'g#': text -0.4 0.6 'g' 'C:w' +facez -0.2 0.5 0 0.4 0.3 'r#': text 0 0.6 'r' 'C:w' +facez 0.2 0.5 0 0.4 0.3 'h#': text 0.4 0.6 'h' 'C:w' +facez 0.6 0.5 0 0.4 0.3 'w#': text 0.8 0.6 'w' 'C:w' +#brighted +facez -1 0.8 0 0.4 0.3 'r1#': text -0.8 0.9 'r1' 'C:k' +facez -0.6 0.8 0 0.4 0.3 'r3#': text -0.4 0.9 'r3' 'C:k' +facez -0.2 0.8 0 0.4 0.3 'r5#': text 0 0.9 'r5' 'C:k' +facez 0.2 0.8 0 0.4 0.3 'r7#': text 0.4 0.9 'r7' 'C:k' +facez 0.6 0.8 0 0.4 0.3 'r9#': text 0.8 0.9 'r9' 'C:k' +@end verbatim +@c ------------------------------------------------------------------ +@node Color schemes sample, Normal transparency, Colors sample, Basic features +@subsection Color schemes sample +@cindex Colorbar +@float +@image{../png/color_schemes, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ code} +@verbatim +mglData a(256,2); a.Fill(-1,1); +gr->SubPlot(2,10,0,0.2); gr->Dens(a,"kw", nan); +gr->Puts(mglPoint(-1.4, -0.3), "kw", "C", -8); +gr->SubPlot(2,10,1,0.2); gr->Dens(a,"wk", nan); +gr->Puts(mglPoint(-1.4, -0.3), "wk", "C", -8); +gr->SubPlot(2,10,2,0.2); gr->Dens(a,"kHCcw", nan); +gr->Puts(mglPoint(-1.4, -0.3), "kHCcw", "C", -8); +gr->SubPlot(2,10,3,0.2); gr->Dens(a,"kBbcw", nan); +gr->Puts(mglPoint(-1.4, -0.3), "kBbcw", "C", -8); +gr->SubPlot(2,10,4,0.2); gr->Dens(a,"kRryw", nan); +gr->Puts(mglPoint(-1.4, -0.3), "kRryw", "C", -8); +gr->SubPlot(2,10,5,0.2); gr->Dens(a,"kGgew", nan); +gr->Puts(mglPoint(-1.4, -0.3), "kGgew", "C", -8); +gr->SubPlot(2,10,6,0.2); gr->Dens(a,"BbwrR", nan); +gr->Puts(mglPoint(-1.4, -0.3), "BbwrR", "C", -8); +gr->SubPlot(2,10,7,0.2); gr->Dens(a,"BbwgG", nan); +gr->Puts(mglPoint(-1.4, -0.3), "BbwgG", "C", -8); +gr->SubPlot(2,10,8,0.2); gr->Dens(a,"GgwmM", nan); +gr->Puts(mglPoint(-1.4, -0.3), "GgwmM", "C", -8); +gr->SubPlot(2,10,9,0.2); gr->Dens(a,"UuwqR", nan); +gr->Puts(mglPoint(-1.4, -0.3), "UuwqR", "C", -8); +gr->SubPlot(2,10,10,0.2); gr->Dens(a,"QqwcC", nan); +gr->Puts(mglPoint(-1.4, -0.3), "QqwcC", "C", -8); +gr->SubPlot(2,10,11,0.2); gr->Dens(a,"CcwyY", nan); +gr->Puts(mglPoint(-1.4, -0.3), "CcwyY", "C", -8); +gr->SubPlot(2,10,12,0.2); gr->Dens(a,"bcwyr", nan); +gr->Puts(mglPoint(-1.4, -0.3), "bcwyr", "C", -8); +gr->SubPlot(2,10,13,0.2); gr->Dens(a,"bwr", nan); +gr->Puts(mglPoint(-1.4, -0.3), "bwr", "C", -8); +gr->SubPlot(2,10,14,0.2); gr->Dens(a,"BbcyrR", nan); +gr->Puts(mglPoint(-1.4, -0.3), "BbcyrR", "C", -8); +gr->SubPlot(2,10,15,0.2); gr->Dens(a,"UbcyqR", nan); +gr->Puts(mglPoint(-1.4, -0.3), "UbcyqR", "C", -8); +gr->SubPlot(2,10,16,0.2); gr->Dens(a,"BbcwyrR", nan); +gr->Puts(mglPoint(-1.4, -0.3), "BbcwyrR", "C", -8); +gr->SubPlot(2,10,17,0.2); gr->Dens(a,"bcyr", nan); +gr->Puts(mglPoint(-1.4, -0.3), "bcyr", "C", -8); +gr->SubPlot(2,10,18,0.2); gr->Dens(a,"BbcyrR|", nan); +gr->Puts(mglPoint(-1.4, -0.3), "BbcyrR|", "C", -8); +gr->SubPlot(2,10,19,0.2); gr->Dens(a,"bgr", nan); +gr->Puts(mglPoint(-1.4, -0.3), "bgr", "C", -8); +@end verbatim +@strong{MGL code} +@end ifclear +@verbatim +new a 256 2: fill a 'x' +subplot 2 10 0 0.2:dens a 'kw' +text -1.4 -0.3 'kw' '' -8 +subplot 2 10 1 0.2:dens a 'wk' +text -1.4 -0.3 'wk' '' -8 +subplot 2 10 2 0.2:dens a 'kHCcw' +text -1.4 -0.3 'kHCcw' '' -8 +subplot 2 10 3 0.2:dens a 'kBbcw' +text -1.4 -0.3 'kBbcw' '' -8 +subplot 2 10 4 0.2:dens a 'kRryw' +text -1.4 -0.3 'kRryw' '' -8 +subplot 2 10 5 0.2:dens a 'kGgew' +text -1.4 -0.3 'kGgew' '' -8 +subplot 2 10 6 0.2:dens a 'BbwrR' +text -1.4 -0.3 'BbwrR' '' -8 +subplot 2 10 7 0.2:dens a 'BbwgG' +text -1.4 -0.3 'BbwgG' '' -8 +subplot 2 10 8 0.2:dens a 'GgwmM' +text -1.4 -0.3 'GgwmM' '' -8 +subplot 2 10 9 0.2:dens a 'UuwqR' +text -1.4 -0.3 'UuwqR' '' -8 +subplot 2 10 10 0.2:dens a 'QqwcC' +text -1.4 -0.3 'QqwcC' '' -8 +subplot 2 10 11 0.2:dens a 'CcwyY' +text -1.4 -0.3 'CcwyY' '' -8 +subplot 2 10 12 0.2:dens a 'bcwyr' +text -1.4 -0.3 'bcwyr' '' -8 +subplot 2 10 13 0.2:dens a 'bwr' +text -1.4 -0.3 'bwr' '' -8 +subplot 2 10 14 0.2:dens a 'BbcyrR' +text -1.4 -0.3 'BbcyrR' '' -8 +subplot 2 10 15 0.2:dens a 'UbcyqR' +text -1.4 -0.3 'UbcyqR' '' -8 +subplot 2 10 16 0.2:dens a 'BbcwyrR' +text -1.4 -0.3 'BbcwyrR' '' -8 +subplot 2 10 17 0.2:dens a 'bcyr' +text -1.4 -0.3 'bcyr' '' -8 +subplot 2 10 18 0.2:dens a 'BbcyrR|' +text -1.4 -0.3 'BbcyrR|' '' -8 +subplot 2 10 19 0.2:dens a 'bgr' +text -1.4 -0.3 'bgr' '' -8 +@end verbatim +@c ------------------------------------------------------------------ +@node Normal transparency, Glass-like transparency, Color schemes sample, Basic features +@subsection Normal transparency +@cindex TranspType +@float +@image{../png/type0, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ code} +@verbatim +gr->Alpha(true); gr->Light(true); +mglData a(50,40); +a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); + +gr->TranspType = 0; gr->Clf(); +gr->SubPlot(2,2,0); gr->Rotate(40,60); gr->Surf(a); gr->Box(); +gr->SubPlot(2,2,1); gr->Rotate(40,60); gr->Dens(a); gr->Box(); +gr->SubPlot(2,2,2); gr->Rotate(40,60); gr->Cont(a); gr->Box(); +gr->SubPlot(2,2,3); gr->Rotate(40,60); gr->Axial(a); gr->Box(); +@end verbatim +@strong{MGL code} +@end ifclear +@verbatim +alpha on: light on +new a 50 40 +modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' + +transptype 0: clf +subplot 2 2 0: rotate 40 60: surf a: box +subplot 2 2 1: rotate 40 60: dens a: box +subplot 2 2 2: rotate 40 60: cont a: box +subplot 2 2 3: rotate 40 60: axial a: box +@end verbatim +@c ------------------------------------------------------------------ +@node Glass-like transparency, Lamp-like transparency, Normal transparency, Basic features +@subsection Glass-like transparency +@cindex TranspType +@float +@image{../png/type1, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ code} +@verbatim +gr->Alpha(true); gr->Light(true); +mglData a(50,40); +a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); + +gr->TranspType = 1; gr->Clf(); +gr->SubPlot(2,2,0); gr->Rotate(40,60); gr->Surf(a); gr->Box(); +gr->SubPlot(2,2,1); gr->Rotate(40,60); gr->Dens(a); gr->Box(); +gr->SubPlot(2,2,2); gr->Rotate(40,60); gr->Cont(a); gr->Box(); +gr->SubPlot(2,2,3); gr->Rotate(40,60); gr->Axial(a); gr->Box(); +@end verbatim +@strong{MGL code} +@end ifclear +@verbatim +alpha on: light on +new a 50 40 +modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' + +transptype 1: clf +subplot 2 2 0: rotate 40 60: surf a: box +subplot 2 2 1: rotate 40 60: dens a: box +subplot 2 2 2: rotate 40 60: cont a: box +subplot 2 2 3: rotate 40 60: axial a: box +@end verbatim +@c ------------------------------------------------------------------ +@node Lamp-like transparency, , Glass-like transparency, Basic features +@subsection Lamp-like transparency +@cindex TranspType +@float +@image{../png/type2, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ code} +@verbatim +gr->Alpha(true); gr->Light(true); +mglData a(50,40); +a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); + +gr->TranspType = 2; gr->Clf(); +gr->SubPlot(2,2,0); gr->Rotate(40,60); gr->Surf(a); gr->Box(); +gr->SubPlot(2,2,1); gr->Rotate(40,60); gr->Dens(a); gr->Box(); +gr->SubPlot(2,2,2); gr->Rotate(40,60); gr->Cont(a); gr->Box(); +gr->SubPlot(2,2,3); gr->Rotate(40,60); gr->Axial(a); gr->Box(); +@end verbatim +@strong{MGL code} +@end ifclear +@verbatim +alpha on: light on +new a 50 40 +modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' + +transptype 2: clf +subplot 2 2 0: rotate 40 60: surf a: box +subplot 2 2 1: rotate 40 60: dens a: box +subplot 2 2 2: rotate 40 60: cont a: box +subplot 2 2 3: rotate 40 60: axial a: box +@end verbatim + + + + + + + + + + + + -@c ------------------------------------------------------------------ @node Additional features, Advanced features, Dual plotting samples, Samples @section Additional features - @menu * Legend sample:: * Adding mesh sample:: @@ -4451,19 +5427,17 @@ gr.Dots(a); * Drops sample:: * Molecules drawing sample:: @end menu - @c ------------------------------------------------------------------ @node Legend sample, Adding mesh sample, , Additional features @subsection Legend sample @cindex Plot @cindex Legend @cindex AddLegend - @float -@image{png/legend, 7cm} -@caption{Example of Legend usage. @tdref{legend}} +@image{../png/legend, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData f(50,3); @@ -4478,12 +5452,12 @@ gr->AddLegend("sin(\\pi \\sqrt{\\a x})","r+"); gr->Legend(); @end verbatim @strong{MGL code} +@end ifclear @verbatim new f 50 3 modify f 'sin(2*pi*x*x)' modify f 'sin(2*pi*x)' 1 modify f 'sin(2*pi*sqrt(x))' 2 - axis 0 -1 1 1 box plot f @@ -4493,6 +5467,7 @@ addlegend 'sin(\pi x)' 'g*' addlegend 'sin(\pi \sqrt{\a x})' 'r+' legend @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT f = mgl_create_data_size(50,3,1); @@ -4516,7 +5491,6 @@ f = mgl_create_data_size(50,3,1) call mgl_data_modify(f,'sin(2*pi*x*x)',0) call mgl_data_modify(f,'sin(2*pi*x)',1) call mgl_data_modify(f,'sin(2*pi*sqrt(x))',2) - call mgl_set_axis(gr, 0.,-1.,0., 1.,1.,1., 0.,0.,0.) call mgl_box(gr,1) call mgl_plot(gr,f,'') @@ -4537,7 +5511,7 @@ gr.AddLegend("sin(\\pi x)","g*"); gr.AddLegend("sin(\\pi\\sqrt{\\a x})","r+"); gr.Legend(); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Adding mesh sample, Surf & Cont sample, Legend sample, Additional features @subsection Adding mesh sample @@ -4546,19 +5520,17 @@ gr.Legend(); @cindex Dens @cindex Cont @cindex Axial - @float -@image{png/samplea, 7cm} -@caption{Example of adding mesh. @tdref{samplea}} +@image{../png/samplea, 7cm} +@c @caption{Example of adding mesh. @tdref{samplea}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); gr->Light(true); gr->Alpha(true); - gr->SubPlot(2,2,0); gr->Rotate(40,60); gr->Surf(a,"BbcyrR#"); gr->Box(); gr->SubPlot(2,2,1); gr->Rotate(40,60); @@ -4569,13 +5541,12 @@ gr->SubPlot(2,2,3); gr->Rotate(40,60); gr->Axial(a,"BbcyrR#"); gr->Box(); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - alpha on light on - subplot 2 2 0 rotate 40 60 surf a 'BbcyrR#' @@ -4593,13 +5564,13 @@ rotate 40 60 axial a 'BbcyrR#' box @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); mgl_set_alpha(gr,1); mgl_set_light(gr,1); - mgl_subplot(gr,2,2,0); mgl_rotate(gr,40.,60.,0.); mgl_surf(gr,a,"BbcyrR#"); mgl_box(gr,1); mgl_subplot(gr,2,2,1); mgl_rotate(gr,40.,60.,0.); @@ -4619,7 +5590,6 @@ a = mgl_create_data_size(50,40,1) call mgl_data_modify(a,'0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))',0) call mgl_set_alpha(gr,1) call mgl_set_light(gr,1) - call mgl_subplot(gr,2,2,0) call mgl_rotate(gr,40.,60.,0.) call mgl_surf(gr,a,'BbcyrR#') @@ -4652,24 +5622,21 @@ gr.Rotate(40,60); gr.Cont(a,"BbcyrR#"); gr.Box(); gr.SubPlot(2,2,3); gr.Rotate(40,60); gr.Axial(a,"BbcyrR#"); gr.Box(); @end verbatim - - +@end ifclear @c ------------------------------------------------------------------ @node Surf & Cont sample, Flow & Dens sample, Adding mesh sample, Additional features @subsection Surf & Cont sample @cindex Surf @cindex Cont - @float -@image{png/surf_cont_y, 7cm} -@caption{Example of Surf & Cont. @tdref{surf_cont_y}} +@image{../png/surf_cont_y, 7cm} +@c @caption{Example of Surf & Cont. @tdref{surf_cont_y}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Box(); @@ -4677,21 +5644,21 @@ gr->Surf(a); gr->Cont(a,"y"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on box surf a cont a 'y' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -4706,7 +5673,6 @@ real zero, nan zero = 0; nan = zero/zero a = mgl_create_data_size(50,40,1) call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0) - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -4722,18 +5688,17 @@ gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Surf(a); gr.Cont(a,"y"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Flow & Dens sample, Several light sample, Surf & Cont sample, Additional features @subsection Flow & Dens sample @cindex Flow @cindex Dens - @float -@image{png/flow_dens, 7cm} -@caption{Example of Flow & Dens. @tdref{flow_dens}} +@image{../png/flow_dens, 7cm} +@c @caption{Example of Flow & Dens. @tdref{flow_dens}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(50,40), b(50,40), d(a); @@ -4744,6 +5709,7 @@ gr->Box(); gr->Flow(a,b,"br"); gr->Dens(d,"BbcyrR"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 50 40 new b 50 40 @@ -4755,6 +5721,7 @@ box flow a b 'br' dens d 'BbcyrR' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a, b, d; @@ -4764,7 +5731,6 @@ d = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); mgl_data_modify(d,"sqrt(v^2+w^2)",a,b); - mgl_box(gr,1); mgl_flow_2d(gr,a,b,"br",5,1,0.); mgl_dens(gr,d,"BbcyrR",-1.); @@ -4779,7 +5745,6 @@ d = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); call mgl_data_modify(d,"sqrt(v^2+w^2)",a,b); - call mgl_box(gr,1) call mgl_flow_2d(gr,a,b,'br',5,1,0.) call mgl_dens(gr,d,'BbcyrR',-1.); @@ -4796,23 +5761,21 @@ d.Modify("sqrt(v^2+w^2)",a,b); gr.Box(); gr.Flow(a,b,"br"); gr.Dens(d,"BbcyrR"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Several light sample, Mirrored surface sample, Flow & Dens sample, Additional features @subsection Several light sample @cindex Surf @cindex Light - @float -@image{png/several_light, 7cm} -@caption{Example of Surf with several light. @tdref{several_light}} +@image{../png/several_light, 7cm} +@c @caption{Example of Surf with several light. @tdref{several_light}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Light(1,mglPoint(0,1,0),'c'); @@ -4822,30 +5785,28 @@ gr->Box(); gr->Surf(a,"h"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on light 1 0 1 0 'c' light 2 1 0 0 'y' light 3 0 -1 0 'm' - box surf a 'h' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_add_light_rgb(gr,1,0.,1.,0.,1, 0.,1.,1.,0.5); mgl_add_light_rgb(gr,2,1.,0.,0.,1, 1.,1.,0.,0.5); mgl_add_light_rgb(gr,3,0.,-1.,0.,1, 1.,0.,1.,0.5); - mgl_box(gr,1); mgl_surf(gr,a,"h"); mgl_delete_data(a); @@ -4855,13 +5816,11 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_add_light_rgb(gr,1,0.,1.,0.,1, 0.,1.,1.,0.5) call mgl_add_light_rgb(gr,2,1.,0.,0.,1, 1.,1.,0.,0.5) call mgl_add_light_rgb(gr,3,0.,-1.,0.,1, 1.,0.,1.,0.5) - call mgl_box(gr,1) call mgl_surf(gr,a,'h') call mgl_delete_data(a) @@ -4877,33 +5836,31 @@ gr.AddLight(3,0,-1,0,"m"); gr.Box(); gr.Surf(a,"h") @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Mirrored surface sample, Cont with labels sample, Several light sample, Additional features @subsection Mirrored surface sample @cindex Surf - @float -@image{png/mirror, 7cm} -@caption{Example of mirrored surface. @tdref{mirror}} +@image{../png/mirror, 7cm} +@c @caption{Example of mirrored surface. @tdref{mirror}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(30,40),x(30),y1(40),y2(40); a.Modify("pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)"); x.Fill(-1,1); y1.Fill(0,1); y2.Fill(0,-1); - gr->Rotate(40,60); gr->Light(true); gr->Box(); gr->Surf(x,y1,a,"r"); gr->Surf(x,y2,a,"b"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 30 40 modify a 'pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)' - rotate 40 60 light on surf a 'r'; yrange 0 1 @@ -4917,13 +5874,13 @@ var x 30 -1 1 var y1 40 0 1 var y2 40 0 -1 modify a 'pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)' - rotate 40 60 light on surf x y1 a 'r' surf x y2 a 'b' box @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a,x,y1,y2; @@ -4935,7 +5892,6 @@ mgl_data_modify(a,"pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)",0); mgl_data_fill(x,-1.,1.,'x'); mgl_data_fill(y1,0.,1.,'x'); mgl_data_fill(y2,0.,-1.,'x'); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -4954,7 +5910,6 @@ call mgl_data_modify(a,'pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)',0) call mgl_data_fill(x,-1.,1.,'x') call mgl_data_fill(y1,0.,1.,'x') call mgl_data_fill(y2,0.,-1.,'x') - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -4973,17 +5928,16 @@ x.Fill(-1,1); y1.Fill(0,1); y2.Fill(0,-1); gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Surf(x,y1,a,"r"); gr.Surf(x,y2,a,"b"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Cont with labels sample, Ternary plot sample, Mirrored surface sample, Additional features @subsection Cont with labels sample @cindex Cont - @float -@image{png/contt, 7cm} -@caption{Example of Cont with labels. @tdref{contt}} +@image{../png/contt, 7cm} +@c @caption{Example of Cont with labels. @tdref{contt}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(50,40); @@ -4992,12 +5946,14 @@ gr->Box(); gr->Cont(a,"BbcyrRt"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' box cont a 'BbcyrRt' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(50,40,1); @@ -5011,7 +5967,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_box(gr,1) call mgl_cont(gr,a,'BbcyrRt',7,0) call mgl_delete_data(a) @@ -5023,18 +5978,16 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Box(); gr.Cont(a,"BbcyrRt"); @end verbatim - - +@end ifclear @c ------------------------------------------------------------------ @node Ternary plot sample, Coloring by coordinates sample, Cont with labels sample, Additional features @subsection Ternary plot sample @cindex Ternary - @float -@image{png/ternary, 7cm} -@caption{Example of Ternary plot. @tdref{ternary}} +@image{../png/ternary, 7cm} +@c @caption{Example of Ternary plot. @tdref{ternary}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData x(50),y(50),rx(10),ry(10), a(20,30); @@ -5042,7 +5995,6 @@ a.Modify("4*x*y"); x.Modify("0.25*(1+cos(2*pi*x))"); y.Modify("0.25*(1+sin(2*pi*x))"); rx.Modify("rnd"); ry.Modify("(1-v)*rnd",rx); - gr->Text(mglPoint(-0.8,1.3), "Ternary plot (x+y+t=1)"); gr->Ternary(true); gr->Plot(x,y,"r2"); @@ -5055,6 +6007,7 @@ gr->Label('y',"y comp."); gr->Label('t',"t comp."); @end verbatim @strong{MGL code} +@end ifclear @verbatim new rx 10 new ry 10 @@ -5078,6 +6031,7 @@ xlabel 'x comp.' ylabel 'y comp.' tlabel 't comp.' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT x,y,rx,ry,a; @@ -5091,13 +6045,11 @@ mgl_data_modify(y,"0.25*(1+sin(2*pi*x))",0); mgl_data_modify(rx,"rnd",0); mgl_data_modify_vw(ry,"(1-v)*rnd",rx,0); mgl_data_modify(a,"4*x*y",0); - mgl_puts_ext(gr,-0.8,1.3,0.,"Ternary plot (x+y+t=1)","C",-1.4,'t'); mgl_set_ternary(gr,1); mgl_plot_xy(gr,x,y,"r2"); mgl_plot_xy(gr,rx,ry,"q^ "); mgl_cont(gr,a,"",7,0.); - mgl_line(gr,0.5,0.,0.,0.,0.75,0.,"g2",2); mgl_axis(gr,"xyz"); mgl_axis_grid(gr,"xyz","B:"); @@ -5121,13 +6073,11 @@ call mgl_data_modify(y,'0.25*(1+sin(2*pi*x))',0) call mgl_data_modify(rx,'rnd',0) call mgl_data_modify_vw(ry,'(1-v)*rnd',rx,rx) call mgl_data_modify(a,'4*x*y',0) - call mgl_puts_ext(gr,-0.8,1.3,0.,'Ternary plot (x+y+t=1)','C',-1.4,'t') call mgl_set_ternary(gr,1) call mgl_plot_xy(gr,x,y,'r2') call mgl_plot_xy(gr,rx,ry,'q^ ') call mgl_cont(gr,a,'',7,0.) - call mgl_line(gr,0.5,0.,0.,0.,0.75,0.,'g2',2) call mgl_axis(gr,'xyz') call mgl_axis_grid(gr,'xyz','B:') @@ -5155,40 +6105,38 @@ gr.Label("x","x comp."); gr.Label("y","y comp."); gr.Label("t","t comp."); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Coloring by coordinates sample, Drops sample, Ternary plot sample, Additional features @subsection Coloring by coordinates sample @cindex Surf3 - @float -@image{png/surf3_rgbd, 7cm} -@caption{Example of Surf3 colored by coordinates. @tdref{surf3_rgbd}} +@image{../png/surf3_rgbd, 7cm} +@c @caption{Example of Surf3 colored by coordinates. @tdref{surf3_rgbd}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Box(); gr->Surf3(a,"bgrd"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' - rotate 40 60 box surf3 a 'bgrd' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_box(gr,1); mgl_surf3(gr,a,"bgrd",3); @@ -5199,7 +6147,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_box(gr,1) call mgl_surf3(gr,a,'bgrd',3) @@ -5212,17 +6159,16 @@ a.Modify("-2*((2*x-1)^2+(2*y-1)^2+(2*z-1)^4-(2*z-1)^2-0.1)"); gr.Rotate(40,60); gr.Box(); gr.Surf3(a,"bgrd"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Drops sample, Molecules drawing sample, Coloring by coordinates sample, Additional features @subsection Drops sample @cindex Drop - @float -@image{png/drops, 7cm} -@caption{Example of Drop(s). @tdref{drops}} +@image{../png/drops, 7cm} +@c @caption{Example of Drop(s). @tdref{drops}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim gr->Light(true); @@ -5241,6 +6187,7 @@ gr->Ball(mglPoint(1,0,1),'k'); gr->Line(mglPoint(-1,0,1),mglPoint(1,0,1),"b"); @end verbatim @strong{MGL code} +@end ifclear @verbatim light on text -1 1.2 'sh=0' @@ -5256,12 +6203,12 @@ ball -0.33 0 1 'k' ball 0.33 0 1 'k' ball 1 0 1 'k' line -1 0 1 1 0 1 'b' - new h 100 modify h '0.25*(1+x)^2' plot h 'k|' text -1 0.6 'h\sim(1+sh)^2' 'rL' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim mgl_set_light(gr,1); @@ -5311,22 +6258,20 @@ gr.Ball(-1,0,1,"k"); gr.Ball(-0.33,0,1,"k"); gr.Ball(0.33,0,1,"k"); gr.Ball(1,0,1,"k"); gr.Line(-1,0,1,1,0,1,"b"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Molecules drawing sample, , Drops sample, Additional features @subsection Molecules drawing sample @cindex Drop @cindex Sphere - @float -@image{png/molecule, 7cm} -@caption{Example of molecules drawing. @tdref{molecule}} +@image{../png/molecule, 7cm} +@c @caption{Example of molecules drawing. @tdref{molecule}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim gr->Alpha(true); gr->Light(true); - gr->SubPlot(2,2,0); gr->Text(mglPoint(0,1.2),"Methane, CH_4",0,-3); gr->Rotate(60,120); gr->Sphere(mglPoint(0,0,0),0.25,"k"); @@ -5338,7 +6283,6 @@ gr->Drop(mglPoint(0,0,0),mglPoint(0.47,0.82,-0.33),0.35,"h",1,2); gr->Sphere(mglPoint(0.33,0.57,-0.23),0.25,"g"); gr->Drop(mglPoint(0,0,0),mglPoint(0.47,-0.82,-0.33),0.35,"h",1,2); gr->Sphere(mglPoint(0.33,-0.57,-0.23),0.25,"g"); - gr->SubPlot(2,2,1); gr->Text(mglPoint(0,1.2),"Water, H{_2}O",0,-3); gr->Rotate(60,100); gr->Sphere(mglPoint(0,0,0),0.25,"r"); @@ -5346,14 +6290,12 @@ gr->Drop(mglPoint(0,0,0),mglPoint(0.3,0.5,0),0.3,"m",1,2); gr->Sphere(mglPoint(0.3,0.5,0),0.25,"g"); gr->Drop(mglPoint(0,0,0),mglPoint(0.3,-0.5,0),0.3,"m",1,2); gr->Sphere(mglPoint(0.3,-0.5,0),0.25,"g"); - gr->SubPlot(2,2,2); gr->Text(mglPoint(0,1.2),"Oxygen, O_2",0,-3); gr->Rotate(60,120); gr->Drop(mglPoint(0,0.5,0),mglPoint(0,-0.3,0),0.3,"m",1,2); gr->Sphere(mglPoint(0,0.5,0),0.25,"r"); gr->Drop(mglPoint(0,-0.5,0),mglPoint(0,0.3,0),0.3,"m",1,2); gr->Sphere(mglPoint(0,-0.5,0),0.25,"r"); - gr->SubPlot(2,2,3); gr->Text(mglPoint(0,1.2),"Ammonia, NH_3",0,-3); gr->Rotate(60,120); gr->Sphere(mglPoint(0,0,0),0.25,"b"); @@ -5365,10 +6307,10 @@ gr->Drop(mglPoint(0,0,0),mglPoint(-0.65,0,0),0.32,"n",1,2); gr->Sphere(mglPoint(-0.65,0,0),0.25,"g"); @end verbatim @strong{MGL code} +@end ifclear @verbatim alpha on light on - subplot 2 2 0 text 0 1.2 'Methane, CH_4' '' -3 rotate 60 120 @@ -5381,7 +6323,6 @@ drop 0 0 0 0.47 0.82 -0.33 0.35 'h' 1 2 sphere 0.33 0.57 -0.23 0.25 'g' drop 0 0 0 0.47 -0.82 -0.33 0.35 'h' 1 2 sphere 0.33 -0.57 -0.23 0.25 'g' - subplot 2 2 1 text 0 1.2 'Water, H{_2}O' '' -3 rotate 60 100 @@ -5390,7 +6331,6 @@ drop 0 0 0 0.3 0.5 0 0.3 'm' 1 2 sphere 0.3 0.5 0 0.25 'g' drop 0 0 0 0.3 -0.5 0 0.3 'm' 1 2 sphere 0.3 -0.5 0 0.25 'g' - subplot 2 2 2 text 0 1.2 'Oxygen, O_2' '' -3 rotate 60 120 @@ -5398,7 +6338,6 @@ drop 0 0.5 0 0 -0.3 0 0.3 'm' 1 2 sphere 0 0.5 0 0.25 'r' drop 0 -0.5 0 0 0.3 0 0.3 'm' 1 2 sphere 0 -0.5 0 0.25 'r' - subplot 2 2 3 text 0 1.2 0 'Ammonia, NH_3' '' -3 rotate 60 120 @@ -5410,24 +6349,9 @@ sphere 0.33 -0.57 0 0.25 'g' drop 0 0 0 -0.65 0 0 0.32 'n' 1 2 sphere -0.65 0 0 0.25 'g' @end verbatim -@c @strong{Pure C code} -@c @verbatim -@c TO BE DONE -@c @end verbatim -@c @strong{Fortran code} -@c @verbatim -@c TO BE DONE -@c @end verbatim -@c @strong{Python} -@c @verbatim -@c TO BE DONE -@c @end verbatim - @c ------------------------------------------------------------------ @node Advanced features, , Additional features, Samples @section Advanced features - -@c ------------------------------------------------------------------ @menu * Curvelinear coorinates sample:: * 2-axes sample:: @@ -5443,38 +6367,34 @@ sphere -0.65 0 0 0.25 'g' * Manual ticks sample:: * ColumnPlot sample:: * StickPlot sample:: +* Stereo image sample:: @end menu - +@c ------------------------------------------------------------------ @node Curvelinear coorinates sample, 2-axes sample, , Advanced features @subsection Curvelinear coorinates sample @cindex Axis - @float -@image{png/sample3, 7cm} -@caption{Example of curvelinear coorinates usage. @tdref{sample3}} +@image{../png/sample3, 7cm} +@c @caption{Example of curvelinear coorinates usage. @tdref{sample3}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim gr->Org = mglPoint(-1,1,-1); - gr->SubPlot(2,2,0); gr->Rotate(60,40); gr->Line(mglPoint(-1,0.5,0),mglPoint(1,0.5,0),"r2",100); gr->Axis(); gr->Grid(); gr->Text(mglPoint(0,1.3,1),"Cartesian"); - gr->SubPlot(2,2,1); gr->Rotate(60,40); gr->SetFunc("y*sin(pi*x)","y*cos(pi*x)"); gr->Line(mglPoint(-1,0.5,0),mglPoint(1,0.5,0),"r2",100); gr->Axis(); gr->Grid(); gr->Text(mglPoint(0,1.3,1),"Cylindrical"); - gr->SubPlot(2,2,2); gr->Rotate(60,40); gr->SetFunc("2*y*x","y*y - x*x"); gr->Line(mglPoint(-1,0.5,0),mglPoint(1,0.5,0),"r2",100); gr->Axis(); gr->Grid(); gr->Text(mglPoint(0,1.3,1),"Parabolic"); - gr->SubPlot(2,2,3); gr->Rotate(60,40); gr->SetFunc("y*sin(pi*x)","y*cos(pi*x)","x+z"); gr->Line(mglPoint(-1,0.5,0),mglPoint(1,0.5,0),"r2",100); @@ -5483,16 +6403,15 @@ gr->Text(mglPoint(0,1.3,1),"Spiral"); gr->Axis(0,0,0); // set to default Cartesian @end verbatim @strong{MGL code} +@end ifclear @verbatim origin -1 1 -1 - subplot 2 2 0 rotate 60 40 line -1 0.5 0 1 0.5 0 'r2' axis grid text 0 1.3 1 'Cartesian' - subplot 2 2 1 rotate 60 40 axis 'y*sin(pi*x)' 'y*cos(pi*x)' '' @@ -5500,7 +6419,6 @@ line -1 0.5 0 1 0.5 0 'r2' axis grid text 0 1.3 1 'Cylindrical' - subplot 2 2 2 rotate 60 40 axis '2*y*x' 'y*y - x*x' '' @@ -5508,7 +6426,6 @@ line -1 0.5 0 1 0.5 0 'r2' axis grid text 0 1.3 1 'Parabolic' - subplot 2 2 3 rotate 60 40 axis 'y*sin(pi*x)' 'y*cos(pi*x)' 'x+z' @@ -5518,6 +6435,7 @@ grid text 0 1.3 1 'Spiral' axis '' '' '' # set to default Cartesian @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim mgl_set_origin(gr,-1,1,-1); @@ -5525,19 +6443,16 @@ mgl_subplot(gr,2,2,0); mgl_rotate(gr,60,40,0); mgl_line(gr,-1,0.5,0,1,0.5,0,"r2",100); mgl_axis(gr,"xyz"); mgl_axis_grid(gr,"xyz","B"); mgl_text(gr,0,1.3,1,"Cartesian"); - mgl_subplot(gr,2,2,1); mgl_rotate(gr,60,40,0); mgl_set_func(gr,"y*sin(pi*x)","y*cos(pi*x)",0); mgl_line(gr,-1,0.5,0,1,0.5,0,"r2",100); mgl_axis(gr,"xyz"); mgl_axis_grid(gr,"xyz","B"); mgl_text(gr,0,1.3,1,"Cylindrical"); - mgl_subplot(gr,2,2,2); mgl_rotate(gr,60,40,0); mgl_set_func(gr,"2*y*x","y*y - x*x",""); mgl_line(gr,-1,0.5,0,1,0.5,0,"r2",100); mgl_axis(gr,"xyz"); mgl_axis_grid(gr,"xyz","B"); mgl_text(gr,0,1.3,1,"Parabolic"); - mgl_subplot(gr,2,2,3); mgl_rotate(gr,60,40,0); mgl_set_func(gr,"y*sin(pi*x)","y*cos(pi*x)","x+z"); mgl_line(gr,-1,0.5,0,1,0.5,0,"r2",100); @@ -5548,14 +6463,12 @@ mgl_set_func(gr,0,0,0); /* set to default Cartesian */ @strong{Fortran code} @verbatim call mgl_set_origin(gr,-1.,1.,-1.) - call mgl_subplot(gr,2,2,0) call mgl_rotate(gr,60.,40.,0.) call mgl_line(gr,-1.,0.5,0.,1.,0.5,0.,'r2',100) call mgl_axis(gr,'xyz') call mgl_axis_grid(gr,'xyz','B') call mgl_text(gr,0.,1.3,1.,'Cartesian') - call mgl_subplot(gr,2,2,1) call mgl_rotate(gr,60.,40.,0.) call mgl_set_func(gr,'y*sin(pi*x)','y*cos(pi*x)','') @@ -5563,7 +6476,6 @@ call mgl_line(gr,-1.,0.5,0.,1.,0.5,0.,'r2',100) call mgl_axis(gr,'xyz') call mgl_axis_grid(gr,'xyz','B') call mgl_text(gr,0.,1.3,1.,'Cylindrical') - call mgl_subplot(gr,2,2,2) call mgl_rotate(gr,60.,40.,0.) call mgl_set_func(gr,'2*y*x','y*y - x*x','') @@ -5571,7 +6483,6 @@ call mgl_line(gr,-1.,0.5,0.,1.,0.5,0.,'r2',100) call mgl_axis(gr,'xyz') call mgl_axis_grid(gr,'xyz','B') call mgl_text(gr,0.,1.3,1.,"Parabolic") - call mgl_subplot(gr,2,2,3) call mgl_rotate(gr,60.,40.,0.) call mgl_set_func(gr,'y*sin(pi*x)','y*cos(pi*x)','x+z') @@ -5584,24 +6495,20 @@ call mgl_set_func(gr,'','','') ! set to default Cartesian @strong{Python} @verbatim gr.SetOrigin(-1,1,-1); - gr.SubPlot(2,2,0); gr.Rotate(60,40); gr.Line(-1,0.5,0,1,0.5,0,"r2",100); gr.Axis(); gr.Grid(); gr.Puts(0,1.3,1,"Gartesian","rC",-1.5); - gr.SubPlot(2,2,1); gr.Rotate(60,40); gr.SetFunc("y*sin(pi*x)","y*cos(pi*x)"); gr.Line(-1,0.5,0,1,0.5,0,"r2",100); gr.Axis(); gr.Grid(); gr.Puts(0,1.3,1,"Cylindrical","rC",-1.5); - gr.SubPlot(2,2,2); gr.Rotate(60,40); gr.SetFunc("2*y*x","y*y-x*x"); gr.Line(-1,0.5,0,1,0.5,0,"r2",100); gr.Axis(); gr.Grid(); gr.Puts(0,1.3,1,"Parabolic","rC",-1.5); - gr.SubPlot(2,2,3); gr.Rotate(60,40); gr.SetFunc("y*sin(pi*x)","y*cos(pi*x)","x+z"); gr.Line(-1,0.5,0,1,0.5,0,"r2",100); @@ -5609,17 +6516,16 @@ gr.Axis(); gr.Grid(); gr.Puts(0,1.3,1,"Spiral","rC",-1.5); gr.SetFunc("",""); # set to default Gartesian @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node 2-axes sample, Semi-log sample, Curvelinear coorinates sample, Advanced features @subsection 2-axes sample @cindex Axis - @float -@image{png/2_axis, 7cm} -@caption{Example of 2 axes on the plot. @tdref{2_axis}} +@image{../png/2_axis, 7cm} +@c @caption{Example of 2 axes on the plot. @tdref{2_axis}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData y1(50), y2(50); @@ -5632,6 +6538,7 @@ gr->Axis(); gr->Label('y',"axis 2",0); gr->Stem(y2,"r"); @end verbatim @strong{MGL code} +@end ifclear @verbatim new y1 50 new y2 50 @@ -5648,6 +6555,7 @@ axis ylabel 'axis 2' 0 stem y2 'r' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT y1 = mgl_create_data_size(50,1,1); @@ -5659,7 +6567,6 @@ mgl_set_origin(gr,-1.,-1.,-1.); mgl_axis(gr,"xyz"); mgl_label_ext(gr,'y',"axis 1",0,-1.4,0.); mgl_plot(gr,y1,"b"); - mgl_set_axis_2d(gr,0.,0.,1.,1.); mgl_set_origin(gr,1.,1.,1.); mgl_axis(gr,"xyz"); @@ -5678,7 +6585,6 @@ call mgl_set_origin(gr,-1.,-1.,-1.) call mgl_axis(gr,'xyz') call mgl_label_ext(gr,'y','axis 1',0,-1.4,0.) call mgl_plot(gr,y1,'b') - call mgl_set_axis_2d(gr,0.,0.,1.,1.) call mgl_set_origin(gr,1.,1.,1.) call mgl_axis(gr,'xyz') @@ -5692,49 +6598,44 @@ y1.Modify("0.3*sin(2*pi*x)"); y2.Modify("0.5+0.3*cos(2*pi*x)"); gr.SetRanges(-1,1,-1,1); gr.SetOrigin(-1,-1); gr.Axis(); gr.Label("y","axis 1",0); gr.Plot(y1,"b"); - gr.SetRanges(0,1,0,1); gr.SetOrigin(1,1); gr.Axis(); gr.Label("y","axis 2",0); gr.Stem(y2,"r"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Semi-log sample, Log-log sample, 2-axes sample, Advanced features @subsection Semi-log sample @cindex Axis @cindex SetTicks @cindex Plot - @float -@image{png/semilog, 7cm} -@caption{Example of semi-log plot. @tdref{semilog}} +@image{../png/semilog, 7cm} +@c @caption{Example of semi-log plot. @tdref{semilog}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData x(2000), y(2000); x.Modify("0.01/(x+10^(-5))"); y.Modify("sin(1/v)",x); - gr->Axis(mglPoint(0.01,-1),mglPoint(1000,1),mglPoint(0.01,-1)); gr->SetFunc("lg(x)",0); gr->SetTicks('x',0); - gr->Box(); gr->Plot(x,y,"b2"); gr->Axis(); gr->Grid("xy","g"); gr->Label('x',"x",0); gr->Label('y', "y = sin 1/x",0); @end verbatim @strong{MGL code} +@end ifclear @verbatim new x 2000 new y 2000 modify x '0.01/(x+10^(-5))' modify y 'sin(1/v)' x - xrange 0.01 1000 origin 0.01 -1 0 xtick 0 axis 'lg(x)' '' '' - plot x y 'b2' axis grid 'xy' 'g' @@ -5742,17 +6643,16 @@ xlabel 'x' 0 ylabel 'y = sin 1/x' 0 box @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT x = mgl_create_data_size(2000,1,1); HMDT y = mgl_create_data_size(2000,1,1); mgl_data_modify(x,"0.01/(x+10^(-5))",0); mgl_data_modify_vw(y,"sin(1/v)",x,0); - mgl_set_axis(gr,0.01,-1.,0.,1000.,1.,0.,0.01,-1.,0.); mgl_set_func(gr,"lg(x)",0,0); mgl_set_ticks(gr,0.,-5.,-5.); - mgl_box(gr,1); mgl_plot_xy(gr,x,y,"b2"); mgl_axis(gr,"xy"); mgl_axis_grid(gr,"xy","g"); @@ -5767,11 +6667,9 @@ x = mgl_create_data_size(2000,1,1) y = mgl_create_data_size(2000,1,1) call mgl_data_modify(x,'0.01/(x+10^(-5))',0) call mgl_data_modify_vw(y,'sin(1/v)',x,x) - call mgl_set_axis(gr,0.01,-1.,0.,1000.,1.,0.,0.01,-1.,0.) call mgl_set_func(gr,'lg(x)','','') call mgl_set_ticks(gr,0.,-5.,-5.) - call mgl_box(gr,1) call mgl_plot_xy(gr,x,y,'b2') call mgl_axis(gr,'xy') @@ -5785,45 +6683,41 @@ call mgl_delete_data(y) @verbatim TO BE DONE @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Log-log sample, Fitting sample, Semi-log sample, Advanced features @subsection Log-log sample @cindex Axis @cindex SetTicks @cindex Plot - @float -@image{png/loglog, 7cm} -@caption{Example of log-log plot. @tdref{loglog}} +@image{../png/loglog, 7cm} +@c @caption{Example of log-log plot. @tdref{loglog}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData x(100), y(100); x.Modify("pow(10,6*x-3)"); y.Modify("sqrt(1+v^2)",x); - gr->Axis(mglPoint(0.001,0.1),mglPoint(1000,1000),mglPoint(0.001,0.1)); gr->SetFunc("lg(x)","lg(y)"); gr->SetTicks('x',0); gr->SetTicks('y',0); - gr->Box(); gr->Plot(x,y,"b2"); gr->Axis(); gr->Grid("xy","g;"); gr->Label('x',"x",0); gr->Label('y', "y=\\sqrt{1+x^2}",0); @end verbatim @strong{MGL code} +@end ifclear @verbatim new x 100 new y 100 modify x 'pow(10,6*x-3)' modify y 'sqrt(1+v^2)' x - axis 0.001 0.1 1000 1000 xtick 0 ytick 0 axis 'lg(x)' 'lg(y)' '' - plot x y 'b2' axis grid 'xy' 'g;' @@ -5831,17 +6725,16 @@ xlabel 'x' 0 ylabel 'y=\sqrt{1+x^2}' 0 box @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT x = mgl_create_data_size(100,1,1); HMDT y = mgl_create_data_size(100,1,1); mgl_data_modify(x,"pow(10,6*x-3)",0); mgl_data_modify_vw(y,"sqrt(1+v^2)",x,0); - mgl_set_axis(gr,0.001,0.1,0.,1000.,1000.,0.,0.001,0.1,0.); mgl_set_func(gr,"lg(x)","lg(y)",0); mgl_set_ticks(gr,0.,0.,-5.); - mgl_box(gr,1); mgl_plot_xy(gr,x,y,"b2"); mgl_axis(gr,"xy"); mgl_axis_grid(gr,"xy","g;"); @@ -5856,11 +6749,9 @@ x = mgl_create_data_size(100,1,1) y = mgl_create_data_size(100,1,1) call mgl_data_modify(x,'pow(10,6*x-3)',0) call mgl_data_modify_vw(y,'sqrt(1+v^2)',x,x) - call mgl_set_axis(gr,0.001,0.1,0.,1000.,1000.,0.,0.001,0.1,0.) call mgl_set_func(gr,'lg(x)','lg(y)','') call mgl_set_ticks(gr,0.,0.,-5.) - call mgl_box(gr,1) call mgl_plot_xy(gr,x,y,'b2') call mgl_axis(gr,'xy') @@ -5881,28 +6772,25 @@ gr.Box(); gr.Plot(x,y,"b2"); gr.Axis(); gr.Grid("xy","g;"); gr.Label("x","x",0); gr.Label("y","y=\\sqrt{1+x^2}",0); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Fitting sample, Envelop sample, Log-log sample, Advanced features @subsection Fitting sample @cindex Fit @cindex PutsFit - @float -@image{png/fit, 7cm} -@caption{Example of nonlinear fitting. @tdref{fit}} +@image{../png/fit, 7cm} +@c @caption{Example of nonlinear fitting. @tdref{fit}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData rnd(100), in(100), res; rnd.Fill("0.4*rnd+0.1+sin(2*pi*x)", gr->Min, gr->Max); in.Fill("0.3+sin(2*pi*x)", gr->Min, gr->Max); - gr->Axis(mglPoint(-1,-2), mglPoint(1,2)); gr->Plot(rnd, ". "); gr->Box(); - float ini[3] = {1,1,3}; gr->Fit(res, rnd, "a+b*sin(c*x)", "abc", ini); gr->Plot(res, "r"); @@ -5912,16 +6800,15 @@ gr->PutsFit(mglPoint(0, -1.8), "y = ", "C:r", -1); gr->Text(mglPoint(0, 2.2), "initial: y = 0.3+sin(2\\pi x)", "C:b", -1); @end verbatim @strong{MGL code} +@end ifclear @verbatim new rnd 100 fill rnd '0.4*rnd+0.1+sin(2*pi*x)' new in 100 fill in '0.3+sin(2*pi*x)' - yrange -2 2 plot rnd '. ' box - list ini 1 1 3 fit res rnd 'a+b*sin(c*x)' 'abc' ini plot res 'r' @@ -5930,6 +6817,7 @@ text -1 -1.3 'fitted:' 'L:r' -1 putsfit 0 -1.8 'y = ' 'C:r' text 0 2.2 'initial: y = 0.3+sin(2\pi x)' 'C:b' -1 @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT rnd,in,res; @@ -5942,7 +6830,6 @@ mgl_data_modify(in,"0.3+sin(4*pi*x)",0); mgl_set_axis_2d(gr,-1.,-2.,1.,2.); mgl_plot(gr,rnd,". "); mgl_box(gr,1); - mgl_fit_1(gr,res,rnd,"a+b*sin(c*x)","abc",ini); mgl_plot(gr,res,"r"); mgl_plot(gr,in,"b"); mgl_puts_ext(gr,-1.,-1.3,0.,"fitted:","L:r",-1.,'t'); @@ -5962,7 +6849,6 @@ call mgl_data_modify(in,"0.3+sin(4*pi*x)",0); call mgl_set_axis_2d(gr,-1.,-2.,1.,2.); call mgl_plot(gr,rnd,". "); call mgl_box(gr,1); - call mgl_fit_1(gr,res,rnd,"a+b*sin(c*x)","abc",ini); call mgl_plot(gr,res,"r"); call mgl_plot(gr,in,"b"); @@ -5978,7 +6864,6 @@ In.Modify("0.3+sin(4*pi*x)"); gr.SetRanges(-1,1,-2,2); gr.Plot(rnd,". "); gr.Box(); - ini[0], ini[1], ini[2] = 1, 1, 3; gr.Fit(res,rnd,"a+b*sin(c*x)","abc",ini); gr.Plot(res,"r"); gr.Plot(In,"b"); @@ -5986,17 +6871,16 @@ gr.Puts(-1,-1.3,0,"fitted:","L:r",-1); gr.PutsFit(0,-1.8,0,"y = ","C:r",-1); gr.Puts(0,2.2,0,"initial: y = 0.3+sin(2\\pi x)","C:b",-1); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Envelop sample, Sew sample, Fitting sample, Advanced features @subsection Envelop sample @cindex Envelop - @float -@image{png/envelop, 7cm} -@caption{Example of envelop reconstruction.}@c @tdref{envelop}} +@image{../png/envelop, 7cm} +@c @caption{Example of envelop reconstruction.}@c @tdref{envelop}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(1000); @@ -6007,6 +6891,7 @@ gr->Plot(a, "r"); gr->Axis(); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 1000 fill a 'exp(-8*x^2)*sin(10*pi*x)' @@ -6015,6 +6900,7 @@ envelop a plot a 'r' axis @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(1000,1,1); @@ -6043,17 +6929,16 @@ a.Envelop("x"); gr.Plot(a,"r"); gr.Axis(); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Sew sample, STFA sample, Envelop sample, Advanced features @subsection Sew sample @cindex Sew - @float -@image{png/sew, 7cm} -@caption{Example of phase ``sewing''.}@c @tdref{sew}} +@image{../png/sew, 7cm} +@c @caption{Example of phase ``sewing''.}@c @tdref{sew}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(100, 100); @@ -6067,6 +6952,7 @@ gr->Surf(a, "r"); gr->Box(); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 100 100 modify a 'mod((y^2-(1-x)^2)/2,0.1)' @@ -6078,6 +6964,7 @@ sew a 'xy' 0.1 surf a 'r' box @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(100,100,1); @@ -6085,7 +6972,6 @@ mgl_data_modify(a, "mod((y^2-(1-x)^2)/2, 0.1)", 0); mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_alpha(gr,1); - mgl_surf(gr,a,"b"); mgl_data_sew(a,"xy",0.1); mgl_surf(gr,a,"r"); @@ -6099,7 +6985,6 @@ call mgl_data_modify(a, 'mod((y^2-(1-x)^2)/2, 0.1)', 0) call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_alpha(gr,1) - call mgl_surf(gr,a,'b') call mgl_data_sew(a,'xy',0.1) call mgl_surf(gr,a,'r') @@ -6115,17 +7000,16 @@ a.Sew("xy", 0.1); gr.Surf(a, "r"); gr.Box(); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node STFA sample, PDE sample, Sew sample, Advanced features @subsection STFA sample @cindex STFA - @float -@image{png/stfa, 7cm} -@caption{Example of Short Time Fourier Analysis.}@c @tdref{stfa}} +@image{../png/stfa, 7cm} +@c @caption{Example of Short Time Fourier Analysis.}@c @tdref{stfa}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a(2000), b(2000); @@ -6136,7 +7020,6 @@ gr->SubPlot(1, 2, 0); gr->Plot(a); gr->Axis(); gr->Label('x', "\\i t"); - gr->SubPlot(1, 2, 1); gr->STFA(a, b, 64); gr->Axis(); @@ -6144,6 +7027,7 @@ gr->Label('x', "\\i t"); gr->Label('y', "\\omega", 0); @end verbatim @strong{MGL code} +@end ifclear @verbatim new a 2000 new b 2000 @@ -6159,6 +7043,7 @@ axis ylabel '\omega' 0 xlabel '\i t' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data_size(2000,1,1); @@ -6169,7 +7054,6 @@ mgl_subplot(gr,1,2,0); mgl_plot(gr,a,""); mgl_axis(gr,"xy"); mgl_label(gr,'x', "\\i t"); - mgl_subplot(gr,1,2,1); mgl_stfa(gr,a,b,64,"",0.); mgl_axis(gr,"xy"); @@ -6187,7 +7071,6 @@ call mgl_subplot(gr,1,2,0) call mgl_plot(gr,a,'') call mgl_axis(gr,'xy') call mgl_label(gr,'x', '\i t') - call mgl_subplot(gr,1,2,1) call mgl_stfa(gr,a,b,64,'',0.) call mgl_axis(gr,'xy') @@ -6203,25 +7086,23 @@ gr.SubPlot(1, 2, 0); gr.Plot(a); gr.Axis(); gr.Label('x', "\\i t"); - gr.SubPlot(1, 2, 1); gr.STFA(a, b, 64); gr.Axis(); gr.Label('x', "\\i t"); gr.Label('y', "\\omega", 0); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node PDE sample, Beam tracing sample, STFA sample, Advanced features @subsection PDE sample @cindex mglPDE @cindex mglRay - @float -@image{png/pde, 7cm} -@caption{Example of Partial Differential Eduation solving.}@c @tdref{pde}} +@image{../png/pde, 7cm} +@c @caption{Example of Partial Differential Eduation solving.}@c @tdref{pde}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData a,re(128),im(128); @@ -6240,23 +7121,23 @@ gr->Title("\\r{Equation:} ik_0\\partial_zu + \\Delta u + x\\cdot u + \ i \\frac{x+z}{2}\\cdot u = 0", "iC", -1.5); @end verbatim @strong{MGL code} +@end ifclear @verbatim axis xlabel '\i x' ylabel '\i z' - new re 128 new im 128 fill re 'exp(-48*(x+0.7)^2)' pde a 'p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)' re im 0.01 30 transpose a - crange 0 1 dens a 'wyrRk' fplot '-x' 'k|' text 0 0.85 'absorption: (x+z)/2 for x+z>0' '' -1 title 'Equation: ik_0\partial_zu + \Delta u + x\cdot u + i \frac{x+z}{2}\cdot u = 0' 'iC' -1.5 @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim HMDT a = mgl_create_data(); @@ -6265,7 +7146,6 @@ HMDT im = mgl_create_data_size(128,1,1); mgl_axis(gr,"xyz"); mgl_label(gr,'x', "\\i x"); mgl_label(gr,'y', "\\i z"); - mgl_data_fill_eq(gr,re,"exp(-48*(x+0.7)^2)", 0, 0); a = mgl_pde_solve(gr, "p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)", re, im, 0.01, 30.); mgl_data_transpose(a, "yxz"); @@ -6288,7 +7168,6 @@ im = mgl_create_data_size(128,1,1) call mgl_axis(gr,'xyz') call mgl_label(gr,'x', '\i x') call mgl_label(gr,'y', '\i z') - call mgl_data_fill_eq(gr,re,'exp(-48*(x+0.7)^2)', 0, 0) a = mgl_pde_solve(gr, 'p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)', re, im, 0.01, 30.) call mgl_data_transpose(a, 'yxz') @@ -6319,18 +7198,17 @@ gr.Puts(0, 0.85, 0., "absorption: (x+z)/2 for x+z>0"); gr.Title("\\r{Equation:} ik_0\\partial_zu + \\Delta u + x\\cdot u + \ i \\frac{x+z}{2}\\cdot u = 0", "iC", -1.5); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Beam tracing sample, Parser sample, PDE sample, Advanced features @subsection Beam tracing sample @cindex mglQO2d @cindex mglRay - @float -@image{png/qo2d, 7cm} -@caption{Example of ray and beam tracing. Compare with @ref{PDE sample}.}@c @tdref{qo2d}} +@image{../png/qo2d, 7cm} +@c @caption{Example of ray and beam tracing. Compare with @ref{PDE sample}.}@c @tdref{qo2d}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim mglData r, xx, yy, a, im(128), re(128); @@ -6349,6 +7227,7 @@ gr->Puts(mglPoint(0.7, -0.05), "central ray"); gr->Title("Beam and ray tracing", "C", -1.5); @end verbatim @strong{MGL code} +@end ifclear @verbatim define $1 'p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)' ray r $1 -0.7 -1 0 0 0.5 0 0.02 2 @@ -6356,14 +7235,12 @@ plot r(0) r(1) 'k' axis xlabel '\i x' ylabel '\i z' - new re 128 new im 128 new xx new yy fill re 'exp(-48*x^2)' qo2d a $1 re im r 1 30 xx yy - crange 0 1 dens xx yy a 'wyrRk' fplot '-x' 'k|' @@ -6371,6 +7248,7 @@ text -0.8 0.85 'absorption: (x+y)/2 for x+y>0' 'L' -1 text 0.5 -0.05 'central ray' 'L' -1 title 'Beam and ray tracing' 'C' -1.5 @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim const char *ham = "p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)"; @@ -6384,7 +7262,6 @@ mgl_plot_xy(gr, xx, yy, "k"); mgl_axis(gr,"xyz"); mgl_label(gr,'x',"\\i x"); mgl_label(gr,'y',"\\i z"); - mgl_data_fill_eq(gr,re,"exp(-48*x^2)", 0, 0); a = mgl_qo2d_solve(ham, re, im, r, 1, 30, xx, yy); mgl_set_caxis(gr,0.,1.); @@ -6403,7 +7280,6 @@ integer r, xx, yy, a, im, re, mgl_create_data_size integer mgl_data_subdata, mgl_ray_trace, mgl_qo2d_solve character*64 ham ham = 'p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)' - im = mgl_create_data_size(128,1,1) re = mgl_create_data_size(128,1,1) r = mgl_ray_trace(ham, -0.7, -1., 0., 0., 0.5, 0., 0.02, 2.) @@ -6413,7 +7289,6 @@ call mgl_plot_xy(gr, xx, yy, 'k') call mgl_axis(gr,'xyz') call mgl_label(gr,'x','\i x') call mgl_label(gr,'y','\i z') - call mgl_data_fill_eq(gr,re,'exp(-48*x^2)', 0, 0) a = mgl_qo2d_solve(ham, re, im, r, 1., 30., xx, yy) call mgl_set_caxis(gr,0.,1.) @@ -6435,10 +7310,8 @@ ham = "p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)"; r, xx, yy, a = mglData(), mglData(), mglData(), mglData(); im, re = mglData(128), mglData(128); r = mglRay(ham, mglPoint(-0.7, -1), mglPoint(0, 0.5), 0.02, 2); - gr.Plot(r.SubData(0), r.SubData(1), "k"); gr.Axis(); gr.Label('x', "\\i x"); gr.Label('y', "\\i z"); - gr.Fill(re,"exp(-48*x^2)"); a = mglQO2d(ham, re, im, r, 1, 30, xx, yy); gr.SetCRange(0, 1); @@ -6448,17 +7321,16 @@ gr.Puts(0, 0.85, 0, "absorption: (x+y)/2 for x+y>0"); gr.Puts(0.7, -0.05, 0, "central ray"); gr.Title("Beam and ray tracing", "C", -1.5); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Parser sample, Manual ticks sample, Beam tracing sample, Advanced features @subsection Parser sample @cindex mglParse - +@ifclear UDAV @float -@image{png/parser, 7cm} -@caption{Example of MGL parsing.}@c @tdref{parser}} +@image{../png/parser, 7cm} +@c @caption{Example of MGL parsing.}@c @tdref{parser}} @end float - @strong{C++ code} @verbatim float a[100]; // let a_i = sin(4*pi*x), x=0...1 @@ -6532,17 +7404,16 @@ parser.Execute(gr, "xlabel 'x'\nylabel 'y'"); # also you may use cycles or conditions in script parser.Execute(gr, "for $0 -1 1 0.1\nline 0 0 -1 $0 'r'\nnext"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Manual ticks sample, ColumnPlot sample, Parser sample, Advanced features @subsection Tick values sample @cindex SetTicksVal - @float -@image{png/tval, 7cm} -@caption{Example of MGL parsing.}@c @tdref{tval}} +@image{../png/tval, 7cm} +@c @caption{Example of manual tick values.}@c @tdref{tval}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim gr->Axis(mglPoint(-M_PI, 0), mglPoint(M_PI, 2)); @@ -6552,6 +7423,7 @@ gr->Axis(); gr->Grid(); gr->Plot("2*cos(x^2)^2", "r2", NAN, 300); @end verbatim @strong{MGL code} +@end ifclear @verbatim axis -pi 0 pi 2 xtick -pi '-\pi' -1.571 '-\pi/2' 0 '0' 0.886 'x^*' 1.571 '\pi/2' pi '\pi' @@ -6559,6 +7431,7 @@ axis grid fplot '2*cos(x^2)^2' 'r2' nan 300 @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim mgl_set_axis_2d(gr, -M_PI, 0, M_PI, 2); @@ -6582,21 +7455,16 @@ parser.Execute(gr, "xtick -pi '-\pi' -1.571 '-\pi/2' 0 '0' " gr.Axis(); gr.Grid(); gr.Plot("2*cos(x^2)^2", "r2", 300); @end verbatim - - - - - +@end ifclear @c ------------------------------------------------------------------ @node ColumnPlot sample, StickPlot sample, Manual ticks sample, Advanced features @subsection ColumnPlot sample -@cindex SetTicksVal - +@cindex ColumnPlot @float -@image{png/column, 7cm} -@caption{Example of MGL parsing.}@c @tdref{tval}} +@image{../png/column, 7cm} +@c @caption{Example of ColumnPlot.}@c @tdref{column}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim char str[32]; @@ -6611,6 +7479,7 @@ for(int i=0;i<4;i++) } @end verbatim @strong{MGL code} +@end ifclear @verbatim for $1 0 3 columnplot 4 $1 @@ -6619,6 +7488,7 @@ text -0.5 0.5 'Plot $1 of 4' fplot 'sin(pi*x+pi*$1/2)' next @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim int i; @@ -6639,18 +7509,18 @@ NOT AVAILABLE @end verbatim @strong{Python} @verbatim +NOT AVAILABLE @end verbatim - +@end ifclear @c ------------------------------------------------------------------ -@node StickPlot sample, , ColumnPlot sample, Advanced features +@node StickPlot sample, Stereo image sample, ColumnPlot sample, Advanced features @subsection StickPlot sample -@cindex SetTicksVal - +@cindex StickPlot @float -@image{png/column, 7cm} -@caption{Example of MGL parsing.}@c @tdref{tval}} +@image{../png/stick, 7cm} +@c @caption{Example of StickPlot.}@c @tdref{stick}} @end float - +@ifclear UDAV @strong{C++ code} @verbatim gr->SetRanges(-1, 1, -1, 1, 0, 1); gr->Light(true); @@ -6666,6 +7536,7 @@ gr->Text(mglPoint(0.2, 0, 1.2), "z=2", "", -2); gr->Label('x',"\\tau", 0); gr->Label('y', "\\rho"); @end verbatim @strong{MGL code} +@end ifclear @verbatim ranges -1 1 -1 1 0 1:light on stickplot 3 0 40 30 : axis 'xyz_' @@ -6679,6 +7550,7 @@ fsurf 'exp(-10*y^2/5-6*x^2)/sqrt(5)' text 0.2 0 1.2 'z=2' '' -2 xlabel '\tau' 0 : ylabel '\rho' @end verbatim +@ifclear UDAV @strong{Pure C code} @verbatim mgl_set_axis_3d(gr, -1, -1, 0, 1, 1, 1); @@ -6716,4 +7588,83 @@ gr->Surf("exp(-10*y^2/5-6*x^2)/sqrt(5)"); gr->Text(mglPoint(0.2, 0, 1.2), "z=2", "", -2); gr->Label('x',"\\tau", 0); gr->Label('y', "\\rho"); @end verbatim +@end ifclear +@c ------------------------------------------------------------------ +@node Stereo image sample, , StickPlot sample, Advanced features +@subsection Stereo image sample +@float +@image{../png/stereo, 7cm} +@c @caption{Example of stereo image.}@c @tdref{stereo}} +@end float +@ifclear UDAV +@strong{C++ code} +@verbatim +mglData a(50,40); +a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); +gr->Light(true); +gr->SubPlot(2,1,0); +gr->Rotate(40,60+3); +gr->Box(); gr->Surf(a); +gr->SubPlot(2,1,1); +gr->Rotate(40,60-3); +gr->Box(); gr->Surf(a); +@end verbatim +@strong{MGL code} +@end ifclear +@verbatim +new a 50 40 +modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' +light on +subplot 2 1 0 +rotate 40 60+3 +box:surf a +subplot 2 1 1 +rotate 40 60-3 +box:surf a +@end verbatim +@ifclear UDAV +@strong{Pure C code} +@verbatim +HMDT a = mgl_create_data_size(50,40,1); +mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); +mgl_set_light(gr,1); +mgl_subplot(gr,2,1,0); +mgl_rotate(gr,40.,60.+3.,0.); +mgl_box(gr,1); +mgl_surf(gr,a,0); +mgl_subplot(gr,2,1,1); +mgl_rotate(gr,40.,60.-3.,0.); +mgl_box(gr,1); +mgl_surf(gr,a,0); +mgl_delete_data(a); +@end verbatim +@strong{Fortran code} +@verbatim +integer a, mgl_create_data_size +a = mgl_create_data_size(50,40,1); +call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); +call mgl_set_light(gr,1) +call mgl_subplot(gr,2,1,0) +call mgl_rotate(gr,40.,60.+3.,0.) +call mgl_box(gr,1) +call mgl_surf(gr,a,'') +call mgl_subplot(gr,2,1,1) +call mgl_rotate(gr,40.,60.-3.,0.) +call mgl_box(gr,1) +call mgl_surf(gr,a,'') +call mgl_delete_data(a) +@end verbatim +@strong{Python} +@verbatim +a = mglData(50,40); +a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))"); +gr.Light(True); +gr.SubPlot(2,1,0); +gr.Rotate(40,60+3); +gr.Surf(a); gr.Box(); +gr.SubPlot(2,1,1); +gr.Rotate(40,60-3); +gr.Surf(a); gr.Box(); +@end verbatim +@end ifclear diff --git a/texinfo/samples_ru.texi b/texinfo/samples_ru.texi index 4ee92f3..a60a6b9 100644 --- a/texinfo/samples_ru.texi +++ b/texinfo/samples_ru.texi @@ -1,13 +1,10 @@ @c ------------------------------------------------------------------ -@node Samples, Символы TeX, MGL interface, Top @chapter Примеры использования MathGL - -Эта глава содержит множество примеров кода для всех типов графиков, наиболее важных возможностей библиотеки и советов. Аналогичные примеры (с картинками) можно найти на @uref{http://mathgl.sf.net/pictures.html}. Большинство примеров содержат код на 5 языках: C++, MGL, C, Fortran и Python. Однако, в некоторых я помещал только C++ код, поскольку соответствующий код слишком большой и ясно как его можно переписать на другие языки. - +Эта глава содержит множество примеров кода для всех типов графиков, наиболее важных возможностей библиотеки и советов. Аналогичные примеры (с картинками) можно найти на @uref{http://mathgl.sf.net/pictures.html}. +@ifclear UDAV +MБольшинство примеров содержат код на 5 языках: C++, MGL, C, Fortran и Python. Однако, в некоторых я помещал только C++ код, поскольку соответствующий код слишком большой и ясно как его можно переписать на другие языки. Минимальный код для запуска и просмотра примеров на различных языках следующий. - @strong{C++ код} - Для компиляции используйте: @code{g++ -o sample sample.cpp -lmgl}. @verbatim #include @@ -22,7 +19,6 @@ int main() } @end verbatim @strong{MGL скрипт} - Для просмотра используйте: @code{mglview sample.mgl}. @verbatim #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -31,7 +27,6 @@ int main() #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @end verbatim @strong{C-ый код} - Для компиляции используйте: @code{gcc -o sample sample.c -lmgl}. @verbatim #include @@ -47,7 +42,6 @@ int main() } @end verbatim @strong{Fortran} - Для компиляции используйте: @code{gfortran -o sample sample.f90 -lmgl}. Замечу, что фортран не имеет проверки аргументов. Поэтому обратите особое внимание на передаваемые аргументы -- не путайте целые и действительные (с плавающей точкой) числа/аргументы. Никакого контроля в компиляторе для этого не предусмотрено!!! @verbatim integer gr, mgl_create_graph_zb @@ -60,7 +54,6 @@ call mgl_delete_graph(gr) end @end verbatim @strong{Python} - Для просмотра используйте: @code{python sample.py}. @verbatim from mathgl import * @@ -70,31 +63,34 @@ gr = mglGraph(); #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ gr.ShowImage(); @end verbatim - - +@end ifclear @menu * 1D plotting samples:: * 2D plotting samples:: * 3D plotting samples:: * Dual plotting samples:: +* Basic features:: * Additional features:: * Advanced features:: @end menu - @c ------------------------------------------------------------------ @node 1D plotting samples, 2D plotting samples,, Samples @section Примеры 1D графиков - @menu * Plot sample:: * Radar sample:: * Tens sample:: * Area sample:: +* Area gradient sample:: * Bars sample:: +* Bars 2 colors sample:: +* Bars above sample:: +* Bars fall sample:: * Barh sample:: * Step sample:: * Stem sample:: * Region sample:: +* Region gradient sample:: * Error sample:: * BoxPlot sample:: * Mark sample:: @@ -104,18 +100,17 @@ gr.ShowImage(); * Torus sample:: * Chart sample:: * Pie chart sample:: +* Ring chart sample:: @end menu - @c ------------------------------------------------------------------ @node Plot sample, Radar sample,, 1D plotting samples @subsection Plot -- пример использования @cindex Plot - @float -@image{png/plot, 7cm} -@caption{Example of Plot. @tdref{plot}} +@image{../png/plot, 7cm} +@c @caption{Example of Plot. @tdref{plot}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData y(50,3); @@ -126,6 +121,7 @@ gr->Box(); gr->Plot(y); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new y 50 3 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)' @@ -134,6 +130,7 @@ modify y 'cos(2*pi*x)' 2 box plot y @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT y = mgl_create_data_size(50,3,1); @@ -164,19 +161,16 @@ y.Modify("cos(2*pi*x)",2); gr.Box(); gr.Plot(y); @end verbatim - - - +@end ifclear @c ------------------------------------------------------------------ @node Radar sample, Tens sample, Plot sample, 1D plotting samples @subsection Radar -- пример использования @cindex Radar - @float -@image{png/radar, 7cm} -@caption{Example of Plot. @tdref{radar}} +@image{../png/radar, 7cm} +@c @caption{Example of Plot. @tdref{radar}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData y(10,3); @@ -184,11 +178,13 @@ y.Modify("0.4*sin(pi*(2*x+y/2))+0.1*rnd"); gr->Radar(y,"#"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new y 10 3 modify y '0.4*sin(pi*(2*x+y/2))+0.1*rnd' radar y '#' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT y = mgl_create_data_size(10,3,1); @@ -210,18 +206,16 @@ y = mglData(10,3); y.Modify("0.4*sin(pi*(2*x+y/2))+0.1*rnd"); gr.Radar(y,"#"); @end verbatim - - +@end ifclear @c ------------------------------------------------------------------ @node Tens sample, Area sample, Radar sample, 1D plotting samples @subsection Tens -- пример использования @cindex Tens - @float -@image{png/tens, 7cm} -@caption{Example of Tens. @tdref{tens}} +@image{../png/tens, 7cm} +@c @caption{Example of Tens. @tdref{tens}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData y(50), c(50); @@ -231,6 +225,7 @@ gr->Box(); gr->Tens(y,c); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new y 50 new c 50 @@ -239,6 +234,7 @@ modify c 'sin(2*pi*x)' box tens y c @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT y = mgl_create_data_size(50,1,1); @@ -271,17 +267,16 @@ c.Modify("sin(2*pi*x)"); gr.Box(); gr.Tens(y,c); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ -@node Area sample, Bars sample, Tens sample, 1D plotting samples +@node Area sample, Area gradient sample, Tens sample, 1D plotting samples @subsection Area -- пример использования @cindex Area - @float -@image{png/area, 7cm} -@caption{Example of Area. @tdref{area}} +@image{../png/area, 7cm} +@c @caption{Example of Area. @tdref{area}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData y(50,3); @@ -293,6 +288,7 @@ gr->Box(); gr->Area(y); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new y 50 3 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)' @@ -302,6 +298,7 @@ origin 0 0 box area y @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT y = mgl_create_data_size(50,3,1); @@ -335,17 +332,81 @@ gr.SetOrigin(0.,0.); gr.Box(); gr.Area(y); @end verbatim - +@end ifclear +@c ------------------------------------------------------------------ +@node Area gradient sample, Bars sample, Tens sample, 1D plotting samples +@subsection Area с градиентной заливкой -- пример использования +@cindex Area +@float +@image{../png/area_2, 7cm} +@c @caption{Example of Area. @tdref{area}} +@end float +@ifclear UDAV +@strong{C++ код} +@verbatim +mglData y(50,3); +y.Modify("0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0); +y.Modify("sin(2*pi*x)",1); +y.Modify("cos(2*pi*x)",2); +gr->Org=mglPoint(0,0); +gr->Box(); +gr->Area(y,"cbgGyr"); +@end verbatim +@strong{MGL скрипт} +@end ifclear +@verbatim +new y 50 3 +modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)' +modify y 'sin(2*pi*x)' 1 +modify y 'cos(2*pi*x)' 2 +origin 0 0 +box +area y 'cbgGyr' +@end verbatim +@ifclear UDAV +@strong{C-ый код} +@verbatim +HMDT y = mgl_create_data_size(50,3,1); +mgl_data_modify(y,"0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0); +mgl_data_modify(y,"sin(2*pi*x)",1); +mgl_data_modify(y,"cos(2*pi*x)",2); +mgl_set_origin(gr,0.,0.,0.); +mgl_box(gr,1); +mgl_area(gr,y,"cbgGyr"); +mgl_delete_data(y); +@end verbatim +@strong{Fortran} +@verbatim +integer y, mgl_create_data_size +y = mgl_create_data_size(50,3,1) +call mgl_data_modify(y,'0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)',0) +call mgl_data_modify(y,'sin(2*pi*x)',1) +call mgl_data_modify(y,'cos(2*pi*x)',2) +call mgl_set_origin(gr,0.,0.,0.) +call mgl_box(gr,1) +call mgl_area(gr,y,'cbgGyr') +call mgl_delete_data(y) +@end verbatim +@strong{Python} +@verbatim +y = mglData(50,3); +y.Modify("0.7*sin(2*pi*x)+0.5*cos(3*pi*x)+0.2*sin(pi*x)",0); +y.Modify("sin(2*pi*x)",1); +y.Modify("cos(2*pi*x)",2); +gr.SetOrigin(0.,0.); +gr.Box(); +gr.Area(y,"cbgGyr"); +@end verbatim +@end ifclear @c ------------------------------------------------------------------ -@node Bars sample, Barh sample, Area sample, 1D plotting samples +@node Bars sample, Bars 2 colors sample, Area gradient sample, 1D plotting samples @subsection Bars -- пример использования @cindex Bars - @float -@image{png/bars, 7cm} -@caption{Example of Bars. @tdref{bars}} +@image{../png/bars, 7cm} +@c @caption{Example of Bars. @tdref{bars}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData y(10,3); @@ -355,6 +416,7 @@ gr->Box(); gr->Bars(y); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new y 10 3 modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd' @@ -362,6 +424,7 @@ origin 0 0 box bars y @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT y = mgl_create_data_size(10,3,1); @@ -389,17 +452,184 @@ gr.SetOrigin(0.,0.); gr.Box(); gr.Bars(y); @end verbatim +@end ifclear @c ------------------------------------------------------------------ -@node Barh sample, Step sample, Bars sample, 1D plotting samples +@node Bars 2 colors sample, Bars above sample, Bars sample, 1D plotting samples +@subsection Bars (2 цвета) -- пример использования +@cindex Bars +@float +@image{../png/bars_2, 7cm} +@c @caption{Example of Bars. @tdref{bars}} +@end float +@ifclear UDAV +@strong{C++ код} +@verbatim +mglData y(10,3); +y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd"); +gr->Org=mglPoint(0,0); +gr->Box(); +gr->Bars(y,"cbgGyr"); +@end verbatim +@strong{MGL скрипт} +@end ifclear +@verbatim +new y 10 3 +modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd' +origin 0 0 +box +bars y 'cbgGyr' +@end verbatim +@ifclear UDAV +@strong{C-ый код} +@verbatim +HMDT y = mgl_create_data_size(10,3,1); +mgl_data_modify(y,"0.8*sin(pi*(2*x+y/2))+0.2*rnd"); +mgl_set_origin(gr,0.,0.,0.); +mgl_box(gr,1); +mgl_bars(gr,y,"cbgGyr"); +mgl_delete_data(y); +@end verbatim +@strong{Fortran} +@verbatim +integer y, mgl_create_data_size +y = mgl_create_data_size(10,3,1) +call mgl_data_modify(y,'0.8*sin(pi*(2*x+y/2))+0.2*rnd') +call mgl_set_origin(gr,0.,0.,0.) +call mgl_box(gr,1) +call mgl_bars(gr,y,'cbgGyr') +call mgl_delete_data(y) +@end verbatim +@strong{Python} +@verbatim +y = mglData(10,3); +y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd"); +gr.SetOrigin(0.,0.); +gr.Box(); +gr.Bars(y,"cbgGyr"); +@end verbatim +@end ifclear +@c ------------------------------------------------------------------ +@node Bars above sample, Bars fall sample, Bars 2 colors sample, 1D plotting samples +@subsection Bars (один над другим) -- пример использования +@cindex Bars +@float +@image{../png/bars_a, 7cm} +@c @caption{Example of Bars. @tdref{bars}} +@end float +@ifclear UDAV +@strong{C++ код} +@verbatim +mglData y(10,3); +y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd"); +gr->Org=mglPoint(0,0); +gr->Box(); +gr->Bars(y,"a"); +@end verbatim +@strong{MGL скрипт} +@end ifclear +@verbatim +new y 10 3 +modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd' +origin 0 0 +box +bars y 'a' +@end verbatim +@ifclear UDAV +@strong{C-ый код} +@verbatim +HMDT y = mgl_create_data_size(10,3,1); +mgl_data_modify(y,"0.8*sin(pi*(2*x+y/2))+0.2*rnd"); +mgl_set_origin(gr,0.,0.,0.); +mgl_box(gr,1); +mgl_bars(gr,y,"a"); +mgl_delete_data(y); +@end verbatim +@strong{Fortran} +@verbatim +integer y, mgl_create_data_size +y = mgl_create_data_size(10,3,1) +call mgl_data_modify(y,'0.8*sin(pi*(2*x+y/2))+0.2*rnd') +call mgl_set_origin(gr,0.,0.,0.) +call mgl_box(gr,1) +call mgl_bars(gr,y,'a') +call mgl_delete_data(y) +@end verbatim +@strong{Python} +@verbatim +y = mglData(10,3); +y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd"); +gr.SetOrigin(0.,0.); +gr.Box(); +gr.Bars(y,"a"); +@end verbatim +@end ifclear +@c ------------------------------------------------------------------ +@node Bars fall sample, Bars above sample, Bars above sample, 1D plotting samples +@subsection Bars "водопад" -- пример использования +@cindex Bars +@float +@image{../png/bars_f, 7cm} +@c @caption{Example of Bars. @tdref{bars}} +@end float +@ifclear UDAV +@strong{C++ код} +@verbatim +mglData y(10,3); +y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd"); +gr->Org=mglPoint(0,0); +gr->Box(); +gr->Bars(y,"f"); +@end verbatim +@strong{MGL скрипт} +@end ifclear +@verbatim +new y 10 3 +modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd' +origin 0 0 +box +bars y 'f' +@end verbatim +@ifclear UDAV +@strong{C-ый код} +@verbatim +HMDT y = mgl_create_data_size(10,3,1); +mgl_data_modify(y,"0.8*sin(pi*(2*x+y/2))+0.2*rnd"); +mgl_set_origin(gr,0.,0.,0.); +mgl_box(gr,1); +mgl_bars(gr,y,"f"); +mgl_delete_data(y); +@end verbatim +@strong{Fortran} +@verbatim +integer y, mgl_create_data_size +y = mgl_create_data_size(10,3,1) +call mgl_data_modify(y,'0.8*sin(pi*(2*x+y/2))+0.2*rnd') +call mgl_set_origin(gr,0.,0.,0.) +call mgl_box(gr,1) +call mgl_bars(gr,y,'f') +call mgl_delete_data(y) +@end verbatim +@strong{Python} +@verbatim +y = mglData(10,3); +y.Modify("0.8*sin(pi*(2*x+y/2))+0.2*rnd"); +gr.SetOrigin(0.,0.); +gr.Box(); +gr.Bars(y,"f"); +@end verbatim +@end ifclear + + +@c ------------------------------------------------------------------ +@node Barh sample, Step sample, Bars fall sample, 1D plotting samples @subsection Barh -- пример использования @cindex Barh - @float -@image{png/barh, 7cm} -@caption{Example of Barh. @tdref{barh}} +@image{../png/barh, 7cm} +@c @caption{Example of Barh. @tdref{barh}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData y(10,3); @@ -409,6 +639,7 @@ gr->Box(); gr->Barh(y); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new y 10 3 modify y '0.8*sin(pi*(2*x+y/2))+0.2*rnd' @@ -416,6 +647,7 @@ origin 0 0 box barh y @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT y = mgl_create_data_size(10,3,1); @@ -443,17 +675,16 @@ gr.SetOrigin(0.,0.); gr.Box(); gr.Barh(y); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Step sample, Stem sample, Barh sample, 1D plotting samples @subsection Step -- пример использования @cindex Step - @float -@image{png/step, 7cm} -@caption{Example of Step. @tdref{step}} +@image{../png/step, 7cm} +@c @caption{Example of Step. @tdref{step}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData y(50,3); @@ -464,6 +695,7 @@ gr->Box(); gr->Step(y); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new y 50 3 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)' @@ -472,6 +704,7 @@ modify y 'cos(2*pi*x)' 2 box step y @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT y = mgl_create_data_size(50,3,1); @@ -502,18 +735,17 @@ y.Modify("cos(2*pi*x)",2); gr.Box(); gr.Step(y); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Stem sample, Region sample, Step sample, 1D plotting samples @subsection Stem -- пример использования @cindex Stem - @float -@image{png/stem, 7cm} -@caption{Example of Stem. @tdref{stem}} +@image{../png/stem, 7cm} +@c @caption{Example of Stem. @tdref{stem}} @end float - -@strong{C++ code} +@ifclear UDAV +@strong{C++ код} @verbatim mglData y(50,3); y.Modify("0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0); @@ -523,7 +755,8 @@ gr->Org=mglPoint(0,0); gr->Box(); gr->Stem(y,"o"); @end verbatim -@strong{MGL code} +@strong{MGL скрипт} +@end ifclear @verbatim new y 50 3 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)' @@ -533,7 +766,8 @@ origin 0 0 box stem y 'o' @end verbatim -@strong{Pure C code} +@ifclear UDAV +@strong{C-ый код} @verbatim HMDT y = mgl_create_data_size(50,3,1); mgl_data_modify(y,"0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0); @@ -544,7 +778,7 @@ mgl_box(gr,1); mgl_stem(gr,y,"o"); mgl_delete_data(y); @end verbatim -@strong{Fortran code} +@strong{Fortran} @verbatim integer y, mgl_create_data_size y = mgl_create_data_size(50,3,1) @@ -566,17 +800,16 @@ gr.SetOrigin(0.,0.); gr.Box(); gr.Stem(y,"o"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ -@node Region sample, Error sample, Stem sample, 1D plotting samples +@node Region sample, Region gradient sample, Stem sample, 1D plotting samples @subsection Region -- пример использования @cindex Region - @float -@image{png/region, 7cm} -@caption{Example of Region. @tdref{region}} +@image{../png/region, 7cm} +@c @caption{Example of Region. @tdref{region}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData y1(50), y2(50); @@ -588,6 +821,7 @@ gr->Plot(y1,"k2"); gr->Plot(y2,"k2"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new y1 50 new y2 50 @@ -598,6 +832,7 @@ region y1 y2 'r' plot y1 'k2' plot y2 'k2' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT y1 = mgl_create_data_size(50,1,1); @@ -635,17 +870,86 @@ gr.Region(y1,y2,"r"); gr.Plot(y1,"k2"); gr.Plot(y2,"k2"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ -@node Error sample, BoxPlot sample, Region sample, 1D plotting samples +@node Region gradient sample, Error sample, Region sample, 1D plotting samples +@subsection Region с градиентной заливкой -- пример использования +@cindex Region +@float +@image{../png/region_2, 7cm} +@c @caption{Example of Region. @tdref{region}} +@end float +@ifclear UDAV +@strong{C++ код} +@verbatim +mglData y1(50), y2(50); +y1.Modify("0.3*sin(2*pi*x)"); +y2.Modify("0.5+0.3*cos(2*pi*x)"); +gr->Box(); +gr->Region(y1,y2,"yr"); +gr->Plot(y1,"k2"); +gr->Plot(y2,"k2"); +@end verbatim +@strong{MGL скрипт} +@end ifclear +@verbatim +new y1 50 +new y2 50 +modify y1 '0.3*sin(2*pi*x)' +modify y2 '0.5+0.3*cos(2*pi*x)' +box +region y1 y2 'yr' +plot y1 'k2' +plot y2 'k2' +@end verbatim +@ifclear UDAV +@strong{C-ый код} +@verbatim +HMDT y1 = mgl_create_data_size(50,1,1); +HMDT y2 = mgl_create_data_size(50,1,1); +mgl_data_modify(y1,"0.3*sin(2*pi*x)",0); +mgl_data_modify(y2,"0.5+0.3*cos(2*pi*x)",0); +mgl_box(gr,1); +mgl_region(gr,y1,y2,"yr",1); +mgl_plot(gr,y1,"k2"); +mgl_plot(gr,y2,"k2"); +mgl_delete_data(y1); +mgl_delete_data(y2); +@end verbatim +@strong{Fortran} +@verbatim +integer y1, y2, mgl_create_data_size +y1 = mgl_create_data_size(50,1,1); +y2 = mgl_create_data_size(50,1,1); +call mgl_data_modify(y1,'0.3*sin(2*pi*x)',0); +call mgl_data_modify(y2,'0.5+0.3*cos(2*pi*x)',0); +call mgl_box(gr,1); +call mgl_region(gr,y1,y2,'yr',1); +call mgl_plot(gr,y1,'k2'); +call mgl_plot(gr,y2,'k2'); +call mgl_delete_data(y1); +call mgl_delete_data(y2); +@end verbatim +@strong{Python} +@verbatim +y1, y2, x = mglData(50), mglData(50), mglData(50); +y1.Modify("0.3*sin(2*pi*x)"); +y2.Modify("0.5+0.3*cos(2*pi*x)"); +gr.Box(); +gr.Region(y1,y2,"yr"); +gr.Plot(y1,"k2"); +gr.Plot(y2,"k2"); +@end verbatim +@end ifclear +@c ------------------------------------------------------------------ +@node Error sample, BoxPlot sample, Region gradient sample, 1D plotting samples @subsection Error -- пример использования @cindex Error - @float -@image{png/error, 7cm} -@caption{Example of Error. @tdref{error}} +@image{../png/error, 7cm} +@c @caption{Example of Error. @tdref{error}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData y(50,1), x0(10), y0(10), ex(10), ey(10); @@ -658,6 +962,7 @@ gr->Plot(y); gr->Error(x0,y0,ex,ey,"ko"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new y 50 new x0 10 @@ -673,6 +978,7 @@ box plot y error x0 y0 ex ey 'ko' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT y = mgl_create_data_size(50,1,1); @@ -684,7 +990,6 @@ mgl_data_modify(y,"0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0); mgl_data_modify(x0,"2*x-1 + 0.1*rnd-0.05",0); mgl_data_modify(y0,"0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x) + 0.2*rnd-0.1",0); mgl_data_modify(ey,"0.2",0); mgl_data_modify(ex,"0.1",0); - mgl_box(gr,1); mgl_plot(gr,y,NULL); mgl_error_exy(gr,x0,y0,ex,ey,"ko"); @@ -706,7 +1011,6 @@ call mgl_data_modify(y0,'0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + & 0.2*sin(pi*x) + 0.2*rnd-0.1',0); call mgl_data_modify(ey,'0.2',0) call mgl_data_modify(ex,'0.1',0); - call mgl_box(gr,1) call mgl_plot(gr,y,'') call mgl_error_exy(gr,x0,y0,ex,ey,'ko') @@ -726,17 +1030,16 @@ ey.Modify("0.2"); ex.Modify("0.1"); gr.Box(); gr.Plot(y); gr.Error(x0,y0,ex,ey,"ko"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node BoxPlot sample, Mark sample, Error sample, 1D plotting samples @subsection BoxPlot -- пример использования @cindex BoxPlot - @float -@image{png/boxplot, 7cm} -@caption{Example of BoxPlot. @tdref{boxplot}} +@image{../png/boxplot, 7cm} +@c @caption{Example of BoxPlot. @tdref{boxplot}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(10,7); @@ -746,6 +1049,7 @@ gr->BoxPlot(a); gr->Plot(a," ko"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 10 7 modify a '(2*rnd-1)^3/2' @@ -753,11 +1057,11 @@ box boxplot a plot a ' ko' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(10,7,1); mgl_data_modify(a,"(2*rnd-1)^3/2",0); - mgl_box(gr,1); mgl_plot(gr,a," ko"); mgl_boxplot(gr,a,NULL); @@ -768,7 +1072,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size y = mgl_create_data_size(10,7,1) call mgl_data_modify(a,'(2*rnd-1)^3/2',0); - call mgl_box(gr,1) call mgl_plot(gr,a,' ko') call mgl_boxplot(gr,a,'') @@ -782,17 +1085,16 @@ gr.Box(); gr.Plot(a," ko"); gr.BoxPlot(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Mark sample, TextMark sample, BoxPlot sample, 1D plotting samples @subsection Mark -- пример использования @cindex Mark - @float -@image{png/mark, 7cm} -@caption{Example of Mark. @tdref{mark}} +@image{../png/mark, 7cm} +@c @caption{Example of Mark. @tdref{mark}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData y(50,3), y1(50); @@ -804,6 +1106,7 @@ gr->Box(); gr->Mark(y,y1,"bs"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new y 50 3 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)' @@ -814,6 +1117,7 @@ modify y1 '0.5+0.3*cos(2*pi*x)' box mark y y1 'bs' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT y = mgl_create_data_size(50,3,1); @@ -850,17 +1154,16 @@ y1.Modify("0.5+0.3*cos(2*pi*x)"); gr.Box(); gr.Mark(y,y1,"bs"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node TextMark sample, Tube sample, Mark sample, 1D plotting samples @subsection TextMark -- пример использования @cindex TextMark - @float -@image{png/textmark, 7cm} -@caption{Example of TextMark. @tdref{textmark}} +@image{../png/textmark, 7cm} +@c @caption{Example of TextMark. @tdref{textmark}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData y(50,3), y1(50); @@ -872,6 +1175,7 @@ gr->Box(); gr->TextMark(y,y1,"\\gamma"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new y 50 3 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)' @@ -882,6 +1186,7 @@ modify y1 '0.5+0.3*cos(2*pi*x)' box textmark y y1 '\gamma' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT y, y1; @@ -919,48 +1224,46 @@ y1.Modify("0.5+0.3*cos(2*pi*x)"); gr.Box(); gr.TextMark(y,y1,"\\gamma"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Tube sample, Text sample, TextMark sample, 1D plotting samples @subsection Tube -- пример использования @cindex Tube - @float -@image{png/tube, 7cm} -@caption{Example of Tube. @tdref{tube}} +@image{../png/tube, 7cm} +@c @caption{Example of Tube. @tdref{tube}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData y(50,3); y.Modify("0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0); y.Modify("sin(2*pi*x)",1); y.Modify("cos(2*pi*x)",2); - gr->Rotate(40,60); gr->Light(true); gr->Box(); gr->Tube(y,0.05); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new y 50 3 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)' modify y 'sin(2*pi*x)' 1 modify y 'cos(2*pi*x)' 2 - rotate 40 60 light on box tube y 0.05 @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT y = mgl_create_data_size(50,3,1); mgl_data_modify(y,"0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)",0); mgl_data_modify(y,"sin(2*pi*x)",1); mgl_data_modify(y,"cos(2*pi*x)",2); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -974,7 +1277,6 @@ y = mgl_create_data_size(50,3,1) call mgl_data_modify(y,'0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)',0) call mgl_data_modify(y,'sin(2*pi*x)',1) call mgl_data_modify(y,'cos(2*pi*x)',2) - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -989,17 +1291,16 @@ y.Modify("sin(2*pi*x)",1); y.Modify("cos(2*pi*x)",2); gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Tube(y,0.05); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Text sample, Torus sample, Tube sample, 1D plotting samples @subsection Text -- пример использования @cindex Text - @float -@image{png/text, 7cm} -@caption{Example of Text. @tdref{text}} +@image{../png/text, 7cm} +@c @caption{Example of Text. @tdref{text}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData y(50,3); @@ -1012,6 +1313,7 @@ gr->Text(y,"This is very long string drawn along a curve",":k"); gr->Text(y,"Another string drawn above a curve","T:r"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new y 50 3 modify y '0.7*sin(2*pi*x) + 0.5*cos(3*pi*x) + 0.2*sin(pi*x)' @@ -1022,6 +1324,7 @@ plot y(:,0) text y 'This is very long string drawn along a curve' ':k' text y 'Another string drawn above a curve' 'T:r' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT y = mgl_create_data_size(50,1,1); @@ -1053,47 +1356,45 @@ gr.Plot(y.SubData(-1,0)); gr.Text(y,"This is very long string drawn along a curve",":k"); gr.Text(y,"Another string drawn above a curve","T:r"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Torus sample, Chart sample, Text sample, 1D plotting samples @subsection Torus -- пример использования @cindex Torus - @float -@image{png/torus, 7cm} -@caption{Example of Torus. @tdref{torus}} +@image{../png/torus, 7cm} +@c @caption{Example of Torus. @tdref{torus}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData y1(50), y2(50); y1.Modify("0.5+0.3*cos(2*pi*x)"); y2.Modify("0.3*sin(2*pi*x)"); - gr->Rotate(40,60); gr->Light(true); gr->Box(); gr->Torus(y1,y2,"pz"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new y1 50 new y2 50 modify y1 '0.5+0.3*cos(2*pi*x)' modify y2 '0.3*sin(2*pi*x)' - rotate 40 60 light on box torus y1 y2 'pz' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT y1 = mgl_create_data_size(50,1,1); HMDT y2 = mgl_create_data_size(50,1,1); mgl_data_modify(y1,"0.5+0.3*cos(2*pi*x)",0); mgl_data_modify(y2,"0.3*sin(2*pi*x)",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -1108,7 +1409,6 @@ y1 = mgl_create_data_size(50,1,1); y2 = mgl_create_data_size(50,1,1); call mgl_data_modify(y1,"0.5+0.3*cos(2*pi*x)",0); call mgl_data_modify(y2,"0.3*sin(2*pi*x)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -1125,42 +1425,40 @@ gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Torus(y1,y2,"pz"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Chart sample, Pie chart sample, Torus sample, 1D plotting samples @subsection Chart -- пример использования @cindex Chart - @float -@image{png/chart, 7cm} -@caption{Example of Chart. @tdref{chart}} +@image{../png/chart, 7cm} +@c @caption{Example of Chart. @tdref{chart}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData ch(7,2); ch.Modify("rnd+0.1"); - gr->Rotate(40,60); gr->Light(true); gr->Box(); gr->Chart(ch,"#"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new ch 7 2 modify ch 'rnd+0.1' - rotate 40 60 light on box chart ch @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT ch = mgl_create_data_size(7,2,1); mgl_data_modify(ch,"rnd+0.1",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -1172,7 +1470,6 @@ mgl_delete_data(ch); integer ch, mgl_create_data_size ch = mgl_create_data_size(7,2,1) call mgl_data_modify(ch,'rnd+0.1',0) - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -1186,23 +1483,21 @@ gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Chart(ch,"#"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ -@node Pie chart sample,, Chart sample, 1D plotting samples +@node Pie chart sample, Ring chart sample, Chart sample, 1D plotting samples @subsection Pie chart -- пример использования @cindex Chart @cindex Axis - @float -@image{png/pie_chart, 7cm} -@caption{Example of Chart in cylindrical coordinates. @tdref{pie_chart}} +@image{../png/pie_chart, 7cm} +@c @caption{Example of Chart in cylindrical coordinates. @tdref{pie_chart}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData ch(7,2); ch.Modify("rnd+0.1"); - gr->Rotate(40,60); gr->Light(true); gr->SetFunc("(y+1)/2*cos(pi*x)","(y+1)/2*sin(pi*x)"); @@ -1210,21 +1505,21 @@ gr->Box(); gr->Chart(ch,"bgr cmy#"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new ch 7 2 modify ch 'rnd+0.1' - rotate 40 60 light on axis '(y+1)/2*cos(pi*x)' '(y+1)/2*sin(pi*x)' '' box chart ch 'bgr cmy#' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT ch = mgl_create_data_size(7,2,1); mgl_data_modify(ch,"rnd+0.1",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_func(gr,"(y+1)/2*cos(pi*x)","(y+1)/2*sin(pi*x)",0); @@ -1237,10 +1532,73 @@ mgl_delete_data(ch); integer ch, mgl_create_data_size ch = mgl_create_data_size(7,2,1) call mgl_data_modify(ch,'rnd+0.1',0) - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) -call mgl_set_func(gr,'(y+1)/2*cos(pi*x)','(y+1)/2*sin(pi*x)',''); +call mgl_set_func(gr,'(y+1)/2*cos(pi*x)','(y+1)/2*sin(pi*x)',''); +call mgl_box(gr,1) +call mgl_chart(gr,ch,'bgr cmy#') +call mgl_delete_data(ch) +@end verbatim +@strong{Python} +@verbatim +ch = mglData(7,2); ch.Modify("rnd+0.1"); +gr.Rotate(40,60); gr.Light(True); +gr.SetFunc("(y+1)/2*cos(pi*x)","(y+1)/2*sin(pi*x)"); +gr.Box(); +gr.Chart(ch,"bgr cmy#"); +@end verbatim +@end ifclear +@c ------------------------------------------------------------------ +@node Ring chart sample, , Pie chart sample, 1D plotting samples +@subsection Ring chart -- пример использования +@cindex Chart +@cindex Axis +@float +@image{../png/ring_chart, 7cm} +@c @caption{Example of Chart in cylindrical coordinates. @tdref{pie_chart}} +@end float +@ifclear UDAV +@strong{C++ код} +@verbatim +mglData ch(7,2); +ch.Modify("rnd+0.1"); +gr->Rotate(40,60); +gr->Light(true); +gr->SetFunc("(y+2)/3*cos(pi*x)","(y+2)/3*sin(pi*x)"); +gr->Box(); +gr->Chart(ch,"bgr cmy#"); +@end verbatim +@strong{MGL скрипт} +@end ifclear +@verbatim +new ch 7 2 +modify ch 'rnd+0.1' +rotate 40 60 +light on +axis '(y+2)/3*cos(pi*x)' '(y+2)/3*sin(pi*x)' '' +box +chart ch 'bgr cmy#' +@end verbatim +@ifclear UDAV +@strong{C-ый код} +@verbatim +HMDT ch = mgl_create_data_size(7,2,1); +mgl_data_modify(ch,"rnd+0.1",0); +mgl_rotate(gr,40.,60.,0.); +mgl_set_light(gr,1); +mgl_set_func(gr,"(y+2)/3*cos(pi*x)","(y+2)/3*sin(pi*x)",0); +mgl_box(gr,1); +mgl_chart(gr,ch,"bgr cmy#"); +mgl_delete_data(ch); +@end verbatim +@strong{Fortran} +@verbatim +integer ch, mgl_create_data_size +ch = mgl_create_data_size(7,2,1) +call mgl_data_modify(ch,'rnd+0.1',0) +call mgl_rotate(gr,40.,60.,0.) +call mgl_set_light(gr,1) +call mgl_set_func(gr,'(y+2)/3*cos(pi*x)','(y+2)/3*sin(pi*x)',''); call mgl_box(gr,1) call mgl_chart(gr,ch,'bgr cmy#') call mgl_delete_data(ch) @@ -1249,15 +1607,14 @@ call mgl_delete_data(ch) @verbatim ch = mglData(7,2); ch.Modify("rnd+0.1"); gr.Rotate(40,60); gr.Light(True); -gr.SetFunc("(y+1)/2*cos(pi*x)","(y+1)/2*sin(pi*x)"); +gr.SetFunc("(y+2)/3*cos(pi*x)","(y+2)/3*sin(pi*x)"); gr.Box(); gr.Chart(ch,"bgr cmy#"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node 2D plotting samples, 3D plotting samples, 1D plotting samples, Samples @section Примеры 2D графиков - @menu * Surf sample:: * Transparent surface sample:: @@ -1273,43 +1630,41 @@ gr.Chart(ch,"bgr cmy#"); * ContF sample:: * ContD sample:: * Axial sample:: +* Grad sample:: @end menu - @c ------------------------------------------------------------------ @node Surf sample, Transparent surface sample,, 2D plotting samples @subsection Surf -- пример использования @cindex Surf - @float -@image{png/surf, 7cm} -@caption{Example of Surf. @tdref{surf}} +@image{../png/surf, 7cm} +@c @caption{Example of Surf. @tdref{surf}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Box(); gr->Surf(a); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on box surf a @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -1321,7 +1676,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -1335,23 +1689,21 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Surf(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Transparent surface sample, Surface in fog sample, Surf sample, 2D plotting samples @subsection Transparent surface -- пример использования @cindex Surf @cindex Alpha - @float -@image{png/surf_alpha, 7cm} -@caption{Example of Surf & Alpha. @tdref{surf_alpha}} +@image{../png/surf_alpha, 7cm} +@c @caption{Example of Surf & Alpha. @tdref{surf_alpha}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Alpha(true); @@ -1359,21 +1711,21 @@ gr->Box(); gr->Surf(a); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on alpha on box surf a @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_alpha(gr,1); @@ -1386,7 +1738,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_alpha(gr,1) @@ -1402,23 +1753,21 @@ gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Alpha(True); gr.Surf(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Surface in fog sample, Sharp colors sample, Transparent surface sample, 2D plotting samples @subsection Surface in fog -- пример использования @cindex Surf @cindex Fog - @float -@image{png/surf_fog, 7cm} -@caption{Example of Surf & Fog. @tdref{surf_fog}} +@image{../png/surf_fog, 7cm} +@c @caption{Example of Surf & Fog. @tdref{surf_fog}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Fog(1); @@ -1426,21 +1775,21 @@ gr->Box(); gr->Surf(a); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on fog 1 box surf a @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_fog(gr,1.,0.25); @@ -1453,7 +1802,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_fog(gr,1.,0.25) @@ -1469,42 +1817,40 @@ gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Fog(1); gr.Surf(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Sharp colors sample, Mesh sample, Surface in fog sample, 2D plotting samples @subsection Sharp colors -- пример использования @cindex Surf - @float -@image{png/surf_sl, 7cm} -@caption{Example of sharp color scheme. @tdref{surf_sl}} +@image{../png/surf_sl, 7cm} +@c @caption{Example of sharp color scheme. @tdref{surf_sl}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Box(); gr->Surf(a,"BbcyrR|"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on box surf a 'BbcyrR|' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -1516,7 +1862,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -1530,40 +1875,38 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Surf(a,"BbcyrR|"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Mesh sample, Fall sample, Sharp colors sample, 2D plotting samples @subsection Mesh -- пример использования @cindex Mesh - @float -@image{png/mesh, 7cm} -@caption{Example of Mesh. @tdref{mesh}} +@image{../png/mesh, 7cm} +@c @caption{Example of Mesh. @tdref{mesh}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Box(); gr->Mesh(a); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 box mesh a @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_box(gr,1); mgl_mesh(gr,a,0); @@ -1574,7 +1917,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_box(gr,1) call mgl_mesh(gr,a,'') @@ -1587,40 +1929,38 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Mesh(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Fall sample, Belt sample, Mesh sample, 2D plotting samples @subsection Fall -- пример использования @cindex Fall - @float -@image{png/fall, 7cm} -@caption{Example of Fall. @tdref{fall}} +@image{../png/fall, 7cm} +@c @caption{Example of Fall. @tdref{fall}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Box(); gr->Fall(a); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 box fall a @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_box(gr,1); mgl_fall(gr,a,0); @@ -1631,7 +1971,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_box(gr,1) call mgl_fall(gr,a,'') @@ -1644,42 +1983,40 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Fall(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Belt sample, Tile sample, Fall sample, 2D plotting samples @subsection Belt -- пример использования @cindex Belt - @float -@image{png/belt, 7cm} -@caption{Example of Belt. @tdref{belt}} +@image{../png/belt, 7cm} +@c @caption{Example of Belt. @tdref{belt}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Box(); gr->Belt(a); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on box belt a @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -1691,7 +2028,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -1705,42 +2041,40 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Belt(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Tile sample, Boxs sample, Belt sample, 2D plotting samples @subsection Tile -- пример использования @cindex Tile - @float -@image{png/tile, 7cm} -@caption{Example of Tile. @tdref{tile}} +@image{../png/tile, 7cm} +@c @caption{Example of Tile. @tdref{tile}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Box(); gr->Tile(a); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on box tile a @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -1752,7 +2086,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -1766,17 +2099,16 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Tile(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Boxs sample, Dens sample, Tile sample, 2D plotting samples @subsection Boxs -- пример использования @cindex Boxs - @float -@image{png/boxs, 7cm} -@caption{Example of Boxs. @tdref{boxs}} +@image{../png/boxs, 7cm} +@c @caption{Example of Boxs. @tdref{boxs}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(50,40); @@ -1787,6 +2119,7 @@ gr->Box(); gr->Boxs(a); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' @@ -1796,11 +2129,11 @@ origin 0 0 0 box boxs a @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_origin(gr,0.,0.,0.); @@ -1813,7 +2146,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_origin(gr,0.,0.,0.); @@ -1829,18 +2161,17 @@ gr.Rotate(40,60); gr.Light(True); gr.SetOrigin(0.,0.,0.); gr.Box(); gr.Boxs(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Dens sample, Cont sample, Boxs sample, 2D plotting samples @subsection Dens -- пример использования @cindex Dens @cindex Colorbar - @float -@image{png/dens, 7cm} -@caption{Example of Dens & Colorbar. @tdref{dens}} +@image{../png/dens, 7cm} +@c @caption{Example of Dens & Colorbar. @tdref{dens}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(50,40); @@ -1850,6 +2181,7 @@ gr->Dens(a); gr->Colorbar(); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' @@ -1857,6 +2189,7 @@ box dens a colorbar @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(50,40,1); @@ -1884,17 +2217,16 @@ gr.Box(); gr.Dens(a); gr.Colorbar(); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Cont sample, ContF sample, Dens sample, 2D plotting samples @subsection Cont -- пример использования @cindex Cont - @float -@image{png/cont, 7cm} -@caption{Example of Cont. @tdref{cont}} +@image{../png/cont, 7cm} +@c @caption{Example of Cont. @tdref{cont}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(50,40); @@ -1904,6 +2236,7 @@ gr->Box(); gr->Cont(a); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' @@ -1911,11 +2244,11 @@ rotate 40 60 box cont a @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_box(gr,1); mgl_cont(gr,a,0,7,NAN); @@ -1929,7 +2262,6 @@ real zero, nan zero = 0; nan = zero/zero a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_box(gr,1) call mgl_cont(gr,a,'',7,nan) @@ -1943,41 +2275,39 @@ gr.Rotate(40,60); gr.Box(); gr.Cont(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node ContF sample, ContD sample, Cont sample, 2D plotting samples @subsection ContF -- пример использования @cindex ContF - @float -@image{png/contf, 7cm} -@caption{Example of ContF. @tdref{contf}} +@image{../png/contf, 7cm} +@c @caption{Example of ContF. @tdref{contf}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Box(); gr->ContF(a); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on box contf a @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -1992,7 +2322,6 @@ real zero, nan zero = 0; nan = zero/zero a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -2007,17 +2336,16 @@ gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.ContF(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node ContD sample, Axial sample, ContF sample, 2D plotting samples @subsection ContD -- пример использования @cindex ContD - @float -@image{png/contd, 7cm} -@caption{Example of ContD. @tdref{contd}} +@image{../png/contd, 7cm} +@c @caption{Example of ContD. @tdref{contd}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(50,40), v(9); @@ -2028,6 +2356,7 @@ gr->ContD(v,a); gr->Colorbar(v); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' @@ -2036,6 +2365,7 @@ box contd v a colorbar v @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(50,40,1); @@ -2070,22 +2400,20 @@ gr.Box(); gr.ContD(v,a); gr.Colorbar(v); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ -@node Axial sample,, ContD sample, 2D plotting samples +@node Axial sample, Grad sample, ContD sample, 2D plotting samples @subsection Axial -- пример использования @cindex Axial - @float -@image{png/axial, 7cm} -@caption{Example of Axial. @tdref{axial}} +@image{../png/axial, 7cm} +@c @caption{Example of Axial. @tdref{axial}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Alpha(true); @@ -2093,21 +2421,21 @@ gr->Box(); gr->Axial(a); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on alpha on box axial a @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_alpha(gr,1); @@ -2120,7 +2448,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_alpha(gr,1) @@ -2136,11 +2463,64 @@ gr.Rotate(40,60); gr.Light(True); gr.Alpha(True); gr.Box(); gr.Axial(a); @end verbatim - +@end ifclear +@c ------------------------------------------------------------------ +@node Grad sample, , Axial sample, 2D plotting samples +@subsection Grad -- пример использования +@cindex Grad +@float +@image{../png/grad, 7cm} +@c @caption{Example of Grad. @tdref{grad}} +@end float +@ifclear UDAV +@strong{C++ код} +@verbatim +mglData a(50,40); +a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); +gr->Box(); gr->Alpha(true); gr->Dens(a); +gr->Grad(a); +@end verbatim +@strong{MGL скрипт} +@end ifclear +@verbatim +new a 50 40 +modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' +box:alpha on:dens a +grad a +@end verbatim +@ifclear UDAV +@strong{C-ый код} +@verbatim +HMDT a = mgl_create_data_size(50,40,1); +mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); +mgl_box(gr,1); +mgl_set_alpha(gr,1); +mgl_dens(gr,a,0,0); +mgl_grad(gr,a,0,0); +mgl_delete_data(a); +@end verbatim +@strong{Fortran} +@verbatim +integer a, mgl_create_data_size +a = mgl_create_data_size(50,40,1); +call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); +call mgl_box(gr,1) +call mgl_set_alpha(gr,1) +call mgl_dens(gr,a,'',0) +call mgl_grad(gr,a,'',0) +call mgl_delete_data(a) +@end verbatim +@strong{Python} +@verbatim +a = mglData(50,40); +a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))"); +gr.Box(); gr.Alpha(1); gr.Dens(a); +gr.Colorbar(); +@end verbatim +@end ifclear @c ------------------------------------------------------------------ @node 3D plotting samples, Dual plotting samples, 2D plotting samples, Samples @section Примеры 3D графиков - @menu * Surf3 sample:: * Cloud sample:: @@ -2151,25 +2531,22 @@ gr.Axial(a); * Cont projection sample:: * Dens projection sample:: * CutMinMax sample:: -* ``Isocaps'' sample:: +* Isocaps sample:: * CutOff sample:: @end menu - @c ------------------------------------------------------------------ @node Surf3 sample, Cloud sample,, 3D plotting samples @subsection Surf3 -- пример использования @cindex Surf3 - @float -@image{png/surf3, 7cm} -@caption{Example of Surf3. @tdref{surf3}} +@image{../png/surf3, 7cm} +@c @caption{Example of Surf3. @tdref{surf3}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Light(true); gr->Alpha(true); @@ -2177,21 +2554,21 @@ gr->Box(); gr->Surf3(a); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' - rotate 40 60 light on alpha on box surf3 a @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_alpha(gr,1); @@ -2204,7 +2581,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_alpha(gr,1) @@ -2220,42 +2596,40 @@ gr.Rotate(40,60); gr.Light(True); gr.Alpha(True); gr.Box(); gr.Surf3(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Cloud sample, CloudP sample, Surf3 sample, 3D plotting samples @subsection Cloud -- пример использования @cindex Cloud - @float -@image{png/cloud, 7cm} -@caption{Example of Cloud. @tdref{cloud}} +@image{../png/cloud, 7cm} +@c @caption{Example of Cloud. @tdref{cloud}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Alpha(true); gr->Box(); gr->Cloud(a,"wyrRk"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' - rotate 40 60 alpha on box cloud a 'wyrRk' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_alpha(gr,1); mgl_box(gr,1); @@ -2267,7 +2641,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_alpha(gr,1) call mgl_box(gr,1) @@ -2282,36 +2655,33 @@ gr.Rotate(40,60); gr.Alpha(True); gr.Box(); gr.Cloud(a,"wyrRk"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node CloudP sample, Dens3 sample, Cloud sample, 3D plotting samples @subsection CloudP -- пример использования @cindex CloudP - @float -@image{png/cloudp, 7cm} -@caption{Example of CloudP. @tdref{cloudp}} +@image{../png/cloudp, 7cm} +@c @caption{Example of CloudP. @tdref{cloudp}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Alpha(true); gr->Box(); gr->CloudP(a,"wyrRk"); @end verbatim @strong{MGL скрипт} - +@end ifclear Not available. - +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_alpha(gr,1); mgl_box(gr,1); @@ -2323,7 +2693,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_alpha(gr,1) call mgl_box(gr,1) @@ -2331,36 +2700,32 @@ call mgl_cloudp(gr,a,'wyrRk',1.) call mgl_delete_data(a) @end verbatim @strong{Python} - Not available. - - +@end ifclear @c ------------------------------------------------------------------ @node Dens3 sample, Cont3 sample, CloudP sample, 3D plotting samples @subsection Dens3 -- пример использования @cindex Dens3 @cindex Axis - @float -@image{png/densa, 7cm} -@caption{Example of Dens3. @tdref{densa}} +@image{../png/densa, 7cm} +@c @caption{Example of Dens3. @tdref{densa}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Alpha(true); gr->Org = mglPoint(0,0,0); gr->Box(); gr->DensA(a); gr->Axis(); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' - rotate 40 60 alpha on origin 0 0 0 @@ -2368,11 +2733,11 @@ box densa a axis @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_alpha(gr,1); mgl_set_origin(gr,0.,0.,0.); @@ -2386,7 +2751,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_alpha(gr,1) call mgl_set_origin(gr,0.,0.,0.); @@ -2404,40 +2768,38 @@ gr.SetOrigin(0,0,0); gr.Box(); gr.Axis(); gr.DensA(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Cont3 sample, ContF3 sample, Dens3 sample, 3D plotting samples @subsection Cont3 -- пример использования @cindex Cont3 - @float -@image{png/conta, 7cm} -@caption{Example of Cont3. @tdref{conta}} +@image{../png/conta, 7cm} +@c @caption{Example of Cont3. @tdref{conta}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Box(); gr->ContA(a); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' - rotate 40 60 box conta a @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_box(gr,1); mgl_cont_all(gr,a,0,7); @@ -2448,7 +2810,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_box(gr,1) call mgl_cont_all(gr,a,'',7) @@ -2462,41 +2823,39 @@ gr.Rotate(40,60); gr.Box(); gr.ContA(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node ContF3 sample, Cont projection sample, Cont3 sample, 3D plotting samples @subsection ContF3 -- пример использования @cindex ContF3 - @float -@image{png/contfa, 7cm} -@caption{Example of ContF3. @tdref{contfa}} +@image{../png/contfa, 7cm} +@c @caption{Example of ContF3. @tdref{contfa}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Light(true); gr->Box(); gr->ContFA(a); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' - rotate 40 60 light on box contfa a @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -2508,7 +2867,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -2523,24 +2881,22 @@ gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.ContFA(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Cont projection sample, Dens projection sample, ContF3 sample, 3D plotting samples @subsection Cont projection -- пример использования @cindex ContX @cindex ContY @cindex ContZ - @float -@image{png/cont_xyz, 7cm} -@caption{Example of projection by Cont[XYZ]. @tdref{cont_xyz}} +@image{../png/cont_xyz, 7cm} +@c @caption{Example of projection by Cont[XYZ]. @tdref{cont_xyz}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Box(); gr->ContX(a.Sum("x"),"",-1); @@ -2548,10 +2904,10 @@ gr->ContY(a.Sum("y"),"",1); gr->ContZ(a.Sum("z"),"",-1); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' - rotate 40 60 box sum s a 'x' @@ -2561,11 +2917,11 @@ conty s '' 1 sum s a 'z' contz s '' -1 @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(60,50,40), s; mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_box(gr,1); s=mgl_data_sum(a,"x"); mgl_cont_x(gr,s,0,-1.,7); mgl_delete_data(s); @@ -2578,7 +2934,6 @@ mgl_delete_data(a); integer a,s, mgl_create_data_size, mgl_data_sum a = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_box(gr,1) s=mgl_data_sum(a,'x') @@ -2601,24 +2956,22 @@ gr.ContX(a.Sum("x"),"",-1); gr.ContY(a.Sum("y"),"",1); gr.ContZ(a.Sum("z"),"",-1); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Dens projection sample, CutMinMax sample, Cont projection sample, 3D plotting samples @subsection Dens projection -- пример использования @cindex DensX @cindex DensY @cindex DensZ - @float -@image{png/dens_xyz, 7cm} -@caption{Example of projection by Dens[XYZ]. @tdref{dens_xyz}} +@image{../png/dens_xyz, 7cm} +@c @caption{Example of projection by Dens[XYZ]. @tdref{dens_xyz}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Box(); gr->DensX(a.Sum("x"),"",-1); @@ -2626,10 +2979,10 @@ gr->DensY(a.Sum("y"),"",1); gr->DensZ(a.Sum("z"),"",-1); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' - rotate 40 60 box sum s a 'x' @@ -2639,11 +2992,11 @@ densy s '' 1 sum s a 'z' densz s '' -1 @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a, s; a = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_box(gr,1); s=mgl_data_sum(a,"x"); mgl_dens_x(gr,s,0,-1.); mgl_delete_data(s); @@ -2656,7 +3009,6 @@ mgl_delete_data(a); integer a,s, mgl_create_data_size, mgl_data_sum a = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_box(gr,1) s=mgl_data_sum(a,'x') @@ -2679,24 +3031,22 @@ gr.DensX(a.Sum("x"),"",-1); gr.DensY(a.Sum("y"),"",1); gr.DensZ(a.Sum("z"),"",-1); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ -@node CutMinMax sample, ``Isocaps'' sample, Dens projection sample, 3D plotting samples +@node CutMinMax sample, Isocaps sample, Dens projection sample, 3D plotting samples @subsection CutMinMax -- пример использования @cindex Surf3 @cindex CutMin @cindex CutMax - @float -@image{png/cutminmax, 7cm} -@caption{Example of Surf3 & CutMin, CutMax. @tdref{cutminmax}} +@image{../png/cutminmax, 7cm} +@c @caption{Example of Surf3 & CutMin, CutMax. @tdref{cutminmax}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Light(true); gr->Alpha(true); @@ -2705,10 +3055,10 @@ gr->Box(); gr->Surf3(a); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' - rotate 40 60 light on alpha on @@ -2716,11 +3066,11 @@ cut 0 -1 -1 1 0 1 box surf3 a @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_alpha(gr,1); @@ -2734,7 +3084,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_alpha(gr,1) @@ -2751,25 +3100,23 @@ gr.Rotate(40,60); gr.Light(True); gr.Alpha(True); gr.SetCutBox(0,-1,-1,1,0,1); gr.Box(); gr.Surf3(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ -@node ``Isocaps'' sample, CutOff sample, CutMinMax sample, 3D plotting samples +@node Isocaps sample, CutOff sample, CutMinMax sample, 3D plotting samples @subsection ``Isocaps'' -- пример использования @cindex Surf3 @cindex ContF3 @cindex CutMin @cindex CutMax - @float -@image{png/cutminmax2, 7cm} -@caption{Example of ``Isocaps''. @tdref{cutminmax2}} +@image{../png/cutminmax2, 7cm} +@c @caption{Example of ``Isocaps''. @tdref{cutminmax2}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(61,51,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Light(true); gr->CutMin = mglPoint(0,-1,-1); gr->CutMax = mglPoint(1,0,1.1); @@ -2779,10 +3126,10 @@ gr->ContF3(a,'x',-1); gr->ContF3(a,'y',-1); gr->ContF3(a,'z', 0); gr->ContF3(a,'z',39); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 61 51 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' - rotate 40 60 light on cut 0 -1 -1 1 0 1.1 @@ -2793,11 +3140,11 @@ contf3 a 'y' -1 contf3 a 'z' 0 contf3 a 'z' 39 @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(61,51,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_cut_box(gr,0.,-1.,-1.,1.,0.,1.1); @@ -2813,7 +3160,6 @@ mgl_delete_data(a); @verbatim a = mgl_create_data_size(61,51,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_cut_box(gr,0.,-1.,-1.,1.,0.,1.1); @@ -2835,23 +3181,21 @@ gr.Surf3(-1,a); gr.ContF3(a,"x",-1); gr.ContF3(a,"y",-1); gr.ContF3(a,"z",0); gr.ContF3(a,"z",39); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ -@node CutOff sample,, ``Isocaps'' sample, 3D plotting samples +@node CutOff sample,, Isocaps sample, 3D plotting samples @subsection CutOff -- пример использования @cindex Surf3 @cindex CutOff - @float -@image{png/surf3_cutoff, 7cm} -@caption{Example of Surf3 & CutOff. @tdref{surf3_cutoff}} +@image{../png/surf3_cutoff, 7cm} +@c @caption{Example of Surf3 & CutOff. @tdref{surf3_cutoff}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Light(true); gr->Alpha(true); @@ -2860,10 +3204,10 @@ gr->Box(); gr->Surf3(a); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' - rotate 40 60 light on alpha on @@ -2871,11 +3215,11 @@ cut '(z>(x+0.5*y-1)^2-1) & (z>(x-0.5*y-1)^2-1)' box surf3 a @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_alpha(gr,1); @@ -2889,7 +3233,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(60,50,40); call mgl_data_modify(a,'-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)',0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_alpha(gr,1) @@ -2907,12 +3250,10 @@ gr.CutOff("(z>(x+0.5*y-1)^2-1) & (z>(x-0.5*y-1)^2-1)"); gr.Box(); gr.Surf3(a); @end verbatim - - +@end ifclear @c ------------------------------------------------------------------ -@node Dual plotting samples, Additional features, 3D plotting samples, Samples +@node Dual plotting samples, Basic features, 3D plotting samples, Samples @section Примеры парных/векторных графиков - @menu * SurfC sample:: * SurfA sample:: @@ -2935,47 +3276,44 @@ gr.Surf3(a); * Crust sample:: * Dots sample:: @end menu - @c ------------------------------------------------------------------ @node SurfC sample, SurfA sample,, Dual plotting samples @subsection SurfC -- пример использования @cindex SurfC - @float -@image{png/surfc, 7cm} -@caption{Example of SurfC. @tdref{surfc}} +@image{../png/surfc, 7cm} +@c @caption{Example of SurfC. @tdref{surfc}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(50,40), b(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Box(); gr->SurfC(a,b); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 50 40 new b 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on box surfc a b @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(50,40,1); HMDT b = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -2989,7 +3327,6 @@ a = mgl_create_data_size(50,40,1); b = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -3006,23 +3343,21 @@ gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.SurfC(a,b); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node SurfA sample, TileS sample, SurfC sample, Dual plotting samples @subsection SurfA -- пример использования @cindex SurfA - @float -@image{png/surfa, 7cm} -@caption{Example of SurfA. @tdref{surfa}} +@image{../png/surfa, 7cm} +@c @caption{Example of SurfA. @tdref{surfa}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(50,40), b(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Alpha(true); @@ -3030,18 +3365,19 @@ gr->Box(); gr->SurfA(a,b); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 50 40 new b 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on alpha on box surfa a b @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a, b; @@ -3049,7 +3385,6 @@ a = mgl_create_data_size(50,40,1); b = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_alpha(gr,1); @@ -3064,7 +3399,6 @@ a = mgl_create_data_size(50,40,1); b = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_alpha(gr,1); @@ -3082,36 +3416,35 @@ gr.Rotate(40,60); gr.Light(True); gr.Alpha(True); gr.Box(); gr.SurfC(a,b); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node TileS sample, Map sample, SurfA sample, Dual plotting samples -@subsection Tiles -- пример использования +@subsection TileS -- пример использования @cindex TileS - @float -@image{png/tiles, 7cm} -@caption{Example of TileS. @tdref{tiles}} +@image{../png/tiles, 7cm} +@c @caption{Example of TileS. @tdref{tiles}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(50,40), b(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Box(); gr->TileS(a,b); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 50 40 new b 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))' - box tile a b @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a, b; @@ -3119,7 +3452,6 @@ a = mgl_create_data_size(50,40,1); b = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_box(gr,1); mgl_tiles(gr,a,b,0); mgl_delete_data(a); mgl_delete_data(b); @@ -3131,7 +3463,6 @@ a = mgl_create_data_size(50,40,1); b = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_box(gr,1) call mgl_tiles(gr,a,b,'') call mgl_delete_data(a) @@ -3145,28 +3476,25 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Box(); gr.TileS(a,b); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Map sample, Traj sample, TileS sample, Dual plotting samples @subsection Map -- пример использования @cindex Map - @float -@image{png/map, 7cm} -@caption{Example of Map. @tdref{map}} +@image{../png/map, 7cm} +@c @caption{Example of Map. @tdref{map}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(50, 40), b(50, 40); gr->Puts(mglPoint(0, 0), "\\to", "", -1.4); gr->Axis(mglPoint(-1,-1,-2),mglPoint(1,1,2)); - gr->SubPlot(2, 1, 0); a.Fill("x", gr->Min, gr->Max); b.Fill("y", gr->Min, gr->Max); gr->Puts(mglPoint(0, 1.1), "\\{x, y\\}", "C", -2); gr->Box(); gr->Map(a, b, "brgk", 0, false); - gr->SubPlot(2, 1, 1); a.Fill("(x^3+y^3)/2", gr->Min, gr->Max); b.Fill("(x-y)/2", gr->Min, gr->Max); @@ -3175,19 +3503,18 @@ gr->Box(); gr->Map(a, b, "brgk", 0, false); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 50 40 new b 50 40 text 0 0 '\to' zrange -2 2 - subplot 2 1 0 text 0 1.1 '\{x, y\}' '' -2 box fill a 'x' fill b 'y' map a b 'brgk' 0 0 - subplot 2 1 1 text 0 1.1 '\{\frac{x^3+y^3}{2}, \frac{x-y}{2}\}' '' -2 box @@ -3195,27 +3522,25 @@ fill a '(x^3+y^3)/2' fill b '(x-y)/2' map a b 'brgk' 0 0 @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(50,40,1); HMDT b = mgl_create_data_size(50,40,1); mgl_puts_ext(gr, 0.,0.,0., "\\to", "", -1.4, 't'); mgl_set_axis_3d(gr,-1.,-1.,-2.,1.,1.,2.); - mgl_subplot(gr, 2, 1, 0); mgl_data_fill_eq(gr, a, "x", 0, 0); mgl_data_fill_eq(gr, b, "y", 0, 0); mgl_puts_ext(gr, 0.,1.1,0., "\\{x, y\\}", "C", -2., 't'); mgl_box(gr,1); mgl_map(gr, a, b, "brgk", 0, 0); - mgl_subplot(gr, 2, 1, 1); mgl_data_fill_eq(gr, a, "(x^3+y^3)/2", 0, 0); mgl_data_fill_eq(gr, b, "(x-y)/2", 0, 0); mgl_puts_ext(gr, 0.,1.1,0., "\\{\\frac{x^3+y^3}{2}, \\frac{x-y}{2}\\}", "C", -2., 't'); mgl_box(gr,1); mgl_map(gr, a, b, "brgk", 0, 0); - mgl_box(gr,1); mgl_map(gr,a,b,0,0,1); mgl_delete_data(a); mgl_delete_data(b); @@ -3227,14 +3552,12 @@ a = mgl_create_data_size(50,40,1); b = mgl_create_data_size(50,40,1); call mgl_puts_ext(gr, 0.,0.,0., '\to', '', -1.4, 't'); call mgl_set_axis_3d(gr,-1.,-1.,-2.,1.,1.,2.); - call mgl_subplot(gr, 2, 1, 0); call mgl_data_fill_eq(gr, a, 'x', 0, 0); call mgl_data_fill_eq(gr, b, 'y', 0, 0); call mgl_puts_ext(gr, 0.,1.1,0., '\{x, y\}', 'C', -2., 't'); call mgl_box(gr,1); call mgl_map(gr, a, b, 'brgk', 0, 0); - call mgl_subplot(gr, 2, 1, 1); call mgl_data_fill_eq(gr, a, '(x^3+y^3)/2', 0, 0); call mgl_data_fill_eq(gr, b, '(x-y)/2', 0, 0); @@ -3251,30 +3574,27 @@ call mgl_delete_data(b) a, b = mglData(50,40), mglData(50,40); gr.Puts(0, 0, 0, "\\to", "", -1.4); gr.SetRanges(-1,1,-1,1,-2,2); - gr.SubPlot(2, 1, 0); gr.Fill(a, "x"); gr.Fill(b, "y"); gr.Puts(0, 1.1, 0, "\\{x, y\\}", "C", -2); gr.Box(); gr.Map(a, b, "brgk", 0, 0); - gr.SubPlot(2, 1, 1); gr.Fill(a, "(x^3+y^3)/2"); gr.Fill(b, "(x-y)/2"); gr.Puts(0, 1.1, 0, "\\{\\frac{x^3+y^3}{2}, \\frac{x-y}{2}\\}", "C", -2); gr.Box(); gr.Map(a, b, "brgk", 0, 0); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Traj sample, Vect sample, Map sample, Dual plotting samples @subsection Traj -- пример использования @cindex Traj - @float -@image{png/traj, 7cm} -@caption{Example of Plot. @tdref{traj}} +@image{../png/traj, 7cm} +@c @caption{Example of Plot. @tdref{traj}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData y(50,3), x(50), y1(50), y2(50); @@ -3284,12 +3604,12 @@ y.Modify("cos(2*pi*x)",2); y1.Modify("0.5+0.3*cos(2*pi*x)"); y2.Modify("0.3*sin(2*pi*x)"); x.Fill(-1,1,'x'); - gr->Box(); gr->Plot(x,y); gr->Traj(x,y,y1,y2); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new y 50 3 new x 50 @@ -3305,6 +3625,7 @@ box plot x y traj x y y1 y2 @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT y = mgl_create_data_size(50,3,1); @@ -3357,28 +3678,26 @@ gr.Box(); gr.Plot(x,y); gr.Traj(x,y,y1,y2); @end verbatim - - +@end ifclear @c ------------------------------------------------------------------ @node Vect sample, VectL sample, Traj sample, Dual plotting samples @subsection Vect -- пример использования @cindex Vect - @float -@image{png/vect, 7cm} -@caption{Example of Vect. @tdref{vect}} +@image{../png/vect, 7cm} +@c @caption{Example of Vect. @tdref{vect}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(20,30), b(20,30); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Box(); gr->Vect(a,b); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 20 30 new b 20 30 @@ -3387,13 +3706,13 @@ modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))' box vect a b @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(20,30,1); HMDT b = mgl_create_data_size(20,30,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_box(gr,1); mgl_vect_2d(gr,a,b,0,0.); mgl_delete_data(a); mgl_delete_data(b); @@ -3405,7 +3724,6 @@ a = mgl_create_data_size(20,30,1); b = mgl_create_data_size(20,30,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_box(gr,1) call mgl_vect_2d(gr,a,b,'',0.) call mgl_delete_data(a) @@ -3419,27 +3737,26 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Box(); gr.Vect(a,b); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node VectL sample, VectC sample, Vect sample, Dual plotting samples @subsection VectL -- пример использования @cindex VectL - @float -@image{png/vectl, 7cm} -@caption{Example of VectL. @tdref{vectl}} +@image{../png/vectl, 7cm} +@c @caption{Example of VectL. @tdref{vectl}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(20,30), b(20,30); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Box(); gr->VectL(a,b); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 20 30 new b 20 30 @@ -3448,6 +3765,7 @@ modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))' box vectl a b @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a, b; @@ -3455,7 +3773,6 @@ a = mgl_create_data_size(20,30,1); b = mgl_create_data_size(20,30,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_box(gr,1); mgl_vectl_2d(gr,a,b,0,0.); mgl_delete_data(a); mgl_delete_data(b); @@ -3467,7 +3784,6 @@ a = mgl_create_data_size(20,30,1); b = mgl_create_data_size(20,30,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_box(gr,1) call mgl_vectl_2d(gr,a,b,'',0.) call mgl_delete_data(a) @@ -3481,28 +3797,26 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Box(); gr.VectL(a,b); @end verbatim - - +@end ifclear @c ------------------------------------------------------------------ @node VectC sample, Flow sample, VectL sample, Dual plotting samples @subsection VectC -- пример использования @cindex VectC - @float -@image{png/vectc, 7cm} -@caption{Example of VectC. @tdref{vectc}} +@image{../png/vectc, 7cm} +@c @caption{Example of VectC. @tdref{vectc}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(20,30), b(20,30); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Box(); gr->VectC(a,b); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 20 30 new b 20 30 @@ -3511,6 +3825,7 @@ modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))' box vectc a b @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a, b; @@ -3518,7 +3833,6 @@ a = mgl_create_data_size(20,30,1); b = mgl_create_data_size(20,30,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_box(gr,1); mgl_vectc_2d(gr,a,b,0,0.); mgl_delete_data(a); mgl_delete_data(b); @@ -3530,7 +3844,6 @@ a = mgl_create_data_size(20,30,1); b = mgl_create_data_size(20,30,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_box(gr,1) call mgl_vectc_2d(gr,a,b,'',0.) call mgl_delete_data(a) @@ -3544,28 +3857,26 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Box(); gr.VectC(a,b); @end verbatim - - +@end ifclear @c ------------------------------------------------------------------ @node Flow sample, Pipe sample, VectC sample, Dual plotting samples @subsection Flow -- пример использования @cindex Flow - @float -@image{png/flow, 7cm} -@caption{Example of Flow. @tdref{flow}} +@image{../png/flow, 7cm} +@c @caption{Example of Flow. @tdref{flow}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(20,30), b(20,30); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Box(); gr->Flow(a,b); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 20 30 new b 20 30 @@ -3574,13 +3885,13 @@ modify b '0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))' box flow a b @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(20,30,1); HMDT b = mgl_create_data_size(20,30,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_box(gr,1); mgl_flow_2d(gr,a,b,0,5,1,0.); mgl_delete_data(a); mgl_delete_data(b); @@ -3592,7 +3903,6 @@ a = mgl_create_data_size(20,30,1); b = mgl_create_data_size(20,30,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_box(gr,1) call mgl_flow_2d(gr,a,b,'',5,1,0.) call mgl_delete_data(a) @@ -3606,17 +3916,16 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Box(); gr.Flow(a,b); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Pipe sample, Dew sample, Flow sample, Dual plotting samples @subsection Pipe -- пример использования @cindex Pipe - @float -@image{png/pipe, 7cm} -@caption{Example of Pipe. @tdref{pipe}} +@image{../png/pipe, 7cm} +@c @caption{Example of Pipe. @tdref{pipe}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(20,30), b(20,30); @@ -3627,6 +3936,7 @@ gr->Box(); gr->Pipe(a,b); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 20 30 new b 20 30 @@ -3636,6 +3946,7 @@ light on box pipe a b @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(20,30,1); @@ -3668,17 +3979,16 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Light(True); gr.Box(); gr.Pipe(a,b); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Dew sample, Surf3C sample, Pipe sample, Dual plotting samples @subsection Dew -- пример использования @cindex Dew - @float -@image{png/dew, 7cm} -@caption{Example of Dew. @tdref{dew}} +@image{../png/dew, 7cm} +@c @caption{Example of Dew. @tdref{dew}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(20,30), b(20,30); @@ -3689,6 +3999,7 @@ gr->Light(true); gr->Dew(a,b); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 20 30 new b 20 30 @@ -3698,6 +4009,7 @@ box light on dew a b @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(20,30,1); @@ -3730,23 +4042,21 @@ b.Modify("0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Light(True); gr.Box(); gr.Dew(a,b); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Surf3C sample, Surf3A sample, Dew sample, Dual plotting samples @subsection Surf3C -- пример использования @cindex Surf3C - @float -@image{png/surf3c, 7cm} -@caption{Example of Surf3C. @tdref{surf3c}} +@image{../png/surf3c, 7cm} +@c @caption{Example of Surf3C. @tdref{surf3c}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(60,50,40), b(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); b.Modify("1-2*tanh(4*(x+y-1)^2)"); - gr->Rotate(40,60); gr->Light(true); gr->Alpha(true); @@ -3754,25 +4064,25 @@ gr->Box(); gr->Surf3C(a, b); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 60 50 40 new b 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' modify b '1-2*tanh(4*(x+y-1)^2)' - rotate 40 60 light on alpha on box surf3c a b @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(60,50,40); HMDT b = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); mgl_data_modify(b,"1-2*tanh(4*(x+y-1)^2)",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_alpha(gr,1); @@ -3787,7 +4097,6 @@ a = mgl_create_data_size(60,50,40); b = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); call mgl_data_modify(b,"1-2*tanh(4*(x+y-1)^2)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_alpha(gr,1) @@ -3805,24 +4114,21 @@ gr.Rotate(40,60); gr.Light(True); gr.Alpha(True); gr.Box(); gr.Surf3C(a,b); @end verbatim - - +@end ifclear @c ------------------------------------------------------------------ @node Surf3A sample, Vect 3D sample, Surf3C sample, Dual plotting samples @subsection Surf3A -- пример использования @cindex Surf3A - @float -@image{png/surf3a, 7cm} -@caption{Example of Surf3A. @tdref{surf3a}} +@image{../png/surf3a, 7cm} +@c @caption{Example of Surf3A. @tdref{surf3a}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(60,50,40), b(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); b.Modify("1-2*tanh(4*(x+y-1)^2)"); - gr->Rotate(40,60); gr->Light(true); gr->Alpha(true); @@ -3830,25 +4136,25 @@ gr->Box(); gr->Surf3A(a, b); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 60 50 40 new b 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' modify b '1-2*tanh(4*(x+y-1)^2)' - rotate 40 60 light on alpha on box surf3a a b @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a, b; a = mgl_create_data_size(60,50,40); b = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); mgl_data_modify(b,"1-2*tanh(4*(x+y-1)^2)",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_alpha(gr,1); @@ -3863,7 +4169,6 @@ a = mgl_create_data_size(60,50,40); b = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); call mgl_data_modify(b,"1-2*tanh(4*(x+y-1)^2)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_alpha(gr,1) @@ -3881,17 +4186,16 @@ gr.Rotate(40,60); gr.Light(True); gr.Alpha(True); gr.Box(); gr.Surf3A(a,b); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Vect 3D sample, VectL 3D sample, Surf3A sample, Dual plotting samples @subsection Vect 3D -- пример использования @cindex Vect - @float -@image{png/vect3, 7cm} -@caption{Example of Vect in 3D. @tdref{vect3}} +@image{../png/vect3, 7cm} +@c @caption{Example of Vect in 3D. @tdref{vect3}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData ex(10,10,10), ey(10,10,10), ez(10,10,10); @@ -3906,6 +4210,7 @@ gr->Box(); gr->Vect(ex, ey, ez, "bwr"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new ex 10 10 10 new ey 10 10 10 @@ -3913,11 +4218,11 @@ new ez 10 10 10 fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)' fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)' fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)' - rotate 40 60 box vect ex ey ez 'bwr' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT ex, ey, ez; @@ -3930,7 +4235,6 @@ mgl_data_fill_eq(gr, ey, "0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - \ 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0); mgl_data_fill_eq(gr, ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \ 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0); - mgl_rotate(gr,40.,60.,0.); mgl_box(gr,1); mgl_vect_3d(gr,ex,ey,ez,"bwr"); @@ -3948,7 +4252,6 @@ call mgl_data_fill_eq(gr, ey, '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - & 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0); call mgl_data_fill_eq(gr, ez, '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - & 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0); - call mgl_rotate(gr,40.,60.,0.) call mgl_box(gr,1); call mgl_vect_3d(gr,ex,ey,ez,'bwr') @@ -3968,17 +4271,16 @@ gr.Fill(ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \ gr.Rotate(40,60); gr.Box(); gr.Vect(ex,ey,ez,"bwr"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node VectL 3D sample, VectC 3D sample, Vect 3D sample, Dual plotting samples @subsection VectL 3D -- пример использования @cindex VectL - @float -@image{png/vectl3, 7cm} -@caption{Example of VectL in 3D. @tdref{vectl3}} +@image{../png/vectl3, 7cm} +@c @caption{Example of VectL in 3D. @tdref{vectl3}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData ex(10,10,10), ey(10,10,10), ez(10,10,10); @@ -3993,6 +4295,7 @@ gr->Box(); gr->VectL(ex, ey, ez, "bwr"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new ex 10 10 10 new ey 10 10 10 @@ -4000,11 +4303,11 @@ new ez 10 10 10 fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)' fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)' fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)' - rotate 40 60 box vectl ex ey ez 'bwr' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT ex, ey, ez; @@ -4017,7 +4320,6 @@ mgl_data_fill_eq(gr, ey, "0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - \ 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0); mgl_data_fill_eq(gr, ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \ 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0); - mgl_rotate(gr,40.,60.,0.); mgl_box(gr,1); mgl_vectl_3d(gr,ex,ey,ez,"bwr"); @@ -4035,7 +4337,6 @@ call mgl_data_fill_eq(gr, ey, '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - & 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0); call mgl_data_fill_eq(gr, ez, '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - & 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0); - call mgl_rotate(gr,40.,60.,0.) call mgl_box(gr,1); call mgl_vectl_3d(gr,ex,ey,ez,'bwr') @@ -4055,17 +4356,16 @@ gr.Fill(ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \ gr.Rotate(40,60); gr.Box(); gr.VectL(ex,ey,ez,"bwr"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node VectC 3D sample, Flow 3D sample, VectL 3D sample, Dual plotting samples @subsection VectC 3D -- пример использования @cindex VectC - @float -@image{png/vectc3, 7cm} -@caption{Example of VectC in 3D. @tdref{vectc3}} +@image{../png/vectc3, 7cm} +@c @caption{Example of VectC in 3D. @tdref{vectc3}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData ex(10,10,10), ey(10,10,10), ez(10,10,10); @@ -4080,6 +4380,7 @@ gr->Box(); gr->VectC(ex, ey, ez, "bwr"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new ex 10 10 10 new ey 10 10 10 @@ -4087,11 +4388,11 @@ new ez 10 10 10 fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)' fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)' fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)' - rotate 40 60 box vectc ex ey ez 'bwr' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT ex, ey, ez; @@ -4104,7 +4405,6 @@ mgl_data_fill_eq(gr, ey, "0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - \ 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0); mgl_data_fill_eq(gr, ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \ 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0); - mgl_rotate(gr,40.,60.,0.); mgl_box(gr,1); mgl_vectc_3d(gr,ex,ey,ez,"bwr"); @@ -4122,7 +4422,6 @@ call mgl_data_fill_eq(gr, ey, '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - & 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0); call mgl_data_fill_eq(gr, ez, '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - & 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0); - call mgl_rotate(gr,40.,60.,0.) call mgl_box(gr,1); call mgl_vectc_3d(gr,ex,ey,ez,'bwr') @@ -4142,17 +4441,16 @@ gr.Fill(ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \ gr.Rotate(40,60); gr.Box(); gr.VectC(ex,ey,ez,"bwr"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Flow 3D sample, Pipe 3D sample, VectC 3D sample, Dual plotting samples @subsection Flow 3D -- пример использования @cindex Flow - @float -@image{png/flow3, 7cm} -@caption{Example of Flow in 3D. @tdref{flow3}} +@image{../png/flow3, 7cm} +@c @caption{Example of Flow in 3D. @tdref{flow3}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData ex(30,30,30), ey(30,30,30), ez(30,30,30); @@ -4167,6 +4465,7 @@ gr->Box(); gr->Flow(ex, ey, ez, "bwr"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new ex 30 30 30 new ey 30 30 30 @@ -4174,11 +4473,11 @@ new ez 30 30 30 fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)' fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)' fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)' - rotate 40 60 box flow ex ey ez 'bwr' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT ex, ey, ez; @@ -4191,7 +4490,6 @@ mgl_data_fill_eq(gr, ey, "0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - \ 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0); mgl_data_fill_eq(gr, ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \ 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0); - mgl_rotate(gr,40.,60.,0.); mgl_box(gr,1); mgl_flow_3d(gr,ex,ey,ez,"bwr",3,1); @@ -4209,7 +4507,6 @@ call mgl_data_fill_eq(gr, ey, '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - & 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0); call mgl_data_fill_eq(gr, ez, '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - & 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0); - call mgl_rotate(gr,40.,60.,0.) call mgl_box(gr,1); call mgl_flow_3d(gr,ex,ey,ez,'bwr',3,1) @@ -4229,17 +4526,16 @@ gr.Fill(ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \ gr.Rotate(40,60); gr.Box(); gr.Flow(ex,ey,ez,"bwr"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Pipe 3D sample, Crust sample, Flow 3D sample, Dual plotting samples @subsection Pipe 3D -- пример использования @cindex Pipe - @float -@image{png/pipe3, 7cm} -@caption{Example of Pipe in 3D. @tdref{pipe3}} +@image{../png/pipe3, 7cm} +@c @caption{Example of Pipe in 3D. @tdref{pipe3}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData ex(10,10,10), ey(10,10,10), ez(10,10,10); @@ -4255,6 +4551,7 @@ gr->Box(); gr->Pipe(ex, ey, ez, "bwr"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new ex 10 10 10 new ey 10 10 10 @@ -4262,12 +4559,12 @@ new ez 10 10 10 fill ex '0.2*x/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*x/pow(x^2+y^2+(z+0.3)^2,1.5)' fill ey '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)' fill ez '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)' - rotate 40 60 light on box pipe ex ey ez 'bwr' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT ex, ey, ez; @@ -4280,7 +4577,6 @@ mgl_data_fill_eq(gr, ey, "0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - \ 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0); mgl_data_fill_eq(gr, ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \ 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)",0,0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -4299,7 +4595,6 @@ call mgl_data_fill_eq(gr, ey, '0.2*y/pow(x^2+y^2+(z-0.3)^2,1.5) - & 0.2*y/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0); call mgl_data_fill_eq(gr, ez, '0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - & 0.2*(z+0.3)/pow(x^2+y^2+(z+0.3)^2,1.5)',0,0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1); call mgl_box(gr,1); @@ -4320,17 +4615,16 @@ gr.Fill(ez, "0.2*(z-0.3)/pow(x^2+y^2+(z-0.3)^2,1.5) - \ gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Pipe(ex,ey,ez,"bwr"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Crust sample, Dots sample, Pipe 3D sample, Dual plotting samples @subsection Crust -- пример использования @cindex Crust - @float -@image{png/crust, 7cm} -@caption{Example of Crust. @tdref{crust}} +@image{../png/crust, 7cm} +@c @caption{Example of Crust. @tdref{crust}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a("hotdogs.pts"); @@ -4341,6 +4635,7 @@ gr->Box(); gr->Crust(a,"p"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim read a 'hotdogs.pts' norm a -1 1 on @@ -4349,6 +4644,7 @@ light on box crust a 'p' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_file("hotdogs.pts"); @@ -4378,17 +4674,16 @@ gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Crust(a); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Dots sample,, Crust sample, Dual plotting samples @subsection Dots -- пример использования @cindex Dots - @float -@image{png/dots, 7cm} -@caption{Example of Dots. @tdref{dots}} +@image{../png/dots, 7cm} +@c @caption{Example of Dots. @tdref{dots}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a("hotdogs.pts"); @@ -4398,6 +4693,7 @@ gr->Box(); gr->Dots(a,"p"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim read a 'hotdogs.pts' norm a -1 1 on @@ -4405,6 +4701,7 @@ rotate 40 60 box dots a 'p' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_file("hotdogs.pts"); @@ -4424,21 +4721,698 @@ call mgl_box(gr,1) call mgl_dots_tr(gr,a,"p") call mgl_delete_data(a) @end verbatim -@strong{Python} +@strong{Python} +@verbatim +a = mglData("hotdogs.pts"); +a.Norm(-1,1,True); +gr.Rotate(40,60); gr.Light(True); +gr.Box(); +gr.Dots(a); +@end verbatim +@end ifclear + + +@c ------------------------------------------------------------------ +@node Basic features, Additional features, Dual plotting samples, Samples +@section Базовые возможности +@menu +* 1D plot sample:: +* 2D plot sample:: +* 3D plot sample:: +* Line styles sample:: +* Arrow styles sample:: +* Text styles sample:: +* TeX parsing sample:: +* Font faces sample:: +* Colors sample:: +* Color schemes sample:: +* Normal transparency:: +* Glass-like transparency:: +* Lamp-like transparency:: +@end menu +@c ------------------------------------------------------------------ +@node 1D plot sample, 2D plot sample, , Basic features +@subsection Пример графиков 1D данных +@cindex Plot +@cindex Bars +@cindex SubPlot +@float +@image{../png/sample8, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ код} +@verbatim +mglData y0(50); y0.Modify("sin(pi*(2*x-1))"); +gr->SubPlot(2,2,0); +gr->Plot(y0); gr->Box(); + +gr->SubPlot(2,2,1); +mglData y1(50,2); +y1.Modify("sin(pi*2*x-pi)"); y1.Modify("cos(pi*2*x-pi)/2",1); +gr->Plot(y1); gr->Box(); + +mglData x(50); x.Modify("cos(pi*2*x-pi)"); +gr->Plot(x,y0,"Y+"); + +gr->Plot(y1.SubData(-1,0),y1.SubData(-1,1),"q|"); + +gr->SubPlot(2,2,2); gr->Rotate(60,40); +mglData z(50); z.Modify("2*x-1"); +gr->Plot(x,y0,z); gr->Box(); + +mglData y2(10,3); y2.Modify("cos(pi*(2*x-1-y))"); +y2.Modify("2*x-1",2); +gr->Plot(y2.SubData(-1,0),y2.SubData(-1,1),y2.SubData(-1,2),"bo "); + +gr->SubPlot(2,2,3); gr->Rotate(60,40); +gr->Bars(x,y0,z,"ri"); gr->Box(); +@end verbatim +@strong{MGL скрипт} +@end ifclear +@verbatim +new y0 50: modify y0 'sin(pi*(2*x-1))' +subplot 2 2 0 +plot y0: box + +subplot 2 2 1 +new y1 50 2 +modify y1 'sin(pi*2*x-pi)' +modify y1 'cos(pi*2*x-pi)/2' 1 +plot y1: box + +new x 50: modify x 'cos(pi*2*x-pi)' +plot x y0 'Y+' +plot y1(:,0) y(:,1) 'q|' + +subplot 2 2 2:rotate 60 40 +new z 50: modify z '2*x-1' +plot x y0 z 'g':box +new y2 10 3 +modify y2 'cos(pi*(2*x-1-y))' +modify y2 '2*x-1' 2 +plot y2(:,0) y2(:,1) y2(:,2) 'bo ' + +subplot 2 2 3:rotate 60 40 +bars x y0 z 'r':box +@end verbatim +@c ------------------------------------------------------------------ +@node 2D plot sample, 3D plot sample, 1D plot sample, Basic features +@subsection Пример графиков 2D данных +@cindex Surf +@cindex Dens +@cindex Alpha +@float +@image{../png/sample9, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ код} +@verbatim +gr->Light(true); +mglData a0(50,40); +a0.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); +gr->SubPlot(2,2,0); gr->Rotate(60,40); +gr->Surf(a0); gr->Box(); + +mglData x(50,40),y(50,40),z(50,40); +x.Modify("0.8*sin(2*pi*x)*sin(pi*y)"); +y.Modify("0.8*cos(2*pi*x)*sin(pi*y)"); +z.Modify("0.8*cos(pi*y)"); +gr->SubPlot(2,2,1); gr->Rotate(60,40); +gr->Surf(x,y,z,"BbwrR"); gr->Box(); + +mglData a1(50,40,3); +a1.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); +a1.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*sin(3*pi*(x*y))",1); +a1.Modify("0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",2); +gr->SubPlot(2,2,2); gr->Rotate(60,40); +gr->Alpha(true); +gr->Surf(a1); gr->Box(); + +gr->SubPlot(2,2,3); gr->Rotate(60,40); +gr->Dens(a1); gr->Box(); +@end verbatim +@strong{MGL скрипт} +@end ifclear +@verbatim +light on + +new a0 50 40 +modify a0 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))' +subplot 2 2 0:rotate 60 40 +surf a0: box + +new x 50 40: new y 50 40: new z 50 40 +modify x '0.8*sin(2*pi*x)*sin(pi*y)' +modify y '0.8*cos(2*pi*x)*sin(pi*y)' +modify z '0.8*cos(pi*y)' +subplot 2 2 1:rotate 60 40 +surf x y z 'bbwrr': box + +new a1 50 40 3 +modify a1 '0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))' +modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*sin(3*pi*(x*y))' 1 +modify a1 '0.6*cos(2*pi*x)*cos(3*pi*y)+0.4*cos(3*pi*(x*y))' 2 +subplot 2 2 2:rotate 60 40 +alpha on +surf a1: box + +subplot 2 2 3: rotate 60 40 +dens a1: box +@end verbatim +@c ------------------------------------------------------------------ +@node 3D plot sample, Line styles sample, 2D plot sample, Basic features +@subsection Пример графиков 3D данных +@cindex Surf +@cindex Dens +@cindex Alpha +@float +@image{../png/sampleb, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ код} +@verbatim +gr->Alpha(true); gr->Light(true); gr->Light(0,mglPoint(0,0,1)); +mglData a(30,30,30), b(30,30,30); +a.Modify("exp(-16*((z-0.5)^2+(y-0.5)^2)/(1+4*x^2))"); +b.Modify("16*((z-0.5)^2+(y-0.5)^2)*(x)/(1+4*x^2)"); +gr->CAxis(0,1); + +gr->SubPlot(2,2,0); gr->Rotate(40,60); +gr->Surf3(a,"wgk"); gr->Box(); +gr->SubPlot(2,2,1); gr->Rotate(40,60); +gr->DensA(a); gr->Box(); gr->Axis(); +gr->SubPlot(2,2,2); gr->Rotate(40,60); +gr->Cloud(a); gr->Box(); +gr->SubPlot(2,2,3); gr->Rotate(40,60); +gr->Surf3A(b,a,"q"); gr->Box(); +@end verbatim +@strong{MGL скрипт} +@end ifclear +@verbatim +alpha on: light on +light 0 0 0 1 +new a 30 30 30: new b 30 30 30 +modify a 'exp(-16*((z-0.5)^2+(y-0.5)^2)/(1+4*x^2))' +modify b '16*((z-0.5)^2+(y-0.5)^2)*(x)/(1+4*x^2)' +caxis 0 1 + +subplot 2 2 0: rotate 40 60 +surf3 a 'wgk': box +subplot 2 2 1: rotate 40 60 +densa a: box: axis +subplot 2 2 2: rotate 40 60 +cloud a: box +subplot 2 2 3: rotate 40 60 +surf3a b a 'q': box +@end verbatim +@c ------------------------------------------------------------------ +@node Line styles sample, Arrow styles sample, 3D plot sample, Basic features +@subsection Пример стилей линий и маркеров +@cindex Mark +@cindex Line +@float +@image{../png/sample5, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ код} +@verbatim +float d,x1,x2,x0,y=0.95; +d=0.3, x0=0.2, x1=0.5, x2=0.6; +gr->Line(mglPoint(x0,1-0*d),mglPoint(x1,1-0*d),"k-"); gr->Puts(mglPoint(x2,y-0*d),"Solid '-'","rL"); +gr->Line(mglPoint(x0,1-1*d),mglPoint(x1,1-1*d),"k|"); gr->Puts(mglPoint(x2,y-1*d),"Long Dash '|'","rL"); +gr->Line(mglPoint(x0,1-2*d),mglPoint(x1,1-2*d),"k;"); gr->Puts(mglPoint(x2,y-2*d),"Dash ';'","rL"); +gr->Line(mglPoint(x0,1-3*d),mglPoint(x1,1-3*d),"k="); gr->Puts(mglPoint(x2,y-3*d),"Small dash '='","rL"); +gr->Line(mglPoint(x0,1-4*d),mglPoint(x1,1-4*d),"kj"); gr->Puts(mglPoint(x2,y-4*d),"Dash-dot 'j'","rL"); +gr->Line(mglPoint(x0,1-5*d),mglPoint(x1,1-5*d),"ki"); gr->Puts(mglPoint(x2,y-5*d),"Small dash-dot 'i'","rL"); +gr->Line(mglPoint(x0,1-6*d),mglPoint(x1,1-6*d),"k:"); gr->Puts(mglPoint(x2,y-6*d),"Dots ':'","rL"); +gr->Line(mglPoint(x0,1-7*d),mglPoint(x1,1-7*d),"k "); gr->Puts(mglPoint(x2,y-7*d),"None ' '","rL"); + +d=0.25; x1=-1; x0=-0.8; y = -0.05; +gr->Mark(mglPoint(x1,5*d),'.'); gr->Puts(mglPoint(x0,y+5*d),"'.'","rL"); +gr->Mark(mglPoint(x1,4*d),'+'); gr->Puts(mglPoint(x0,y+4*d),"'+'","rL"); +gr->Mark(mglPoint(x1,3*d),'x'); gr->Puts(mglPoint(x0,y+3*d),"'x'","rL"); +gr->Mark(mglPoint(x1,2*d),'*'); gr->Puts(mglPoint(x0,y+2*d),"'*'","rL"); +gr->Mark(mglPoint(x1,d),'s'); gr->Puts(mglPoint(x0,y+d),"'s'","rL"); +gr->Mark(mglPoint(x1,0),'d'); gr->Puts(mglPoint(x0,y),"'d'","rL"); +gr->Mark(mglPoint(x1,-d,0),'o'); gr->Puts(mglPoint(x0,y-d),"'o'","rL"); +gr->Mark(mglPoint(x1,-2*d,0),'^'); gr->Puts(mglPoint(x0,y-2*d),"'\\^'","rL"); +gr->Mark(mglPoint(x1,-3*d,0),'v'); gr->Puts(mglPoint(x0,y-3*d),"'v'","rL"); +gr->Mark(mglPoint(x1,-4*d,0),'<'); gr->Puts(mglPoint(x0,y-4*d),"'<'","rL"); +gr->Mark(mglPoint(x1,-5*d,0),'>'); gr->Puts(mglPoint(x0,y-5*d),"'>'","rL"); + +d=0.25; x1=-0.5; x0=-0.3; y = -0.05; +gr->Mark(mglPoint(x1,5*d),'C'); gr->Puts(mglPoint(x0,y+5*d),"'\\#.'","rL"); +gr->Mark(mglPoint(x1,4*d),'P'); gr->Puts(mglPoint(x0,y+4*d),"'\\#+'","rL"); +gr->Mark(mglPoint(x1,3*d),'X'); gr->Puts(mglPoint(x0,y+3*d),"'\\#x'","rL"); +gr->Mark(mglPoint(x1,2*d),'Y'); gr->Puts(mglPoint(x0,y+2*d),"'\\#*'","rL"); +gr->Mark(mglPoint(x1,d),'S'); gr->Puts(mglPoint(x0,y+d),"'\\#s'","rL"); +gr->Mark(mglPoint(x1,0),'D'); gr->Puts(mglPoint(x0,y),"'\\#d'","rL"); +gr->Mark(mglPoint(x1,-d,0),'O'); gr->Puts(mglPoint(x0,y-d),"'\\#o'","rL"); +gr->Mark(mglPoint(x1,-2*d,0),'T'); gr->Puts(mglPoint(x0,y-2*d),"'\\#\\^'","rL"); +gr->Mark(mglPoint(x1,-3*d,0),'V'); gr->Puts(mglPoint(x0,y-3*d),"'\\#v'","rL"); +gr->Mark(mglPoint(x1,-4*d,0),'L'); gr->Puts(mglPoint(x0,y-4*d),"'\\#<'","rL"); +gr->Mark(mglPoint(x1,-5*d,0),'R'); gr->Puts(mglPoint(x0,y-5*d),"'\\#>'","rL"); +@end verbatim +@strong{MGL скрипт} +@end ifclear +@verbatim +NOT AVAILABLE +@end verbatim +@c ------------------------------------------------------------------ +@node Arrow styles sample, Text styles sample, Line styles sample, Basic features +@subsection Пример стилей стрелок +@cindex Line +@float +@image{../png/sampled, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ код} +@verbatim +float a=0.1,b=0.4,c=0.5; +gr->Line(mglPoint(a,1),mglPoint(b,1),"k-A"); gr->Puts(mglPoint(c,1),"Style 'A' or 'A\\_'","rL"); +gr->Line(mglPoint(a,0.8),mglPoint(b,0.8),"k-V"); gr->Puts(mglPoint(c,0.8),"Style 'V' or 'V\\_'","rL"); +gr->Line(mglPoint(a,0.6),mglPoint(b,0.6),"k-K"); gr->Puts(mglPoint(c,0.6),"Style 'K' or 'K\\_'","rL"); +gr->Line(mglPoint(a,0.4),mglPoint(b,0.4),"k-I"); gr->Puts(mglPoint(c,0.4),"Style 'I' or 'I\\_'","rL"); +gr->Line(mglPoint(a,0.2),mglPoint(b,0.2),"k-D"); gr->Puts(mglPoint(c,0.2),"Style 'D' or 'D\\_'","rL"); +gr->Line(mglPoint(a,0),mglPoint(b,0),"k-S"); gr->Puts(mglPoint(c,0),"Style 'S' or 'S\\_'","rL"); +gr->Line(mglPoint(a,-0.2),mglPoint(b,-0.2),"k-O"); gr->Puts(mglPoint(c,-0.2),"Style 'O' or 'O\\_'","rL"); +gr->Line(mglPoint(a,-0.4),mglPoint(b,-0.4),"k-T"); gr->Puts(mglPoint(c,-0.4),"Style 'T' or 'T\\_'","rL"); +gr->Line(mglPoint(a,-0.6),mglPoint(b,-0.6),"k-_"); gr->Puts(mglPoint(c,-0.6),"Style '\\_' or none","rL"); +gr->Line(mglPoint(a,-0.8),mglPoint(b,-0.8),"k-AS"); gr->Puts(mglPoint(c,-0.8),"Style 'AS'","rL"); +gr->Line(mglPoint(a,-1),mglPoint(b,-1),"k-_A"); gr->Puts(mglPoint(c,-1),"Style '\\_A'","rL"); + +a=-1; b=-0.7; c=-0.6; +gr->Line(mglPoint(a,1),mglPoint(b,1),"kAA"); gr->Puts(mglPoint(c,1),"Style 'AA'","rL"); +gr->Line(mglPoint(a,0.8),mglPoint(b,0.8),"kVV"); gr->Puts(mglPoint(c,0.8),"Style 'VV'","rL"); +gr->Line(mglPoint(a,0.6),mglPoint(b,0.6),"kKK"); gr->Puts(mglPoint(c,0.6),"Style 'KK'","rL"); +gr->Line(mglPoint(a,0.4),mglPoint(b,0.4),"kII"); gr->Puts(mglPoint(c,0.4),"Style 'II'","rL"); +gr->Line(mglPoint(a,0.2),mglPoint(b,0.2),"kDD"); gr->Puts(mglPoint(c,0.2),"Style 'DD'","rL"); +gr->Line(mglPoint(a,0),mglPoint(b,0),"kSS"); gr->Puts(mglPoint(c,0),"Style 'SS'","rL"); +gr->Line(mglPoint(a,-0.2),mglPoint(b,-0.2),"kOO"); gr->Puts(mglPoint(c,-0.2),"Style 'OO'","rL"); +gr->Line(mglPoint(a,-0.4),mglPoint(b,-0.4),"kTT"); gr->Puts(mglPoint(c,-0.4),"Style 'TT'","rL"); +gr->Line(mglPoint(a,-0.6),mglPoint(b,-0.6),"k-__"); gr->Puts(mglPoint(c,-0.6),"Style '\\_\\_'","rL"); +gr->Line(mglPoint(a,-0.8),mglPoint(b,-0.8),"k-VA"); gr->Puts(mglPoint(c,-0.8),"Style 'VA'","rL"); +gr->Line(mglPoint(a,-1),mglPoint(b,-1),"k-AV"); gr->Puts(mglPoint(c,-1),"Style 'AV'","rL"); +@end verbatim +@strong{MGL скрипт} +@end ifclear +@verbatim +NOT AVAILABLE +@end verbatim +@c ------------------------------------------------------------------ +@node Text styles sample, TeX parsing sample, Arrow styles sample, Basic features +@subsection Пример стилей текста +@cindex Puts +@float +@image{../png/sample4, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ код} +@verbatim +gr->Putsw(mglPoint(0,1),L"Text can be in ASCII and in Unicode"); +gr->Puts(mglPoint(0,0.6),"It can be \\wire{wire}, \\big{big} or #r{colored}"); +gr->Puts(mglPoint(0,0.2),"One can change style in string: " + "\\b{bold}, \\i{italic, \\b{both}}"); +gr->Puts(mglPoint(0,-0.2),"Easy to \\a{overline} or " + "\\u{underline}"); +gr->Puts(mglPoint(0,-0.6),"Easy to change indexes ^{up} _{down} @{center}"); +gr->Puts(mglPoint(0,-1),"It parse TeX: \\int \\alpha \\cdot " + "\\sqrt3{sin(\\pi x)^2 + \\gamma_{i_k}} dx"); +@end verbatim +@strong{MGL скрипт} +@end ifclear +@verbatim +text 0 1 'Text can be in ASCII and in Unicode' +text 0 0.6 'It can be \wire{wire}, \big{big} or #r{colored}' +text 0 0.2 'One can change style in string: \b{bold}, \i{italic, \b{both}}' +text 0 -0.2 'Easy to \a{overline} or \u{underline}' +text 0 -0.6 'Easy to change indexes ^{up} _{down} @{center}' +text 0 -1 'It parse TeX: \int \alpha \cdot \sqrt3{sin(\pi x)^2 + \gamma_{i_k}} dx' +@end verbatim +@c ------------------------------------------------------------------ +@node TeX parsing sample, Font faces sample, Text styles sample, Basic features +@subsection Пример TeX формулы +@cindex Puts +@float +@image{../png/samplee, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ код} +@verbatim +gr->Puts(mglPoint(0), "\\sqrt{\\frac{\\alpha^{\\gamma^2}+" + "\\overset 1{\\big\\infty}}{\\sqrt3{2+b}}}", 0, -4); +@end verbatim +@strong{MGL скрипт} +@end ifclear +@verbatim +text 0 0 '\sqrt{\frac{\alpha^{\gamma^2}+\overset 1{\big\infty}}{\sqrt3{2+b}}}' '' -4 +@end verbatim +@c ------------------------------------------------------------------ +@node Font faces sample, Colors sample, TeX parsing sample, Basic features +@subsection Примеры начертаний шрифта +@cindex Puts +@float +@image{../png/fonts, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ код} +@verbatim +float h=1.1, d=0.25; +gr->LoadFont("STIX"); gr->Puts(mglPoint(0,h), "default font (STIX)"); +gr->LoadFont("adventor"); gr->Puts(mglPoint(0,h-d), "adventor font"); +gr->LoadFont("bonum"); gr->Puts(mglPoint(0,h-2*d), "bonum font"); +gr->LoadFont("chorus"); gr->Puts(mglPoint(0,h-3*d), "chorus font"); +gr->LoadFont("cursor"); gr->Puts(mglPoint(0,h-4*d), "cursor font"); +gr->LoadFont("heros"); gr->Puts(mglPoint(0,h-5*d), "heros font"); +gr->LoadFont("heroscn"); gr->Puts(mglPoint(0,h-6*d), "heroscn font"); +gr->LoadFont("pagella"); gr->Puts(mglPoint(0,h-7*d), "pagella font"); +gr->LoadFont("schola"); gr->Puts(mglPoint(0,h-8*d), "schola font"); +gr->LoadFont("termes"); gr->Puts(mglPoint(0,h-9*d), "termes font"); +@end verbatim +@strong{MGL скрипт} +@end ifclear +@verbatim +NOT AVAILABLE +@end verbatim +@c ------------------------------------------------------------------ +@node Colors sample, Color schemes sample, Font faces sample, Basic features +@subsection Примеры цветов +@float +@image{../png/colors, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ код} +@verbatim +//#LENUQ +gr->FaceZ(-1, -1, 0, 0.4, 0.3, "L#"); gr->Puts(mglPoint(-0.8,-0.9), "L", "C:w", -1.4); +gr->FaceZ(-0.6, -1, 0, 0.4, 0.3, "E#"); gr->Puts(mglPoint(-0.4,-0.9), "E", "C:w", -1.4); +gr->FaceZ(-0.2, -1, 0, 0.4, 0.3, "N#"); gr->Puts(mglPoint(0, -0.9), "N", "C:w", -1.4); +gr->FaceZ(0.2, -1, 0, 0.4, 0.3, "U#"); gr->Puts(mglPoint(0.4,-0.9), "U", "C:w", -1.4); +gr->FaceZ(0.6, -1, 0, 0.4, 0.3, "Q#"); gr->Puts(mglPoint(0.8,-0.9), "Q", "C:w", -1.4); +//#lenuq +gr->FaceZ(-1, -0.7, 0, 0.4, 0.3, "l#"); gr->Puts(mglPoint(-0.8,-0.6), "l", "C:k", -1.4); +gr->FaceZ(-0.6, -0.7, 0, 0.4, 0.3, "e#"); gr->Puts(mglPoint(-0.4,-0.6), "e", "C:k", -1.4); +gr->FaceZ(-0.2, -0.7, 0, 0.4, 0.3, "n#"); gr->Puts(mglPoint(0, -0.6), "n", "C:k", -1.4); +gr->FaceZ(0.2, -0.7, 0, 0.4, 0.3, "u#"); gr->Puts(mglPoint(0.4,-0.6), "u", "C:k", -1.4); +gr->FaceZ(0.6, -0.7, 0, 0.4, 0.3, "q#"); gr->Puts(mglPoint(0.8,-0.6), "q", "C:k", -1.4); +//#CMYkP +gr->FaceZ(-1, -0.4, 0, 0.4, 0.3, "C#"); gr->Puts(mglPoint(-0.8,-0.3), "C", "C:w", -1.4); +gr->FaceZ(-0.6, -0.4, 0, 0.4, 0.3, "M#"); gr->Puts(mglPoint(-0.4,-0.3), "M", "C:w", -1.4); +gr->FaceZ(-0.2, -0.4, 0, 0.4, 0.3, "Y#"); gr->Puts(mglPoint(0, -0.3), "Y", "C:w", -1.4); +gr->FaceZ(0.2, -0.4, 0, 0.4, 0.3, "k#"); gr->Puts(mglPoint(0.4,-0.3), "k", "C:w", -1.4); +gr->FaceZ(0.6, -0.4, 0, 0.4, 0.3, "P#"); gr->Puts(mglPoint(0.8,-0.3), "P", "C:w", -1.4); +//#cmywp +gr->FaceZ(-1, -0.1, 0, 0.4, 0.3, "c#"); gr->Puts(mglPoint(-0.8, 0), "c", "C:k", -1.4); +gr->FaceZ(-0.6, -0.1, 0, 0.4, 0.3, "m#"); gr->Puts(mglPoint(-0.4, 0), "m", "C:k", -1.4); +gr->FaceZ(-0.2, -0.1, 0, 0.4, 0.3, "y#"); gr->Puts(mglPoint(0, 0), "y", "C:k", -1.4); +gr->FaceZ(0.2, -0.1, 0, 0.4, 0.3, "w#"); gr->Puts(mglPoint(0.4, 0), "w", "C:k", -1.4); +gr->FaceZ(0.6, -0.1, 0, 0.4, 0.3, "p#"); gr->Puts(mglPoint(0.8, 0), "p", "C:k", -1.4); +//#BGRHW +gr->FaceZ(-1, 0.2, 0, 0.4, 0.3, "B#"); gr->Puts(mglPoint(-0.8, 0.3), "B", "C:w", -1.4); +gr->FaceZ(-0.6, 0.2, 0, 0.4, 0.3, "G#"); gr->Puts(mglPoint(-0.4, 0.3), "G", "C:w", -1.4); +gr->FaceZ(-0.2, 0.2, 0, 0.4, 0.3, "R#"); gr->Puts(mglPoint(0, 0.3), "R", "C:w", -1.4); +gr->FaceZ(0.2, 0.2, 0, 0.4, 0.3, "H#"); gr->Puts(mglPoint(0.4, 0.3), "H", "C:w", -1.4); +gr->FaceZ(0.6, 0.2, 0, 0.4, 0.3, "W#"); gr->Puts(mglPoint(0.8, 0.3), "W", "C:w", -1.4); +//#bgrhw +gr->FaceZ(-1, 0.2, 0, 0.4, 0.3, "b#"); gr->Puts(mglPoint(-0.8, 0.6), "b", "C:k", -1.4); +gr->FaceZ(-0.6, 0.5, 0, 0.4, 0.3, "g#"); gr->Puts(mglPoint(-0.4, 0.6), "g", "C:k", -1.4); +gr->FaceZ(-0.2, 0.2, 0, 0.4, 0.3, "r#"); gr->Puts(mglPoint(0, 0.6), "r", "C:k", -1.4); +gr->FaceZ(0.2, 0.2, 0, 0.4, 0.3, "h#"); gr->Puts(mglPoint(0.4, 0.6), "h", "C:k", -1.4); +gr->FaceZ(0.6, 0.2, 0, 0.4, 0.3, "w#"); gr->Puts(mglPoint(0.8, 0.6), "w", "C:k", -1.4); +//#brighted +gr->FaceZ(-1, 0.8, 0, 0.4, 0.3, "r1#"); gr->Puts(mglPoint(-0.8, 0.9), "r1", "C:w", -1.4); +gr->FaceZ(-0.6, 0.8, 0, 0.4, 0.3, "r3#"); gr->Puts(mglPoint(-0.4, 0.9), "r3", "C:w", -1.4); +gr->FaceZ(-0.2, 0.8, 0, 0.4, 0.3, "r5#"); gr->Puts(mglPoint(0, 0.9), "r5", "C:k", -1.4); +gr->FaceZ(0.2, 0.8, 0, 0.4, 0.3, "r7#"); gr->Puts(mglPoint(0.4, 0.9), "r7", "C:k", -1.4); +gr->FaceZ(0.6, 0.8, 0, 0.4, 0.3, "r9#"); gr->Puts(mglPoint(0.8, 0.9), "r9", "C:k", -1.4); +@end verbatim +@strong{MGL скрипт} +@end ifclear +@verbatim +#LENUQ +facez -1 -1 0 0.4 0.3 'L#': text -0.8 -0.9 'L' 'C:w' +facez -0.6 -1 0 0.4 0.3 'E#': text -0.4 -0.9 'E' 'C:w' +facez -0.2 -1 0 0.4 0.3 'N#': text 0 -0.9 'N' 'C:w' +facez 0.2 -1 0 0.4 0.3 'U#': text 0.4 -0.9 'U' 'C:w' +facez 0.6 -1 0 0.4 0.3 'Q#': text 0.8 -0.9 'Q' 'C:w' +#lenuq +facez -1 -0.7 0 0.4 0.3 'l#': text -0.8 -0.6 'l' 'C:k' +facez -0.6 -0.7 0 0.4 0.3 'e#': text -0.4 -0.6 'e' 'C:k' +facez -0.2 -0.7 0 0.4 0.3 'n#': text 0 -0.6 'n' 'C:k' +facez 0.2 -0.7 0 0.4 0.3 'u#': text 0.4 -0.6 'u' 'C:k' +facez 0.6 -0.7 0 0.4 0.3 'q#': text 0.8 -0.6 'q' 'C:k' +#CMYkP +facez -1 -0.4 0 0.4 0.3 'C#': text -0.8 -0.3 'C' 'C:w' +facez -0.6 -0.4 0 0.4 0.3 'M#': text -0.4 -0.3 'M' 'C:w' +facez -0.2 -0.4 0 0.4 0.3 'Y#': text 0 -0.3 'Y' 'C:w' +facez 0.2 -0.4 0 0.4 0.3 'k#': text 0.4 -0.3 'k' 'C:w' +facez 0.6 -0.4 0 0.4 0.3 'P#': text 0.8 -0.3 'P' 'C:w' +#lenuq +facez -1 -0.1 0 0.4 0.3 'c#': text -0.8 0 'c' 'C:k' +facez -0.6 -0.1 0 0.4 0.3 'm#': text -0.4 0 'm' 'C:k' +facez -0.2 -0.1 0 0.4 0.3 'y#': text 0 0 'y' 'C:k' +facez 0.2 -0.1 0 0.4 0.3 'w#': text 0.4 0 'w' 'C:k' +facez 0.6 -0.1 0 0.4 0.3 'p#': text 0.8 0 'p' 'C:k' +#BGRHW +facez -1 0.2 0 0.4 0.3 'B#': text -0.8 0.3 'B' 'C:k' +facez -0.6 0.2 0 0.4 0.3 'G#': text -0.4 0.3 'G' 'C:k' +facez -0.2 0.2 0 0.4 0.3 'R#': text 0 0.3 'R' 'C:k' +facez 0.2 0.2 0 0.4 0.3 'H#': text 0.4 0.3 'H' 'C:k' +facez 0.6 0.2 0 0.4 0.3 'W#': text 0.8 0.3 'W' 'C:k' +#bgrhw +facez -1 0.5 0 0.4 0.3 'b#': text -0.8 0.6 'b' 'C:w' +facez -0.6 0.5 0 0.4 0.3 'g#': text -0.4 0.6 'g' 'C:w' +facez -0.2 0.5 0 0.4 0.3 'r#': text 0 0.6 'r' 'C:w' +facez 0.2 0.5 0 0.4 0.3 'h#': text 0.4 0.6 'h' 'C:w' +facez 0.6 0.5 0 0.4 0.3 'w#': text 0.8 0.6 'w' 'C:w' +#brighted +facez -1 0.8 0 0.4 0.3 'r1#': text -0.8 0.9 'r1' 'C:k' +facez -0.6 0.8 0 0.4 0.3 'r3#': text -0.4 0.9 'r3' 'C:k' +facez -0.2 0.8 0 0.4 0.3 'r5#': text 0 0.9 'r5' 'C:k' +facez 0.2 0.8 0 0.4 0.3 'r7#': text 0.4 0.9 'r7' 'C:k' +facez 0.6 0.8 0 0.4 0.3 'r9#': text 0.8 0.9 'r9' 'C:k' +@end verbatim +@c ------------------------------------------------------------------ +@node Color schemes sample, Normal transparency, Colors sample, Basic features +@subsection Примеры цветовых схем +@cindex Colorbar +@float +@image{../png/color_schemes, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ код} +@verbatim +mglData a(256,2); a.Fill(-1,1); +gr->SubPlot(2,10,0,0.2); gr->Dens(a,"kw", nan); +gr->Puts(mglPoint(-1.4, -0.3), "kw", "C", -8); +gr->SubPlot(2,10,1,0.2); gr->Dens(a,"wk", nan); +gr->Puts(mglPoint(-1.4, -0.3), "wk", "C", -8); +gr->SubPlot(2,10,2,0.2); gr->Dens(a,"kHCcw", nan); +gr->Puts(mglPoint(-1.4, -0.3), "kHCcw", "C", -8); +gr->SubPlot(2,10,3,0.2); gr->Dens(a,"kBbcw", nan); +gr->Puts(mglPoint(-1.4, -0.3), "kBbcw", "C", -8); +gr->SubPlot(2,10,4,0.2); gr->Dens(a,"kRryw", nan); +gr->Puts(mglPoint(-1.4, -0.3), "kRryw", "C", -8); +gr->SubPlot(2,10,5,0.2); gr->Dens(a,"kGgew", nan); +gr->Puts(mglPoint(-1.4, -0.3), "kGgew", "C", -8); +gr->SubPlot(2,10,6,0.2); gr->Dens(a,"BbwrR", nan); +gr->Puts(mglPoint(-1.4, -0.3), "BbwrR", "C", -8); +gr->SubPlot(2,10,7,0.2); gr->Dens(a,"BbwgG", nan); +gr->Puts(mglPoint(-1.4, -0.3), "BbwgG", "C", -8); +gr->SubPlot(2,10,8,0.2); gr->Dens(a,"GgwmM", nan); +gr->Puts(mglPoint(-1.4, -0.3), "GgwmM", "C", -8); +gr->SubPlot(2,10,9,0.2); gr->Dens(a,"UuwqR", nan); +gr->Puts(mglPoint(-1.4, -0.3), "UuwqR", "C", -8); +gr->SubPlot(2,10,10,0.2); gr->Dens(a,"QqwcC", nan); +gr->Puts(mglPoint(-1.4, -0.3), "QqwcC", "C", -8); +gr->SubPlot(2,10,11,0.2); gr->Dens(a,"CcwyY", nan); +gr->Puts(mglPoint(-1.4, -0.3), "CcwyY", "C", -8); +gr->SubPlot(2,10,12,0.2); gr->Dens(a,"bcwyr", nan); +gr->Puts(mglPoint(-1.4, -0.3), "bcwyr", "C", -8); +gr->SubPlot(2,10,13,0.2); gr->Dens(a,"bwr", nan); +gr->Puts(mglPoint(-1.4, -0.3), "bwr", "C", -8); +gr->SubPlot(2,10,14,0.2); gr->Dens(a,"BbcyrR", nan); +gr->Puts(mglPoint(-1.4, -0.3), "BbcyrR", "C", -8); +gr->SubPlot(2,10,15,0.2); gr->Dens(a,"UbcyqR", nan); +gr->Puts(mglPoint(-1.4, -0.3), "UbcyqR", "C", -8); +gr->SubPlot(2,10,16,0.2); gr->Dens(a,"BbcwyrR", nan); +gr->Puts(mglPoint(-1.4, -0.3), "BbcwyrR", "C", -8); +gr->SubPlot(2,10,17,0.2); gr->Dens(a,"bcyr", nan); +gr->Puts(mglPoint(-1.4, -0.3), "bcyr", "C", -8); +gr->SubPlot(2,10,18,0.2); gr->Dens(a,"BbcyrR|", nan); +gr->Puts(mglPoint(-1.4, -0.3), "BbcyrR|", "C", -8); +gr->SubPlot(2,10,19,0.2); gr->Dens(a,"bgr", nan); +gr->Puts(mglPoint(-1.4, -0.3), "bgr", "C", -8); +@end verbatim +@strong{MGL скрипт} +@end ifclear +@verbatim +new a 256 2: fill a 'x' +subplot 2 10 0 0.2:dens a 'kw' +text -1.4 -0.3 'kw' '' -8 +subplot 2 10 1 0.2:dens a 'wk' +text -1.4 -0.3 'wk' '' -8 +subplot 2 10 2 0.2:dens a 'kHCcw' +text -1.4 -0.3 'kHCcw' '' -8 +subplot 2 10 3 0.2:dens a 'kBbcw' +text -1.4 -0.3 'kBbcw' '' -8 +subplot 2 10 4 0.2:dens a 'kRryw' +text -1.4 -0.3 'kRryw' '' -8 +subplot 2 10 5 0.2:dens a 'kGgew' +text -1.4 -0.3 'kGgew' '' -8 +subplot 2 10 6 0.2:dens a 'BbwrR' +text -1.4 -0.3 'BbwrR' '' -8 +subplot 2 10 7 0.2:dens a 'BbwgG' +text -1.4 -0.3 'BbwgG' '' -8 +subplot 2 10 8 0.2:dens a 'GgwmM' +text -1.4 -0.3 'GgwmM' '' -8 +subplot 2 10 9 0.2:dens a 'UuwqR' +text -1.4 -0.3 'UuwqR' '' -8 +subplot 2 10 10 0.2:dens a 'QqwcC' +text -1.4 -0.3 'QqwcC' '' -8 +subplot 2 10 11 0.2:dens a 'CcwyY' +text -1.4 -0.3 'CcwyY' '' -8 +subplot 2 10 12 0.2:dens a 'bcwyr' +text -1.4 -0.3 'bcwyr' '' -8 +subplot 2 10 13 0.2:dens a 'bwr' +text -1.4 -0.3 'bwr' '' -8 +subplot 2 10 14 0.2:dens a 'BbcyrR' +text -1.4 -0.3 'BbcyrR' '' -8 +subplot 2 10 15 0.2:dens a 'UbcyqR' +text -1.4 -0.3 'UbcyqR' '' -8 +subplot 2 10 16 0.2:dens a 'BbcwyrR' +text -1.4 -0.3 'BbcwyrR' '' -8 +subplot 2 10 17 0.2:dens a 'bcyr' +text -1.4 -0.3 'bcyr' '' -8 +subplot 2 10 18 0.2:dens a 'BbcyrR|' +text -1.4 -0.3 'BbcyrR|' '' -8 +subplot 2 10 19 0.2:dens a 'bgr' +text -1.4 -0.3 'bgr' '' -8 +@end verbatim +@c ------------------------------------------------------------------ +@node Normal transparency, Glass-like transparency, Color schemes sample, Basic features +@subsection Обычная прозрачность +@cindex TranspType +@float +@image{../png/type0, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ код} +@verbatim +gr->Alpha(true); gr->Light(true); +mglData a(50,40); +a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); + +gr->TranspType = 0; gr->Clf(); +gr->SubPlot(2,2,0); gr->Rotate(40,60); gr->Surf(a); gr->Box(); +gr->SubPlot(2,2,1); gr->Rotate(40,60); gr->Dens(a); gr->Box(); +gr->SubPlot(2,2,2); gr->Rotate(40,60); gr->Cont(a); gr->Box(); +gr->SubPlot(2,2,3); gr->Rotate(40,60); gr->Axial(a); gr->Box(); +@end verbatim +@strong{MGL скрипт} +@end ifclear +@verbatim +alpha on: light on +new a 50 40 +modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' + +transptype 0: clf +subplot 2 2 0: rotate 40 60: surf a: box +subplot 2 2 1: rotate 40 60: dens a: box +subplot 2 2 2: rotate 40 60: cont a: box +subplot 2 2 3: rotate 40 60: axial a: box +@end verbatim +@c ------------------------------------------------------------------ +@node Glass-like transparency, Lamp-like transparency, Normal transparency, Basic features +@subsection "Стеклянная" прозрачность +@cindex TranspType +@float +@image{../png/type1, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ код} +@verbatim +gr->Alpha(true); gr->Light(true); +mglData a(50,40); +a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); + +gr->TranspType = 1; gr->Clf(); +gr->SubPlot(2,2,0); gr->Rotate(40,60); gr->Surf(a); gr->Box(); +gr->SubPlot(2,2,1); gr->Rotate(40,60); gr->Dens(a); gr->Box(); +gr->SubPlot(2,2,2); gr->Rotate(40,60); gr->Cont(a); gr->Box(); +gr->SubPlot(2,2,3); gr->Rotate(40,60); gr->Axial(a); gr->Box(); +@end verbatim +@strong{MGL скрипт} +@end ifclear +@verbatim +alpha on: light on +new a 50 40 +modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' + +transptype 1: clf +subplot 2 2 0: rotate 40 60: surf a: box +subplot 2 2 1: rotate 40 60: dens a: box +subplot 2 2 2: rotate 40 60: cont a: box +subplot 2 2 3: rotate 40 60: axial a: box +@end verbatim +@c ------------------------------------------------------------------ +@node Lamp-like transparency, , Glass-like transparency, Basic features +@subsection "Ламповая" прозрачность +@cindex TranspType +@float +@image{../png/type2, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} +@end float +@ifclear UDAV +@strong{C++ код} +@verbatim +gr->Alpha(true); gr->Light(true); +mglData a(50,40); +a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); + +gr->TranspType = 2; gr->Clf(); +gr->SubPlot(2,2,0); gr->Rotate(40,60); gr->Surf(a); gr->Box(); +gr->SubPlot(2,2,1); gr->Rotate(40,60); gr->Dens(a); gr->Box(); +gr->SubPlot(2,2,2); gr->Rotate(40,60); gr->Cont(a); gr->Box(); +gr->SubPlot(2,2,3); gr->Rotate(40,60); gr->Axial(a); gr->Box(); +@end verbatim +@strong{MGL скрипт} +@end ifclear @verbatim -a = mglData("hotdogs.pts"); -a.Norm(-1,1,True); -gr.Rotate(40,60); gr.Light(True); -gr.Box(); -gr.Dots(a); +alpha on: light on +new a 50 40 +modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' + +transptype 2: clf +subplot 2 2 0: rotate 40 60: surf a: box +subplot 2 2 1: rotate 40 60: dens a: box +subplot 2 2 2: rotate 40 60: cont a: box +subplot 2 2 3: rotate 40 60: axial a: box @end verbatim + + + + + + @c ------------------------------------------------------------------ -@node Additional features, Advanced features, Dual plotting samples, Samples +@node Additional features, Advanced features, Basic features, Samples @section Дополнительные возможности - @menu * Legend sample:: * Adding mesh sample:: @@ -4452,19 +5426,17 @@ gr.Dots(a); * Drops sample:: * Molecules drawing sample:: @end menu - @c ------------------------------------------------------------------ @node Legend sample, Adding mesh sample,, Additional features @subsection Legend -- пример использования @cindex Plot @cindex Legend @cindex AddLegend - @float -@image{png/legend, 7cm} -@caption{Example of Legend usage. @tdref{legend}} +@image{../png/legend, 7cm} +@c @caption{Example of Legend usage. @tdref{legend}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData f(50,3); @@ -4479,12 +5451,12 @@ gr->AddLegend("sin(\\pi \\sqrt{\\a x})","r+"); gr->Legend(); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new f 50 3 modify f 'sin(2*pi*x*x)' modify f 'sin(2*pi*x)' 1 modify f 'sin(2*pi*sqrt(x))' 2 - axis 0 -1 1 1 box plot f @@ -4494,6 +5466,7 @@ addlegend 'sin(\pi x)' 'g*' addlegend 'sin(\pi \sqrt{\a x})' 'r+' legend @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT f = mgl_create_data_size(50,3,1); @@ -4517,7 +5490,6 @@ f = mgl_create_data_size(50,3,1) call mgl_data_modify(f,'sin(2*pi*x*x)',0) call mgl_data_modify(f,'sin(2*pi*x)',1) call mgl_data_modify(f,'sin(2*pi*sqrt(x))',2) - call mgl_set_axis(gr, 0.,-1.,0., 1.,1.,1., 0.,0.,0.) call mgl_box(gr,1) call mgl_plot(gr,f,'') @@ -4538,7 +5510,7 @@ gr.AddLegend("sin(\\pi x)","g*"); gr.AddLegend("sin(\\pi\\sqrt{\\a x})","r+"); gr.Legend(); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Adding mesh sample, Surf & Cont sample, Legend sample, Additional features @subsection Добавляем сетку @@ -4547,19 +5519,17 @@ gr.Legend(); @cindex Dens @cindex Cont @cindex Axial - @float -@image{png/samplea, 7cm} -@caption{Example of adding mesh. @tdref{samplea}} +@image{../png/samplea, 7cm} +@c @caption{Example of adding mesh. @tdref{samplea}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); gr->Light(true); gr->Alpha(true); - gr->SubPlot(2,2,0); gr->Rotate(40,60); gr->Surf(a,"BbcyrR#"); gr->Box(); gr->SubPlot(2,2,1); gr->Rotate(40,60); @@ -4570,13 +5540,12 @@ gr->SubPlot(2,2,3); gr->Rotate(40,60); gr->Axial(a,"BbcyrR#"); gr->Box(); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - alpha on light on - subplot 2 2 0 rotate 40 60 surf a 'BbcyrR#' @@ -4594,13 +5563,13 @@ rotate 40 60 axial a 'BbcyrR#' box @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); mgl_set_alpha(gr,1); mgl_set_light(gr,1); - mgl_subplot(gr,2,2,0); mgl_rotate(gr,40.,60.,0.); mgl_surf(gr,a,"BbcyrR#"); mgl_box(gr,1); mgl_subplot(gr,2,2,1); mgl_rotate(gr,40.,60.,0.); @@ -4620,7 +5589,6 @@ a = mgl_create_data_size(50,40,1) call mgl_data_modify(a,'0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))',0) call mgl_set_alpha(gr,1) call mgl_set_light(gr,1) - call mgl_subplot(gr,2,2,0) call mgl_rotate(gr,40.,60.,0.) call mgl_surf(gr,a,'BbcyrR#') @@ -4653,24 +5621,21 @@ gr.Rotate(40,60); gr.Cont(a,"BbcyrR#"); gr.Box(); gr.SubPlot(2,2,3); gr.Rotate(40,60); gr.Axial(a,"BbcyrR#"); gr.Box(); @end verbatim - - +@end ifclear @c ------------------------------------------------------------------ @node Surf & Cont sample, Flow & Dens sample, Adding mesh sample, Additional features @subsection Surf & Cont -- пример использования @cindex Surf @cindex Cont - @float -@image{png/surf_cont_y, 7cm} -@caption{Example of Surf & Cont. @tdref{surf_cont_y}} +@image{../png/surf_cont_y, 7cm} +@c @caption{Example of Surf & Cont. @tdref{surf_cont_y}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Box(); @@ -4678,21 +5643,21 @@ gr->Surf(a); gr->Cont(a,"y"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on box surf a cont a 'y' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -4707,7 +5672,6 @@ real zero, nan zero = 0; nan = zero/zero a = mgl_create_data_size(50,40,1) call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0) - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -4723,18 +5687,17 @@ gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Surf(a); gr.Cont(a,"y"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Flow & Dens sample, Several light sample, Surf & Cont sample, Additional features @subsection Flow & Dens -- пример использования @cindex Flow @cindex Dens - @float -@image{png/flow_dens, 7cm} -@caption{Example of Flow & Dens. @tdref{flow_dens}} +@image{../png/flow_dens, 7cm} +@c @caption{Example of Flow & Dens. @tdref{flow_dens}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(50,40), b(50,40), d(a); @@ -4745,6 +5708,7 @@ gr->Box(); gr->Flow(a,b,"br"); gr->Dens(d,"BbcyrR"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 50 40 new b 50 40 @@ -4756,6 +5720,7 @@ box flow a b 'br' dens d 'BbcyrR' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a, b, d; @@ -4765,7 +5730,6 @@ d = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); mgl_data_modify(d,"sqrt(v^2+w^2)",a,b); - mgl_box(gr,1); mgl_flow_2d(gr,a,b,"br",5,1,0.); mgl_dens(gr,d,"BbcyrR",-1.); @@ -4780,7 +5744,6 @@ d = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); call mgl_data_modify(b,"0.6*cos(2*pi*x)*cos(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); call mgl_data_modify(d,"sqrt(v^2+w^2)",a,b); - call mgl_box(gr,1) call mgl_flow_2d(gr,a,b,'br',5,1,0.) call mgl_dens(gr,d,'BbcyrR',-1.); @@ -4797,23 +5760,21 @@ d.Modify("sqrt(v^2+w^2)",a,b); gr.Box(); gr.Flow(a,b,"br"); gr.Dens(d,"BbcyrR"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Several light sample, Mirrored surface sample, Flow & Dens sample, Additional features @subsection Несколько источников света @cindex Surf @cindex Light - @float -@image{png/several_light, 7cm} -@caption{Example of Surf with several light. @tdref{several_light}} +@image{../png/several_light, 7cm} +@c @caption{Example of Surf with several light. @tdref{several_light}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(50,40); a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); - gr->Rotate(40,60); gr->Light(true); gr->Light(1,mglPoint(0,1,0),'c'); @@ -4823,30 +5784,28 @@ gr->Box(); gr->Surf(a,"h"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' - rotate 40 60 light on light 1 0 1 0 'c' light 2 1 0 0 'y' light 3 0 -1 0 'm' - box surf a 'h' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(50,40,1); mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_add_light_rgb(gr,1,0.,1.,0.,1, 0.,1.,1.,0.5); mgl_add_light_rgb(gr,2,1.,0.,0.,1, 1.,1.,0.,0.5); mgl_add_light_rgb(gr,3,0.,-1.,0.,1, 1.,0.,1.,0.5); - mgl_box(gr,1); mgl_surf(gr,a,"h"); mgl_delete_data(a); @@ -4856,13 +5815,11 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_add_light_rgb(gr,1,0.,1.,0.,1, 0.,1.,1.,0.5) call mgl_add_light_rgb(gr,2,1.,0.,0.,1, 1.,1.,0.,0.5) call mgl_add_light_rgb(gr,3,0.,-1.,0.,1, 1.,0.,1.,0.5) - call mgl_box(gr,1) call mgl_surf(gr,a,'h') call mgl_delete_data(a) @@ -4878,33 +5835,31 @@ gr.AddLight(3,0,-1,0,"m"); gr.Box(); gr.Surf(a,"h") @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Mirrored surface sample, Cont with labels sample, Several light sample, Additional features @subsection Отражение поверхности @cindex Surf - @float -@image{png/mirror, 7cm} -@caption{Example of mirrored surface. @tdref{mirror}} +@image{../png/mirror, 7cm} +@c @caption{Example of mirrored surface. @tdref{mirror}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(30,40),x(30),y1(40),y2(40); a.Modify("pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)"); x.Fill(-1,1); y1.Fill(0,1); y2.Fill(0,-1); - gr->Rotate(40,60); gr->Light(true); gr->Box(); gr->Surf(x,y1,a,"r"); gr->Surf(x,y2,a,"b"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 30 40 modify a 'pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)' - rotate 40 60 light on surf a 'r'; yrange 0 1 @@ -4918,13 +5873,13 @@ var x 30 -1 1 var y1 40 0 1 var y2 40 0 -1 modify a 'pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)' - rotate 40 60 light on surf x y1 a 'r' surf x y2 a 'b' box @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a,x,y1,y2; @@ -4936,7 +5891,6 @@ mgl_data_modify(a,"pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)",0); mgl_data_fill(x,-1.,1.,'x'); mgl_data_fill(y1,0.,1.,'x'); mgl_data_fill(y2,0.,-1.,'x'); - mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_box(gr,1); @@ -4955,7 +5909,6 @@ call mgl_data_modify(a,'pi*(1-2*x)*exp(-4*y^2-4*(2*x-1)^2)',0) call mgl_data_fill(x,-1.,1.,'x') call mgl_data_fill(y1,0.,1.,'x') call mgl_data_fill(y2,0.,-1.,'x') - call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_box(gr,1) @@ -4974,17 +5927,16 @@ x.Fill(-1,1); y1.Fill(0,1); y2.Fill(0,-1); gr.Rotate(40,60); gr.Light(True); gr.Box(); gr.Surf(x,y1,a,"r"); gr.Surf(x,y2,a,"b"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Cont with labels sample, Ternary plot sample, Mirrored surface sample, Additional features @subsection Cont и подписи -- пример использования @cindex Cont - @float -@image{png/contt, 7cm} -@caption{Example of Cont with labels. @tdref{contt}} +@image{../png/contt, 7cm} +@c @caption{Example of Cont with labels. @tdref{contt}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(50,40); @@ -4993,12 +5945,14 @@ gr->Box(); gr->Cont(a,"BbcyrRt"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 50 40 modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' box cont a 'BbcyrRt' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(50,40,1); @@ -5012,7 +5966,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(50,40,1); call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); - call mgl_box(gr,1) call mgl_cont(gr,a,'BbcyrRt',7,0) call mgl_delete_data(a) @@ -5024,18 +5977,16 @@ a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))"); gr.Box(); gr.Cont(a,"BbcyrRt"); @end verbatim - - +@end ifclear @c ------------------------------------------------------------------ @node Ternary plot sample, Coloring by coordinates sample, Cont with labels sample, Additional features @subsection Ternary plot -- пример использования @cindex Ternary - @float -@image{png/ternary, 7cm} -@caption{Example of Ternary plot. @tdref{ternary}} +@image{../png/ternary, 7cm} +@c @caption{Example of Ternary plot. @tdref{ternary}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData x(50),y(50),rx(10),ry(10), a(20,30); @@ -5043,7 +5994,6 @@ a.Modify("4*x*y"); x.Modify("0.25*(1+cos(2*pi*x))"); y.Modify("0.25*(1+sin(2*pi*x))"); rx.Modify("rnd"); ry.Modify("(1-v)*rnd",rx); - gr->Text(mglPoint(-0.8,1.3), "Ternary plot (x+y+t=1)"); gr->Ternary(true); gr->Plot(x,y,"r2"); @@ -5056,6 +6006,7 @@ gr->Label('y',"y comp."); gr->Label('t',"t comp."); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new rx 10 new ry 10 @@ -5079,6 +6030,7 @@ xlabel 'x comp.' ylabel 'y comp.' tlabel 't comp.' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT x,y,rx,ry,a; @@ -5092,13 +6044,11 @@ mgl_data_modify(y,"0.25*(1+sin(2*pi*x))",0); mgl_data_modify(rx,"rnd",0); mgl_data_modify_vw(ry,"(1-v)*rnd",rx,0); mgl_data_modify(a,"4*x*y",0); - mgl_puts_ext(gr,-0.8,1.3,0.,"Ternary plot (x+y+t=1)","C",-1.4,'t'); mgl_set_ternary(gr,1); mgl_plot_xy(gr,x,y,"r2"); mgl_plot_xy(gr,rx,ry,"q^ "); mgl_cont(gr,a,"",7,0.); - mgl_line(gr,0.5,0.,0.,0.,0.75,0.,"g2",2); mgl_axis(gr,"xyz"); mgl_axis_grid(gr,"xyz","B:"); @@ -5122,13 +6072,11 @@ call mgl_data_modify(y,'0.25*(1+sin(2*pi*x))',0) call mgl_data_modify(rx,'rnd',0) call mgl_data_modify_vw(ry,'(1-v)*rnd',rx,rx) call mgl_data_modify(a,'4*x*y',0) - call mgl_puts_ext(gr,-0.8,1.3,0.,'Ternary plot (x+y+t=1)','C',-1.4,'t') call mgl_set_ternary(gr,1) call mgl_plot_xy(gr,x,y,'r2') call mgl_plot_xy(gr,rx,ry,'q^ ') call mgl_cont(gr,a,'',7,0.) - call mgl_line(gr,0.5,0.,0.,0.,0.75,0.,'g2',2) call mgl_axis(gr,'xyz') call mgl_axis_grid(gr,'xyz','B:') @@ -5156,40 +6104,38 @@ gr.Label("x","x comp."); gr.Label("y","y comp."); gr.Label("t","t comp."); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Coloring by coordinates sample, Drops sample, Ternary plot sample, Additional features @subsection Окрашивание по положению грани @cindex Surf3 - @float -@image{png/surf3_rgbd, 7cm} -@caption{Example of Surf3 colored by coordinates. @tdref{surf3_rgbd}} +@image{../png/surf3_rgbd, 7cm} +@c @caption{Example of Surf3 colored by coordinates. @tdref{surf3_rgbd}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(60,50,40); a.Modify("-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)"); - gr->Rotate(40,60); gr->Box(); gr->Surf3(a,"bgrd"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 60 50 40 modify a '-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)' - rotate 40 60 box surf3 a 'bgrd' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(60,50,40); mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - mgl_rotate(gr,40.,60.,0.); mgl_box(gr,1); mgl_surf3(gr,a,"bgrd",3); @@ -5200,7 +6146,6 @@ mgl_delete_data(a); integer a, mgl_create_data_size a = mgl_create_data_size(60,50,40); call mgl_data_modify(a,"-2*((2*x-1)^2 + (2*y-1)^2 + (2*z-1)^4 - (2*z-1)^2 - 0.1)",0); - call mgl_rotate(gr,40.,60.,0.) call mgl_box(gr,1) call mgl_surf3(gr,a,'bgrd',3) @@ -5213,17 +6158,16 @@ a.Modify("-2*((2*x-1)^2+(2*y-1)^2+(2*z-1)^4-(2*z-1)^2-0.1)"); gr.Rotate(40,60); gr.Box(); gr.Surf3(a,"bgrd"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Drops sample, Molecules drawing sample, Coloring by coordinates sample, Additional features @subsection Drops -- пример использования @cindex Drop - @float -@image{png/drops, 7cm} -@caption{Example of Drop(s). @tdref{drops}} +@image{../png/drops, 7cm} +@c @caption{Example of Drop(s). @tdref{drops}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim gr->Light(true); @@ -5242,6 +6186,7 @@ gr->Ball(mglPoint(1,0,1),'k'); gr->Line(mglPoint(-1,0,1),mglPoint(1,0,1),"b"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim light on text -1 1.2 'sh=0' @@ -5257,12 +6202,12 @@ ball -0.33 0 1 'k' ball 0.33 0 1 'k' ball 1 0 1 'k' line -1 0 1 1 0 1 'b' - new h 100 modify h '0.25*(1+x)^2' plot h 'k|' text -1 0.6 'h\sim(1+sh)^2' 'rL' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim mgl_set_light(gr,1); @@ -5312,22 +6257,20 @@ gr.Ball(-1,0,1,"k"); gr.Ball(-0.33,0,1,"k"); gr.Ball(0.33,0,1,"k"); gr.Ball(1,0,1,"k"); gr.Line(-1,0,1,1,0,1,"b"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Molecules drawing sample,, Drops sample, Additional features @subsection Рисование молекул @cindex Drop @cindex Sphere - @float -@image{png/molecule, 7cm} -@caption{Example of molecules drawing. @tdref{molecule}} +@image{../png/molecule, 7cm} +@c @caption{Example of molecules drawing. @tdref{molecule}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim gr->Alpha(true); gr->Light(true); - gr->SubPlot(2,2,0); gr->Text(mglPoint(0,1.2),"Methane, CH_4",0,-3); gr->Rotate(60,120); gr->Sphere(mglPoint(0,0,0),0.25,"k"); @@ -5339,7 +6282,6 @@ gr->Drop(mglPoint(0,0,0),mglPoint(0.47,0.82,-0.33),0.35,"h",1,2); gr->Sphere(mglPoint(0.33,0.57,-0.23),0.25,"g"); gr->Drop(mglPoint(0,0,0),mglPoint(0.47,-0.82,-0.33),0.35,"h",1,2); gr->Sphere(mglPoint(0.33,-0.57,-0.23),0.25,"g"); - gr->SubPlot(2,2,1); gr->Text(mglPoint(0,1.2),"Water, H{_2}O",0,-3); gr->Rotate(60,100); gr->Sphere(mglPoint(0,0,0),0.25,"r"); @@ -5347,14 +6289,12 @@ gr->Drop(mglPoint(0,0,0),mglPoint(0.3,0.5,0),0.3,"m",1,2); gr->Sphere(mglPoint(0.3,0.5,0),0.25,"g"); gr->Drop(mglPoint(0,0,0),mglPoint(0.3,-0.5,0),0.3,"m",1,2); gr->Sphere(mglPoint(0.3,-0.5,0),0.25,"g"); - gr->SubPlot(2,2,2); gr->Text(mglPoint(0,1.2),"Oxygen, O_2",0,-3); gr->Rotate(60,120); gr->Drop(mglPoint(0,0.5,0),mglPoint(0,-0.3,0),0.3,"m",1,2); gr->Sphere(mglPoint(0,0.5,0),0.25,"r"); gr->Drop(mglPoint(0,-0.5,0),mglPoint(0,0.3,0),0.3,"m",1,2); gr->Sphere(mglPoint(0,-0.5,0),0.25,"r"); - gr->SubPlot(2,2,3); gr->Text(mglPoint(0,1.2),"Ammonia, NH_3",0,-3); gr->Rotate(60,120); gr->Sphere(mglPoint(0,0,0),0.25,"b"); @@ -5366,10 +6306,10 @@ gr->Drop(mglPoint(0,0,0),mglPoint(-0.65,0,0),0.32,"n",1,2); gr->Sphere(mglPoint(-0.65,0,0),0.25,"g"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim alpha on light on - subplot 2 2 0 text 0 1.2 'Methane, CH_4' '' -3 rotate 60 120 @@ -5382,7 +6322,6 @@ drop 0 0 0 0.47 0.82 -0.33 0.35 'h' 1 2 sphere 0.33 0.57 -0.23 0.25 'g' drop 0 0 0 0.47 -0.82 -0.33 0.35 'h' 1 2 sphere 0.33 -0.57 -0.23 0.25 'g' - subplot 2 2 1 text 0 1.2 'Water, H{_2}O' '' -3 rotate 60 100 @@ -5391,7 +6330,6 @@ drop 0 0 0 0.3 0.5 0 0.3 'm' 1 2 sphere 0.3 0.5 0 0.25 'g' drop 0 0 0 0.3 -0.5 0 0.3 'm' 1 2 sphere 0.3 -0.5 0 0.25 'g' - subplot 2 2 2 text 0 1.2 'Oxygen, O_2' '' -3 rotate 60 120 @@ -5399,7 +6337,6 @@ drop 0 0.5 0 0 -0.3 0 0.3 'm' 1 2 sphere 0 0.5 0 0.25 'r' drop 0 -0.5 0 0 0.3 0 0.3 'm' 1 2 sphere 0 -0.5 0 0.25 'r' - subplot 2 2 3 text 0 1.2 0 'Ammonia, NH_3' '' -3 rotate 60 120 @@ -5411,23 +6348,9 @@ sphere 0.33 -0.57 0 0.25 'g' drop 0 0 0 -0.65 0 0 0.32 'n' 1 2 sphere -0.65 0 0 0.25 'g' @end verbatim -@c @strong{C-ый код} -@c @verbatim -@c TO BE DONE -@c @end verbatim -@c @strong{Fortran} -@c @verbatim -@c TO BE DONE -@c @end verbatim -@c @strong{Python} -@c @verbatim -@c TO BE DONE -@c @end verbatim - @c ------------------------------------------------------------------ @node Advanced features,, Additional features, Samples @section "Продвинутые" возможности - @c ------------------------------------------------------------------ @menu * Curvelinear coorinates sample:: @@ -5444,38 +6367,33 @@ sphere -0.65 0 0 0.25 'g' * Manual ticks sample:: * ColumnPlot sample:: * StickPlot sample:: +* Stereo image sample:: @end menu - @node Curvelinear coorinates sample, 2-axes sample,, Advanced features @subsection Криволинейные координаты @cindex Axis - @float -@image{png/sample3, 7cm} -@caption{Example of curvelinear coorinates usage. @tdref{sample3}} +@image{../png/sample3, 7cm} +@c @caption{Example of curvelinear coorinates usage. @tdref{sample3}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim gr->Org = mglPoint(-1,1,-1); - gr->SubPlot(2,2,0); gr->Rotate(60,40); gr->Line(mglPoint(-1,0.5,0),mglPoint(1,0.5,0),"r2",100); gr->Axis(); gr->Grid(); gr->Text(mglPoint(0,1.3,1),"Cartesian"); - gr->SubPlot(2,2,1); gr->Rotate(60,40); gr->SetFunc("y*sin(pi*x)","y*cos(pi*x)"); gr->Line(mglPoint(-1,0.5,0),mglPoint(1,0.5,0),"r2",100); gr->Axis(); gr->Grid(); gr->Text(mglPoint(0,1.3,1),"Cylindrical"); - gr->SubPlot(2,2,2); gr->Rotate(60,40); gr->SetFunc("2*y*x","y*y - x*x"); gr->Line(mglPoint(-1,0.5,0),mglPoint(1,0.5,0),"r2",100); gr->Axis(); gr->Grid(); gr->Text(mglPoint(0,1.3,1),"Parabolic"); - gr->SubPlot(2,2,3); gr->Rotate(60,40); gr->SetFunc("y*sin(pi*x)","y*cos(pi*x)","x+z"); gr->Line(mglPoint(-1,0.5,0),mglPoint(1,0.5,0),"r2",100); @@ -5484,16 +6402,15 @@ gr->Text(mglPoint(0,1.3,1),"Spiral"); gr->Axis(0,0,0); // set to default Cartesian @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim origin -1 1 -1 - subplot 2 2 0 rotate 60 40 line -1 0.5 0 1 0.5 0 'r2' axis grid text 0 1.3 1 'Cartesian' - subplot 2 2 1 rotate 60 40 axis 'y*sin(pi*x)' 'y*cos(pi*x)' '' @@ -5501,7 +6418,6 @@ line -1 0.5 0 1 0.5 0 'r2' axis grid text 0 1.3 1 'Cylindrical' - subplot 2 2 2 rotate 60 40 axis '2*y*x' 'y*y - x*x' '' @@ -5509,7 +6425,6 @@ line -1 0.5 0 1 0.5 0 'r2' axis grid text 0 1.3 1 'Parabolic' - subplot 2 2 3 rotate 60 40 axis 'y*sin(pi*x)' 'y*cos(pi*x)' 'x+z' @@ -5519,6 +6434,7 @@ grid text 0 1.3 1 'Spiral' axis '' '' '' # set to default Cartesian @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim mgl_set_origin(gr,-1,1,-1); @@ -5526,19 +6442,16 @@ mgl_subplot(gr,2,2,0); mgl_rotate(gr,60,40,0); mgl_line(gr,-1,0.5,0,1,0.5,0,"r2",100); mgl_axis(gr,"xyz"); mgl_axis_grid(gr,"xyz","B"); mgl_text(gr,0,1.3,1,"Cartesian"); - mgl_subplot(gr,2,2,1); mgl_rotate(gr,60,40,0); mgl_set_func(gr,"y*sin(pi*x)","y*cos(pi*x)",0); mgl_line(gr,-1,0.5,0,1,0.5,0,"r2",100); mgl_axis(gr,"xyz"); mgl_axis_grid(gr,"xyz","B"); mgl_text(gr,0,1.3,1,"Cylindrical"); - mgl_subplot(gr,2,2,2); mgl_rotate(gr,60,40,0); mgl_set_func(gr,"2*y*x","y*y - x*x",""); mgl_line(gr,-1,0.5,0,1,0.5,0,"r2",100); mgl_axis(gr,"xyz"); mgl_axis_grid(gr,"xyz","B"); mgl_text(gr,0,1.3,1,"Parabolic"); - mgl_subplot(gr,2,2,3); mgl_rotate(gr,60,40,0); mgl_set_func(gr,"y*sin(pi*x)","y*cos(pi*x)","x+z"); mgl_line(gr,-1,0.5,0,1,0.5,0,"r2",100); @@ -5549,14 +6462,12 @@ mgl_set_func(gr,0,0,0); /* set to default Cartesian */ @strong{Fortran} @verbatim call mgl_set_origin(gr,-1.,1.,-1.) - call mgl_subplot(gr,2,2,0) call mgl_rotate(gr,60.,40.,0.) call mgl_line(gr,-1.,0.5,0.,1.,0.5,0.,'r2',100) call mgl_axis(gr,'xyz') call mgl_axis_grid(gr,'xyz','B') call mgl_text(gr,0.,1.3,1.,'Cartesian') - call mgl_subplot(gr,2,2,1) call mgl_rotate(gr,60.,40.,0.) call mgl_set_func(gr,'y*sin(pi*x)','y*cos(pi*x)','') @@ -5564,7 +6475,6 @@ call mgl_line(gr,-1.,0.5,0.,1.,0.5,0.,'r2',100) call mgl_axis(gr,'xyz') call mgl_axis_grid(gr,'xyz','B') call mgl_text(gr,0.,1.3,1.,'Cylindrical') - call mgl_subplot(gr,2,2,2) call mgl_rotate(gr,60.,40.,0.) call mgl_set_func(gr,'2*y*x','y*y - x*x','') @@ -5572,7 +6482,6 @@ call mgl_line(gr,-1.,0.5,0.,1.,0.5,0.,'r2',100) call mgl_axis(gr,'xyz') call mgl_axis_grid(gr,'xyz','B') call mgl_text(gr,0.,1.3,1.,"Parabolic") - call mgl_subplot(gr,2,2,3) call mgl_rotate(gr,60.,40.,0.) call mgl_set_func(gr,'y*sin(pi*x)','y*cos(pi*x)','x+z') @@ -5585,24 +6494,20 @@ call mgl_set_func(gr,'','','') ! set to default Cartesian @strong{Python} @verbatim gr.SetOrigin(-1,1,-1); - gr.SubPlot(2,2,0); gr.Rotate(60,40); gr.Line(-1,0.5,0,1,0.5,0,"r2",100); gr.Axis(); gr.Grid(); gr.Puts(0,1.3,1,"Gartesian","rC",-1.5); - gr.SubPlot(2,2,1); gr.Rotate(60,40); gr.SetFunc("y*sin(pi*x)","y*cos(pi*x)"); gr.Line(-1,0.5,0,1,0.5,0,"r2",100); gr.Axis(); gr.Grid(); gr.Puts(0,1.3,1,"Cylindrical","rC",-1.5); - gr.SubPlot(2,2,2); gr.Rotate(60,40); gr.SetFunc("2*y*x","y*y-x*x"); gr.Line(-1,0.5,0,1,0.5,0,"r2",100); gr.Axis(); gr.Grid(); gr.Puts(0,1.3,1,"Parabolic","rC",-1.5); - gr.SubPlot(2,2,3); gr.Rotate(60,40); gr.SetFunc("y*sin(pi*x)","y*cos(pi*x)","x+z"); gr.Line(-1,0.5,0,1,0.5,0,"r2",100); @@ -5610,17 +6515,16 @@ gr.Axis(); gr.Grid(); gr.Puts(0,1.3,1,"Spiral","rC",-1.5); gr.SetFunc("",""); # set to default Gartesian @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node 2-axes sample, Semi-log sample, Curvelinear coorinates sample, Advanced features @subsection Несколько осей на одном графике @cindex Axis - @float -@image{png/2_axis, 7cm} -@caption{Example of 2 axes on the plot. @tdref{2_axis}} +@image{../png/2_axis, 7cm} +@c @caption{Example of 2 axes on the plot. @tdref{2_axis}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData y1(50), y2(50); @@ -5633,6 +6537,7 @@ gr->Axis(); gr->Label('y',"axis 2",0); gr->Stem(y2,"r"); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new y1 50 new y2 50 @@ -5649,6 +6554,7 @@ axis ylabel 'axis 2' 0 stem y2 'r' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT y1 = mgl_create_data_size(50,1,1); @@ -5660,7 +6566,6 @@ mgl_set_origin(gr,-1.,-1.,-1.); mgl_axis(gr,"xyz"); mgl_label_ext(gr,'y',"axis 1",0,-1.4,0.); mgl_plot(gr,y1,"b"); - mgl_set_axis_2d(gr,0.,0.,1.,1.); mgl_set_origin(gr,1.,1.,1.); mgl_axis(gr,"xyz"); @@ -5679,7 +6584,6 @@ call mgl_set_origin(gr,-1.,-1.,-1.) call mgl_axis(gr,'xyz') call mgl_label_ext(gr,'y','axis 1',0,-1.4,0.) call mgl_plot(gr,y1,'b') - call mgl_set_axis_2d(gr,0.,0.,1.,1.) call mgl_set_origin(gr,1.,1.,1.) call mgl_axis(gr,'xyz') @@ -5693,49 +6597,44 @@ y1.Modify("0.3*sin(2*pi*x)"); y2.Modify("0.5+0.3*cos(2*pi*x)"); gr.SetRanges(-1,1,-1,1); gr.SetOrigin(-1,-1); gr.Axis(); gr.Label("y","axis 1",0); gr.Plot(y1,"b"); - gr.SetRanges(0,1,0,1); gr.SetOrigin(1,1); gr.Axis(); gr.Label("y","axis 2",0); gr.Stem(y2,"r"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Semi-log sample, Log-log sample, 2-axes sample, Advanced features @subsection Semi-log -- пример использования @cindex Axis @cindex SetTicks @cindex Plot - @float -@image{png/semilog, 7cm} -@caption{Example of semi-log plot. @tdref{semilog}} +@image{../png/semilog, 7cm} +@c @caption{Example of semi-log plot. @tdref{semilog}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData x(2000), y(2000); x.Modify("0.01/(x+10^(-5))"); y.Modify("sin(1/v)",x); - gr->Axis(mglPoint(0.01,-1),mglPoint(1000,1),mglPoint(0.01,-1)); gr->SetFunc("lg(x)",0); gr->SetTicks('x',0); - gr->Box(); gr->Plot(x,y,"b2"); gr->Axis(); gr->Grid("xy","g"); gr->Label('x',"x",0); gr->Label('y', "y = sin 1/x",0); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new x 2000 new y 2000 modify x '0.01/(x+10^(-5))' modify y 'sin(1/v)' x - xrange 0.01 1000 origin 0.01 -1 0 xtick 0 axis 'lg(x)' '' '' - plot x y 'b2' axis grid 'xy' 'g' @@ -5743,17 +6642,16 @@ xlabel 'x' 0 ylabel 'y = sin 1/x' 0 box @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT x = mgl_create_data_size(2000,1,1); HMDT y = mgl_create_data_size(2000,1,1); mgl_data_modify(x,"0.01/(x+10^(-5))",0); mgl_data_modify_vw(y,"sin(1/v)",x,0); - mgl_set_axis(gr,0.01,-1.,0.,1000.,1.,0.,0.01,-1.,0.); mgl_set_func(gr,"lg(x)",0,0); mgl_set_ticks(gr,0.,-5.,-5.); - mgl_box(gr,1); mgl_plot_xy(gr,x,y,"b2"); mgl_axis(gr,"xy"); mgl_axis_grid(gr,"xy","g"); @@ -5768,11 +6666,9 @@ x = mgl_create_data_size(2000,1,1) y = mgl_create_data_size(2000,1,1) call mgl_data_modify(x,'0.01/(x+10^(-5))',0) call mgl_data_modify_vw(y,'sin(1/v)',x,x) - call mgl_set_axis(gr,0.01,-1.,0.,1000.,1.,0.,0.01,-1.,0.) call mgl_set_func(gr,'lg(x)','','') call mgl_set_ticks(gr,0.,-5.,-5.) - call mgl_box(gr,1) call mgl_plot_xy(gr,x,y,'b2') call mgl_axis(gr,'xy') @@ -5786,45 +6682,41 @@ call mgl_delete_data(y) @verbatim TO BE DONE @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Log-log sample, Fitting sample, Semi-log sample, Advanced features @subsection Log-log -- пример использования @cindex Axis @cindex SetTicks @cindex Plot - @float -@image{png/loglog, 7cm} -@caption{Example of log-log plot. @tdref{loglog}} +@image{../png/loglog, 7cm} +@c @caption{Example of log-log plot. @tdref{loglog}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData x(100), y(100); x.Modify("pow(10,6*x-3)"); y.Modify("sqrt(1+v^2)",x); - gr->Axis(mglPoint(0.001,0.1),mglPoint(1000,1000),mglPoint(0.001,0.1)); gr->SetFunc("lg(x)","lg(y)"); gr->SetTicks('x',0); gr->SetTicks('y',0); - gr->Box(); gr->Plot(x,y,"b2"); gr->Axis(); gr->Grid("xy","g;"); gr->Label('x',"x",0); gr->Label('y', "y=\\sqrt{1+x^2}",0); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new x 100 new y 100 modify x 'pow(10,6*x-3)' modify y 'sqrt(1+v^2)' x - axis 0.001 0.1 1000 1000 xtick 0 ytick 0 axis 'lg(x)' 'lg(y)' '' - plot x y 'b2' axis grid 'xy' 'g;' @@ -5832,17 +6724,16 @@ xlabel 'x' 0 ylabel 'y=\sqrt{1+x^2}' 0 box @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT x = mgl_create_data_size(100,1,1); HMDT y = mgl_create_data_size(100,1,1); mgl_data_modify(x,"pow(10,6*x-3)",0); mgl_data_modify_vw(y,"sqrt(1+v^2)",x,0); - mgl_set_axis(gr,0.001,0.1,0.,1000.,1000.,0.,0.001,0.1,0.); mgl_set_func(gr,"lg(x)","lg(y)",0); mgl_set_ticks(gr,0.,0.,-5.); - mgl_box(gr,1); mgl_plot_xy(gr,x,y,"b2"); mgl_axis(gr,"xy"); mgl_axis_grid(gr,"xy","g;"); @@ -5857,11 +6748,9 @@ x = mgl_create_data_size(100,1,1) y = mgl_create_data_size(100,1,1) call mgl_data_modify(x,'pow(10,6*x-3)',0) call mgl_data_modify_vw(y,'sqrt(1+v^2)',x,x) - call mgl_set_axis(gr,0.001,0.1,0.,1000.,1000.,0.,0.001,0.1,0.) call mgl_set_func(gr,'lg(x)','lg(y)','') call mgl_set_ticks(gr,0.,0.,-5.) - call mgl_box(gr,1) call mgl_plot_xy(gr,x,y,'b2') call mgl_axis(gr,'xy') @@ -5882,28 +6771,25 @@ gr.Box(); gr.Plot(x,y,"b2"); gr.Axis(); gr.Grid("xy","g;"); gr.Label("x","x",0); gr.Label("y","y=\\sqrt{1+x^2}",0); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Fitting sample, Envelop sample, Log-log sample, Advanced features @subsection Fitting -- пример использования @cindex Fit @cindex PutsFit - @float -@image{png/fit, 7cm} -@caption{Example of nonlinear fitting. @tdref{fit}} +@image{../png/fit, 7cm} +@c @caption{Example of nonlinear fitting. @tdref{fit}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData rnd(100), in(100), res; rnd.Fill("0.4*rnd+0.1+sin(2*pi*x)", gr->Min, gr->Max); in.Fill("0.3+sin(2*pi*x)", gr->Min, gr->Max); - gr->Axis(mglPoint(-1,-2), mglPoint(1,2)); gr->Plot(rnd, ". "); gr->Box(); - float ini[3] = {1,1,3}; gr->Fit(res, rnd, "a+b*sin(c*x)", "abc", ini); gr->Plot(res, "r"); @@ -5913,16 +6799,15 @@ gr->PutsFit(mglPoint(0, -1.8), "y = ", "C:r", -1); gr->Text(mglPoint(0, 2.2), "initial: y = 0.3+sin(2\\pi x)", "C:b", -1); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new rnd 100 fill rnd '0.4*rnd+0.1+sin(2*pi*x)' new in 100 fill in '0.3+sin(2*pi*x)' - yrange -2 2 plot rnd '. ' box - list ini 1 1 3 fit res rnd 'a+b*sin(c*x)' 'abc' ini plot res 'r' @@ -5931,6 +6816,7 @@ text -1 -1.3 'fitted:' 'L:r' -1 putsfit 0 -1.8 'y = ' 'C:r' text 0 2.2 'initial: y = 0.3+sin(2\pi x)' 'C:b' -1 @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT rnd,in,res; @@ -5943,7 +6829,6 @@ mgl_data_modify(in,"0.3+sin(4*pi*x)",0); mgl_set_axis_2d(gr,-1.,-2.,1.,2.); mgl_plot(gr,rnd,". "); mgl_box(gr,1); - mgl_fit_1(gr,res,rnd,"a+b*sin(c*x)","abc",ini); mgl_plot(gr,res,"r"); mgl_plot(gr,in,"b"); mgl_puts_ext(gr,-1.,-1.3,0.,"fitted:","L:r",-1.,'t'); @@ -5963,7 +6848,6 @@ call mgl_data_modify(in,"0.3+sin(4*pi*x)",0); call mgl_set_axis_2d(gr,-1.,-2.,1.,2.); call mgl_plot(gr,rnd,". "); call mgl_box(gr,1); - call mgl_fit_1(gr,res,rnd,"a+b*sin(c*x)","abc",ini); call mgl_plot(gr,res,"r"); call mgl_plot(gr,in,"b"); @@ -5979,7 +6863,6 @@ In.Modify("0.3+sin(4*pi*x)"); gr.SetRanges(-1,1,-2,2); gr.Plot(rnd,". "); gr.Box(); - ini[0], ini[1], ini[2] = 1, 1, 3; gr.Fit(res,rnd,"a+b*sin(c*x)","abc",ini); gr.Plot(res,"r"); gr.Plot(In,"b"); @@ -5987,17 +6870,16 @@ gr.Puts(-1,-1.3,0,"fitted:","L:r",-1); gr.PutsFit(0,-1.8,0,"y = ","C:r",-1); gr.Puts(0,2.2,0,"initial: y = 0.3+sin(2\\pi x)","C:b",-1); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Envelop sample, Sew sample, Fitting sample, Advanced features @subsection Envelop -- пример использования @cindex Envelop - @float -@image{png/envelop, 7cm} -@caption{Example of envelop reconstruction.}@c @tdref{envelop}} +@image{../png/envelop, 7cm} +@c @caption{Example of envelop reconstruction.}@c @tdref{envelop}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(1000); @@ -6008,6 +6890,7 @@ gr->Plot(a, "r"); gr->Axis(); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 1000 fill a 'exp(-8*x^2)*sin(10*pi*x)' @@ -6016,6 +6899,7 @@ envelop a plot a 'r' axis @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(1000,1,1); @@ -6044,17 +6928,16 @@ a.Envelop("x"); gr.Plot(a,"r"); gr.Axis(); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Sew sample, STFA sample, Envelop sample, Advanced features @subsection Sew -- пример использования @cindex Sew - @float -@image{png/sew, 7cm} -@caption{Example of phase ``sewing''.}@c @tdref{sew}} +@image{../png/sew, 7cm} +@c @caption{Example of phase ``sewing''.}@c @tdref{sew}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(100, 100); @@ -6068,6 +6951,7 @@ gr->Surf(a, "r"); gr->Box(); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 100 100 modify a 'mod((y^2-(1-x)^2)/2,0.1)' @@ -6079,6 +6963,7 @@ sew a 'xy' 0.1 surf a 'r' box @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(100,100,1); @@ -6086,7 +6971,6 @@ mgl_data_modify(a, "mod((y^2-(1-x)^2)/2, 0.1)", 0); mgl_rotate(gr,40.,60.,0.); mgl_set_light(gr,1); mgl_set_alpha(gr,1); - mgl_surf(gr,a,"b"); mgl_data_sew(a,"xy",0.1); mgl_surf(gr,a,"r"); @@ -6100,7 +6984,6 @@ call mgl_data_modify(a, 'mod((y^2-(1-x)^2)/2, 0.1)', 0) call mgl_rotate(gr,40.,60.,0.) call mgl_set_light(gr,1) call mgl_set_alpha(gr,1) - call mgl_surf(gr,a,'b') call mgl_data_sew(a,'xy',0.1) call mgl_surf(gr,a,'r') @@ -6116,17 +6999,16 @@ a.Sew("xy", 0.1); gr.Surf(a, "r"); gr.Box(); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node STFA sample, PDE sample, Sew sample, Advanced features @subsection STFA -- пример использования @cindex STFA - @float -@image{png/stfa, 7cm} -@caption{Example of Short Time Fourier Analysis.}@c @tdref{stfa}} +@image{../png/stfa, 7cm} +@c @caption{Example of Short Time Fourier Analysis.}@c @tdref{stfa}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a(2000), b(2000); @@ -6137,7 +7019,6 @@ gr->SubPlot(1, 2, 0); gr->Plot(a); gr->Axis(); gr->Label('x', "\\i t"); - gr->SubPlot(1, 2, 1); gr->STFA(a, b, 64); gr->Axis(); @@ -6145,6 +7026,7 @@ gr->Label('x', "\\i t"); gr->Label('y', "\\omega", 0); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim new a 2000 new b 2000 @@ -6160,6 +7042,7 @@ axis ylabel '\omega' 0 xlabel '\i t' @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data_size(2000,1,1); @@ -6170,7 +7053,6 @@ mgl_subplot(gr,1,2,0); mgl_plot(gr,a,""); mgl_axis(gr,"xy"); mgl_label(gr,'x', "\\i t"); - mgl_subplot(gr,1,2,1); mgl_stfa(gr,a,b,64,"",0.); mgl_axis(gr,"xy"); @@ -6188,7 +7070,6 @@ call mgl_subplot(gr,1,2,0) call mgl_plot(gr,a,'') call mgl_axis(gr,'xy') call mgl_label(gr,'x', '\i t') - call mgl_subplot(gr,1,2,1) call mgl_stfa(gr,a,b,64,'',0.) call mgl_axis(gr,'xy') @@ -6204,25 +7085,23 @@ gr.SubPlot(1, 2, 0); gr.Plot(a); gr.Axis(); gr.Label('x', "\\i t"); - gr.SubPlot(1, 2, 1); gr.STFA(a, b, 64); gr.Axis(); gr.Label('x', "\\i t"); gr.Label('y', "\\omega", 0); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node PDE sample, Beam tracing sample, STFA sample, Advanced features @subsection PDE -- пример использования @cindex mglPDE @cindex mglRay - @float -@image{png/pde, 7cm} -@caption{Example of Partial Differential Eduation solving.}@c @tdref{pde}} +@image{../png/pde, 7cm} +@c @caption{Example of Partial Differential Eduation solving.}@c @tdref{pde}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData a,re(128),im(128); @@ -6241,23 +7120,23 @@ gr->Title("\\r{Equation:} ik_0\\partial_zu + \\Delta u + x\\cdot u + \ i \\frac{x+z}{2}\\cdot u = 0", "iC", -1.5); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim axis xlabel '\i x' ylabel '\i z' - new re 128 new im 128 fill re 'exp(-48*(x+0.7)^2)' pde a 'p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)' re im 0.01 30 transpose a - crange 0 1 dens a 'wyrRk' fplot '-x' 'k|' text 0 0.85 'absorption: (x+z)/2 for x+z>0' '' -1 title 'Equation: ik_0\partial_zu + \Delta u + x\cdot u + i \frac{x+z}{2}\cdot u = 0' 'iC' -1.5 @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim HMDT a = mgl_create_data(); @@ -6266,7 +7145,6 @@ HMDT im = mgl_create_data_size(128,1,1); mgl_axis(gr,"xyz"); mgl_label(gr,'x', "\\i x"); mgl_label(gr,'y', "\\i z"); - mgl_data_fill_eq(gr,re,"exp(-48*(x+0.7)^2)", 0, 0); a = mgl_pde_solve(gr, "p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)", re, im, 0.01, 30.); mgl_data_transpose(a, "yxz"); @@ -6289,7 +7167,6 @@ im = mgl_create_data_size(128,1,1) call mgl_axis(gr,'xyz') call mgl_label(gr,'x', '\i x') call mgl_label(gr,'y', '\i z') - call mgl_data_fill_eq(gr,re,'exp(-48*(x+0.7)^2)', 0, 0) a = mgl_pde_solve(gr, 'p^2+q^2-x-1+i*0.5*(z+x)*(z>-x)', re, im, 0.01, 30.) call mgl_data_transpose(a, 'yxz') @@ -6320,18 +7197,17 @@ gr.Puts(0, 0.85, 0., "absorption: (x+z)/2 for x+z>0"); gr.Title("\\r{Equation:} ik_0\\partial_zu + \\Delta u + x\\cdot u + \ i \\frac{x+z}{2}\\cdot u = 0", "iC", -1.5); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Beam tracing sample, Parser sample, PDE sample, Advanced features @subsection Beam tracing -- пример использования @cindex mglQO2d @cindex mglRay - @float -@image{png/qo2d, 7cm} -@caption{Example of ray and beam tracing. Compare with @ref{PDE sample}.}@c @tdref{qo2d}} +@image{../png/qo2d, 7cm} +@c @caption{Example of ray and beam tracing. Compare with @ref{PDE sample}.}@c @tdref{qo2d}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim mglData r, xx, yy, a, im(128), re(128); @@ -6350,6 +7226,7 @@ gr->Puts(mglPoint(0.7, -0.05), "central ray"); gr->Title("Beam and ray tracing", "C", -1.5); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim define $1 'p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)' ray r $1 -0.7 -1 0 0 0.5 0 0.02 2 @@ -6357,14 +7234,12 @@ plot r(0) r(1) 'k' axis xlabel '\i x' ylabel '\i z' - new re 128 new im 128 new xx new yy fill re 'exp(-48*x^2)' qo2d a $1 re im r 1 30 xx yy - crange 0 1 dens xx yy a 'wyrRk' fplot '-x' 'k|' @@ -6372,6 +7247,7 @@ text -0.8 0.85 'absorption: (x+y)/2 for x+y>0' 'L' -1 text 0.5 -0.05 'central ray' 'L' -1 title 'Beam and ray tracing' 'C' -1.5 @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim const char *ham = "p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)"; @@ -6385,7 +7261,6 @@ mgl_plot_xy(gr, xx, yy, "k"); mgl_axis(gr,"xyz"); mgl_label(gr,'x',"\\i x"); mgl_label(gr,'y',"\\i z"); - mgl_data_fill_eq(gr,re,"exp(-48*x^2)", 0, 0); a = mgl_qo2d_solve(ham, re, im, r, 1, 30, xx, yy); mgl_set_caxis(gr,0.,1.); @@ -6404,7 +7279,6 @@ integer r, xx, yy, a, im, re, mgl_create_data_size integer mgl_data_subdata, mgl_ray_trace, mgl_qo2d_solve character*64 ham ham = 'p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)' - im = mgl_create_data_size(128,1,1) re = mgl_create_data_size(128,1,1) r = mgl_ray_trace(ham, -0.7, -1., 0., 0., 0.5, 0., 0.02, 2.) @@ -6414,7 +7288,6 @@ call mgl_plot_xy(gr, xx, yy, 'k') call mgl_axis(gr,'xyz') call mgl_label(gr,'x','\i x') call mgl_label(gr,'y','\i z') - call mgl_data_fill_eq(gr,re,'exp(-48*x^2)', 0, 0) a = mgl_qo2d_solve(ham, re, im, r, 1., 30., xx, yy) call mgl_set_caxis(gr,0.,1.) @@ -6436,10 +7309,8 @@ ham = "p^2+q^2-x-1+i*0.5*(y+x)*(y>-x)"; r, xx, yy, a = mglData(), mglData(), mglData(), mglData(); im, re = mglData(128), mglData(128); r = mglRay(ham, mglPoint(-0.7, -1), mglPoint(0, 0.5), 0.02, 2); - gr.Plot(r.SubData(0), r.SubData(1), "k"); gr.Axis(); gr.Label('x', "\\i x"); gr.Label('y', "\\i z"); - gr.Fill(re,"exp(-48*x^2)"); a = mglQO2d(ham, re, im, r, 1, 30, xx, yy); gr.SetCRange(0, 1); @@ -6449,17 +7320,16 @@ gr.Puts(0, 0.85, 0, "absorption: (x+y)/2 for x+y>0"); gr.Puts(0.7, -0.05, 0, "central ray"); gr.Title("Beam and ray tracing", "C", -1.5); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Parser sample, Manual ticks sample, Beam tracing sample, Advanced features @subsection Parser -- пример использования @cindex mglParse - +@ifclear UDAV @float -@image{png/parser, 7cm} -@caption{Example of MGL parsing.}@c @tdref{parser}} +@image{../png/parser, 7cm} +@c @caption{Example of MGL parsing.}@c @tdref{parser}} @end float - @strong{C++ код} @verbatim float a[100]; // let a_i = sin(4*pi*x), x=0...1 @@ -6533,17 +7403,16 @@ parser.Execute(gr, "xlabel 'x'\nylabel 'y'"); # also you may use cycles or conditions in script parser.Execute(gr, "for $0 -1 1 0.1\nline 0 0 -1 $0 'r'\nnext"); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node Manual ticks sample, ColumnPlot sample, Parser sample, Advanced features @subsection Особые метки по осям @cindex SetTicksVal - @float -@image{png/tval, 7cm} -@caption{Example of MGL parsing.}@c @tdref{tval}} +@image{../png/tval, 7cm} +@c @caption{Example of manual tick values.}@c @tdref{tval}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim gr->Axis(mglPoint(-M_PI, 0), mglPoint(M_PI, 2)); @@ -6553,6 +7422,7 @@ gr->Axis(); gr->Grid(); gr->Plot("2*cos(x^2)^2", "r2", NAN, 300); @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim axis -pi 0 pi 2 xtick -pi '-\pi' -1.571 '-\pi/2' 0 '0' 0.886 'x^*' 1.571 '\pi/2' pi '\pi' @@ -6560,6 +7430,7 @@ axis grid fplot '2*cos(x^2)^2' 'r2' nan 300 @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim mgl_set_axis_2d(gr, -M_PI, 0, M_PI, 2); @@ -6583,17 +7454,16 @@ parser.Execute(gr, "xtick -pi '-\pi' -1.571 '-\pi/2' 0 '0' " gr.Axis(); gr.Grid(); gr.Plot("2*cos(x^2)^2", "r2", 300); @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node ColumnPlot sample, StickPlot sample, Manual ticks sample, Advanced features @subsection ColumnPlot -- пример использования @cindex SetTicksVal - @float -@image{png/column, 7cm} -@caption{Example of MGL parsing.}@c @tdref{tval}} +@image{../png/column, 7cm} +@c @caption{Example of ColumnPlot.}@c @tdref{tval}} @end float - +@ifclear UDAV @strong{C++ код} @verbatim char str[32]; @@ -6608,6 +7478,7 @@ for(int i=0;i<4;i++) } @end verbatim @strong{MGL скрипт} +@end ifclear @verbatim for $1 0 3 columnplot 4 $1 @@ -6616,6 +7487,7 @@ text -0.5 0.5 'Plot $1 of 4' fplot 'sin(pi*x+pi*$1/2)' next @end verbatim +@ifclear UDAV @strong{C-ый код} @verbatim int i; @@ -6636,20 +7508,19 @@ NOT AVAILABLE @end verbatim @strong{Python} @verbatim - +NOT AVAILABLE @end verbatim - +@end ifclear @c ------------------------------------------------------------------ @node StickPlot sample, , ColumnPlot sample, Advanced features @subsection StickPlot -- пример использования @cindex SetTicksVal - @float -@image{png/column, 7cm} -@caption{Example of MGL parsing.}@c @tdref{tval}} +@image{../png/stick, 7cm} +@c @caption{Example of StickPlot.}@c @tdref{tval}} @end float - -@strong{C++ code} +@ifclear UDAV +@strong{C++ код} @verbatim gr->SetRanges(-1, 1, -1, 1, 0, 1); gr->Light(true); gr->StickPlot(3, 0, 40, 30); gr->Axis("xyz_"); @@ -6663,7 +7534,8 @@ gr->Surf("exp(-10*y^2/5-6*x^2)/sqrt(5)"); gr->Text(mglPoint(0.2, 0, 1.2), "z=2", "", -2); gr->Label('x',"\\tau", 0); gr->Label('y', "\\rho"); @end verbatim -@strong{MGL code} +@strong{MGL скрипт} +@end ifclear @verbatim ranges -1 1 -1 1 0 1:light on stickplot 3 0 40 30 : axis 'xyz_' @@ -6677,7 +7549,8 @@ fsurf 'exp(-10*y^2/5-6*x^2)/sqrt(5)' text 0.2 0 1.2 'z=2' '' -2 xlabel '\tau' 0 : ylabel '\rho' @end verbatim -@strong{Pure C code} +@ifclear UDAV +@strong{C-ый код} @verbatim mgl_set_axis_3d(gr, -1, -1, 0, 1, 1, 1); mgl_set_light(gr, 1); @@ -6696,11 +7569,91 @@ mgl_text(gr, 0.2, 0, 1.2, "z=2"); mgl_label(gr,'x',"\\tau"); mgl_label(gr,'y', "\\rho"); @end verbatim -@strong{Fortran code} +@strong{Fortran} @verbatim NOT AVAILABLE @end verbatim @strong{Python} @verbatim +NOT AVAILABLE +@end verbatim +@end ifclear +@c ------------------------------------------------------------------ +@node Stereo image sample, , StickPlot sample, Advanced features +@subsection Пример стерео изображения +@float +@image{../png/stereo, 7cm} +@c @caption{Example of stereo image.}@c @tdref{stereo}} +@end float +@ifclear UDAV +@strong{C++ код} +@verbatim +mglData a(50,40); +a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))"); +gr->Light(true); +gr->SubPlot(2,1,0); +gr->Rotate(40,60+3); +gr->Box(); gr->Surf(a); +gr->SubPlot(2,1,1); +gr->Rotate(40,60-3); +gr->Box(); gr->Surf(a); +@end verbatim +@strong{MGL скрипт} +@end ifclear +@verbatim +new a 50 40 +modify a '0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))' +light on +subplot 2 1 0 +rotate 40 60+3 +box:surf a +subplot 2 1 1 +rotate 40 60-3 +box:surf a +@end verbatim +@ifclear UDAV +@strong{C-ый код} +@verbatim +HMDT a = mgl_create_data_size(50,40,1); +mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); +mgl_set_light(gr,1); +mgl_subplot(gr,2,1,0); +mgl_rotate(gr,40.,60.+3.,0.); +mgl_box(gr,1); +mgl_surf(gr,a,0); +mgl_subplot(gr,2,1,1); +mgl_rotate(gr,40.,60.-3.,0.); +mgl_box(gr,1); +mgl_surf(gr,a,0); +mgl_delete_data(a); +@end verbatim +@strong{Fortran} +@verbatim +integer a, mgl_create_data_size +a = mgl_create_data_size(50,40,1); +call mgl_data_modify(a,"0.6*sin(2*pi*x)*sin(3*pi*y) + 0.4*cos(3*pi*(x*y))",0); +call mgl_set_light(gr,1) +call mgl_subplot(gr,2,1,0) +call mgl_rotate(gr,40.,60.+3.,0.) +call mgl_box(gr,1) +call mgl_surf(gr,a,'') +call mgl_subplot(gr,2,1,1) +call mgl_rotate(gr,40.,60.-3.,0.) +call mgl_box(gr,1) +call mgl_surf(gr,a,'') +call mgl_delete_data(a) @end verbatim +@strong{Python} +@verbatim +a = mglData(50,40); +a.Modify("0.6*sin(2*pi*x)*sin(3*pi*y)+0.4*cos(3*pi*(x*y))"); +gr.Light(True); +gr.SubPlot(2,1,0); +gr.Rotate(40,60+3); +gr.Surf(a); gr.Box(); +gr.SubPlot(2,1,1); +gr.Rotate(40,60-3); +gr.Surf(a); gr.Box(); +@end verbatim +@end ifclear diff --git a/texinfo/widget_en.texi b/texinfo/widget_en.texi new file mode 100644 index 0000000..eff4705 --- /dev/null +++ b/texinfo/widget_en.texi @@ -0,0 +1,289 @@ + +@c ------------------------------------------------------------------ +@chapter Widget classes +@cindex mglGraphFLTK +@cindex mglGraphQT +@cindex mglGraphGLUT +@cindex Fl_MathGL +@cindex QMathGL +@cindex window +@cindex widgets + +There are set of ``window'' classes for making a window with MathGL graphics: @code{mglGraphFLTK}, @code{mglGraphQT}, @code{mglGraphGLUT}. All these classes allow user to show, rotate, export, and change view of the plot using keyboard. Most of them (except @code{mglGraphGLUT}) also have toolbar and menu for simplifying plot manipulation. Usually these classes (except @code{mglGraphGLUT}) are derived from @code{mglGraphZB} class and have a ``connected'' class for widget in corresponding window library. All window classes have the same set of functions (@pxref{mglGraphAB class}). Below the full list of classes with short comments. + +@deftp {Class} mglGraphFLTK +Class @code{mglGraphFLTK} adds the possibility to create plotting window with the help of FLTK library. It allows one to show, rotate, export, and change view of the plot by keyboard, menu and toolbar. ``Corresponding'' widget class is @code{Fl_MathGL}. Class is defined in @code{#include }. +@end deftp + +@deftp {Class} Fl_MathGL +Class is FLTK widget for displaying the MathGL output. Class is defined in @code{#include }. +@end deftp + +@float +@image{fltk, 7cm} +@caption{Example of FLTK window with MathGL plot.} +@end float + +@deftp {Class} mglGraphQT +Class @code{mglGraphQT} adds the possibility to create plotting window with the help of QT library. It allows one to show, rotate, export, and change view of the plot by keyboard, menu and toolbar. ``Corresponding'' widget class is @code{QMathGL}. Class is defined in @code{#include }. +@end deftp + +@deftp {Class} QMathGL +Class is Qt widget for dysplaying the MathGL output. Class is defined in @code{#include }. +@end deftp + +@float +@image{qt, 7cm} +@caption{Example of Qt window with MathGL plot.} +@end float + +@deftp {Class} mglGraphGLUT +Class @code{mglGraphGLUT} adds the possibility to create plotting window with the help of GLUT library. It allows one to show, rotate, export, and change view of the plot only by keyboard. Class is defined in @code{#include }. +@end deftp + +@float +@image{glut, 7cm} +@caption{Example of GLUT window with MathGL plot.} +@end float + +@menu +* Fl_MathGL class:: +* QMathGL class:: +@end menu + +@c ------------------------------------------------------------------ +@node Fl_MathGL class, QMathGL class, , Widget classes +@section Fl_MathGL class +@cindex Fl_MathGL +@cindex widgets + +Class is FLTK widget which display MathGL graphics (defined in @code{#include }). + +@deftypemethod Fl_MathGL @code{void} set_draw (@code{mglDraw *}dr) +Sets drawing function from a class inherited from @code{mglDraw}. +@end deftypemethod +@deftypemethod Fl_MathGL @code{void} update (@code{mglGraph *}gr=@code{NULL}) +Update (redraw) plot using grapher @var{gr} (built-in by default). +@end deftypemethod +@deftypemethod Fl_MathGL @code{void} set_angle (@code{float} t, @code{float} p) +Set angles for additional plot rotation +@end deftypemethod +@deftypemethod Fl_MathGL @code{void} set_state (@code{int} f) +Set bitwise flags for general state (1-Alpha, 2-Light) +@end deftypemethod +@deftypemethod Fl_MathGL @code{void} set_state (@code{bool} z, @code{bool} r) +Set flags for handling mouse: @var{z}=@code{true} allow zooming, @var{r}=@code{true} allow rotation/shifting/perspective and so on. +@end deftypemethod +@deftypemethod Fl_MathGL @code{void} set_zoom (@code{float} X1, @code{float} Y1, @code{float} X2, @code{float} Y2) +Set zoom in/out region +@end deftypemethod +@deftypemethod Fl_MathGL @code{void} get_zoom (@code{float *}X1, @code{float *}Y1, @code{float *}X2, @code{float *}Y2) +Get zoom in/out region +@end deftypemethod +@deftypemethod Fl_MathGL @code{void} set_popup (@code{const Fl_Menu_Item *}pmenu, @code{Fl_Widget *}w, @code{void *}v) +Set popup menu pointer +@end deftypemethod +@deftypemethod Fl_MathGL @code{mglGraph *} get_graph () +Get pointer to grapher +@end deftypemethod + +@deftypecv {Widget option} Fl_MathGL @code{Fl_Valuator *} tet_val +Pointer to external tet-angle validator. +@end deftypecv +@deftypecv {Widget option} Fl_MathGL @code{Fl_Valuator *} phi_val +Pointer to external phi-angle validator. +@end deftypecv +@deftypecv {Widget option} Fl_MathGL @code{mglGraphAB *} graph +Pointer to grapher +@end deftypecv +@deftypecv {Widget option} Fl_MathGL @code{void *} draw_par +Parameters for drawing function mglGraph::DrawFunc. +@end deftypecv +@deftypecv {Widget option} Fl_MathGL @code{int (*} draw_func @code{)(mglGraph *gr, void *par)} +Drawing function for window procedure. It should return the number of frames. +@end deftypecv + +@c ------------------------------------------------------------------ +@node QMathGL class, , Fl_MathGL class, Widget classes +@section QMathGL class +@cindex QMathGL +@cindex widgets + +Class is Qt widget which display MathGL graphics (defined in @code{#include }). + +@deftypemethod QMathGL @code{void} setDraw (@code{mglDraw *}dr) +Sets drawing functions from a class inherited from @code{mglDraw}. +@end deftypemethod +@deftypemethod QMathGL @code{void} setDraw (@code{int (*}draw)(@code{mglGraph *}gr, @code{void *}p), @code{void *}par=@code{NULL}) +Sets the drawing function @var{draw}. There is support of a list of plots (frames). So as one can prepare a set of frames at first and redraw it fast later (but it requires more memory). Function should return positive number of frames for the list or zero if it will plot directly. Parameter @var{par} contains pointer to data for the plotting function @var{draw}. +@end deftypemethod + +@deftypemethod QMathGL @code{void} setGraph (@code{mglGraphAB *}gr) +Set pointer to external grapher (instead of built-in @code{mglGraphZB}). Note that QMathGL will automatically delete this object at destruction or at new @code{setGraph()} call. +@end deftypemethod + +@deftypemethod QMathGL @code{void} setPopup (@code{QMenu *}p) +Set popup menu pointer. +@end deftypemethod +@deftypemethod QMathGL @code{void} setSize (@code{int} w, @code{int} h) +Set widget/picture sizes +@end deftypemethod +@deftypemethod QMathGL @code{double} getRatio () +Return aspect ratio of the picture. +@end deftypemethod + +@deftypemethod QMathGL @code{int} getPer () +Get perspective value in percents. +@end deftypemethod +@deftypemethod QMathGL @code{int} getPhi () +Get Phi-angle value in degrees. +@end deftypemethod +@deftypemethod QMathGL @code{int} getTet () +Get Theta-angle value in degrees. +@end deftypemethod +@deftypemethod QMathGL @code{bool} getAlpha () +Get transparency state. +@end deftypemethod +@deftypemethod QMathGL @code{bool} getLight () +Get lightning state. +@end deftypemethod +@deftypemethod QMathGL @code{bool} getZoom () +Get mouse zooming state. +@end deftypemethod +@deftypemethod QMathGL @code{bool} getRotate () +Get mouse rotation state. +@end deftypemethod + +@defop Slot QMathGL @code{void} refresh () +Redraw saved bitmap without executing drawing function. +@end defop +@defop Slot QMathGL @code{void} update (@code{mglGraph *}gr=@code{NULL}) +Update picture by executing drawing function. +@end defop +@defop Slot QMathGL @code{void} copy () +Copy graphics to clipboard. +@end defop +@defop Slot QMathGL @code{void} setPer (@code{int} val) +Set perspective value. +@end defop +@defop Slot QMathGL @code{void} setPhi (@code{int} val) +Set Phi-angle value. +@end defop +@defop Slot QMathGL @code{void} setTet (@code{int} val) +Set Theta-angle value. +@end defop +@defop Slot QMathGL @code{void} setAlpha (@code{bool} val) +Switch on/off transparency. +@end defop +@defop Slot QMathGL @code{void} setLight (@code{bool} val) +Switch on/off lightning. +@end defop +@defop Slot QMathGL @code{void} setZoom (@code{bool} val) +Switch on/off mouse zooming. +@end defop +@defop Slot QMathGL @code{void} setRotate (@code{bool} val) +Switch on/off mouse rotation. +@end defop +@defop Slot QMathGL @code{void} zoomIn () +Zoom in graphics. +@end defop +@defop Slot QMathGL @code{void} zoomOut () +Zoom out graphics. +@end defop +@defop Slot QMathGL @code{void} restore () +Restore zoom and rotation to default values. +@end defop +@defop Slot QMathGL @code{void} reload () +Reload data and redraw graphics. +@end defop +@defop Slot QMathGL @code{void} shiftLeft () +Shift graphics to left direction. +@end defop +@defop Slot QMathGL @code{void} shiftRight () +Shift graphics to right direction. +@end defop +@defop Slot QMathGL @code{void}shiftUp () +Shift graphics to up direction. +@end defop +@defop Slot QMathGL @code{void} shiftDown () +Shift graphics to down direction. +@end defop +@defop Slot QMathGL @code{void} exportPNG (@code{QString} fname=@code{""}) +Export current picture to PNG file. +@end defop +@defop Slot QMathGL @code{void} exportPNGs (@code{QString} fname=@code{""}) +Export current picture to PNG file (no transparency). +@end defop +@defop Slot QMathGL @code{void} exportJPG (@code{QString} fname=@code{""}) +Export current picture to JPEG file. +@end defop +@defop Slot QMathGL @code{void} exportBPS (@code{QString} fname=@code{""}) +Export current picture to bitmap EPS file. +@end defop +@defop Slot QMathGL @code{void} exportEPS (@code{QString} fname=@code{""}) +Export current picture to vector EPS file. +@end defop +@defop Slot QMathGL @code{void} exportSVG (@code{QString} fname=@code{""}) +Export current picture to SVG file. +@end defop +@defop Slot QMathGL @code{void} exportIDTF (@code{QString} fname=@code{""}) +Export current picture to IDTF file. +@end defop +@defop Slot QMathGL @code{void} setMGLFont (@code{QString} path) +Restore (@var{path}=@code{""}) or load font for graphics. +@end defop +@defop Slot QMathGL @code{void} print () +Print current picture +@end defop +@defop Slot QMathGL @code{void} adjust () +Adjust plot size to fill entire window. This function is executed only if graph is mglGraphQT instance. +@end defop +@defop Slot QMathGL @code{void} nextSlide () +Show next slide. This function is executed only if graph is mglGraphQT instance. +@end defop +@defop Slot QMathGL @code{void} prevSlide () +Show previous slide. This function is executed only if graph is mglGraphQT instance. +@end defop +@defop Slot QMathGL @code{void} animation (@code{bool} st=@code{true}) +Start animation. This function is executed only if graph is mglGraphQT instance. +@end defop +@defop Slot QMathGL @code{void} about () +Show about information. +@end defop +@defop Slot QMathGL @code{void} aboutQt () +Show information about Qt version. +@end defop + +@defop Signal QMathGL @code{void} phiChanged (@code{int} val) +Phi angle changed (by mouse or by toolbar). +@end defop +@defop Signal QMathGL @code{void} tetChanged (@code{int} val) +Tet angle changed (by mouse or by toolbar). +@end defop +@defop Signal QMathGL @code{void} perChanged (@code{int} val) +Perspective changed (by mouse or by toolbar). +@end defop +@defop Signal QMathGL @code{void} alphaChanged (@code{bool} val) +Transparency changed (by toolbar). +@end defop +@defop Signal QMathGL @code{void} lightChanged (@code{bool} val) +Lighting changed (by toolbar). +@end defop +@defop Signal QMathGL @code{void} zoomChanged (@code{bool} val) +Zooming changed (by toolbar). +@end defop +@defop Signal QMathGL @code{void} rotateChanged (@code{bool} val) +Rotation changed (by toolbar). +@end defop + +@deftypecv {Widget option} QMathGL @code{QString} appName +Application name for message boxes. +@end deftypecv +@deftypecv {Widget option} QMathGL @code{bool} autoResize +Allow auto resizing (default is false). +@end deftypecv +@deftypecv {Widget option} QMathGL @code{int} animDelay +Animation delay in ms. +@end deftypecv + + diff --git a/texinfo/widget_ru.texi b/texinfo/widget_ru.texi new file mode 100644 index 0000000..127bcc8 --- /dev/null +++ b/texinfo/widget_ru.texi @@ -0,0 +1,290 @@ + +@c ------------------------------------------------------------------ +@chapter ``Оконные'' классы +@cindex mglGraphFLTK +@cindex mglGraphQT +@cindex mglGraphGLUT +@cindex Fl_MathGL +@cindex QMathGL +@cindex window +@cindex widgets + +Есть целый набор ``оконных'' классов для создания окон с графикой MathGL: @code{mglGraphFLTK}, @code{mglGraphQT}, @code{mglGraphGLUT}. Все эти классы позволяют пользователю просмотривать, вращать, экспортировать рисунок. Большинство из них (кроме @code{mglGraphGLUT}) являются наследниками класса @code{mglGraphZB} и используют ``присоединенный'' класс для центрального виджета окна. Все оконные классы имеют схожий набор функций (@pxref{mglGraphAB class}). Ниже приведен список классов с краткими комментариями. + +@deftp {Class} mglGraphFLTK +Создает окно используя библиотеку FLTK. Окно имеет панель инструментов и меню для упрощения действий с графиками. ``Присоединенный'' класс элемента интерфейса -- @code{Fl_MathGL}. Класс определен в @code{#include }. +@end deftp + +@deftp {Class} Fl_MathGL +Класс реализует элемент интерфейса FLTK для отображения графики MathGL. Класс определен в @code{#include }. +@end deftp + +@float +@image{fltk, 7cm} +@caption{Пример окна FLTK с графикой MathGL.} +@end float + +@deftp {Class} mglGraphQT +Создает окно используя библиотеку Qt. Окно имеет панель инструментов и меню для упрощения действий с графиками. ``Присоединенный'' класс элемента интерфейса -- @code{QMathGL}. Класс определен в @code{#include }. +@end deftp + +@deftp {Class} QMathGL +Класс реализует элемент интерфейса Qt для отображения графики MathGL. Класс определен в @code{#include }. +@end deftp + +@float +@image{qt, 7cm} +@caption{Пример окна Qt с графикой MathGL.} +@end float + +@deftp {Class} mglGraphGLUT +Создает окно используя библиотеку GLUT. Класс определен в @code{#include }. +@end deftp + +@float +@image{glut, 7cm} +@caption{Пример окна GLUT с графикой MathGL.} +@end float + +@menu +* Fl_MathGL class:: +* QMathGL class:: +@end menu + +@c ------------------------------------------------------------------ +@node Fl_MathGL class, QMathGL class, , Widget classes +@section Класс Fl_MathGL +@cindex Fl_MathGL +@cindex widgets + +Класс реализует элемент интерфейса FLTK для отображения графики MathGL (определен в @code{#include }). + +@deftypemethod Fl_MathGL @code{void} set_draw (@code{mglDraw *}dr) +Задает функцию рисования из класса производного от @code{mglDraw}. +@end deftypemethod +@deftypemethod Fl_MathGL @code{void} update (@code{mglGraph *}gr=@code{NULL}) +Обновляет (перерисовывает) график, используя экземпляр класса @var{gr} (по умолчанию встроенный). +@end deftypemethod +@deftypemethod Fl_MathGL @code{void} set_angle (@code{float} t, @code{float} p) +Задает углы для дополнительного вращения графика. +@end deftypemethod +@deftypemethod Fl_MathGL @code{void} set_state (@code{int} f) +Задает битовые флаги для: 1 - прозрачности, 2 - освещения. +@end deftypemethod +@deftypemethod Fl_MathGL @code{void} set_state (@code{bool} z, @code{bool} r) +Задает флаги обработки движений мыши: @var{z}=@code{true} -- разрешает приближение выделения, @var{r}=@code{true} разрешает вращение/сдвиг/приближение/перспективу. +@end deftypemethod +@deftypemethod Fl_MathGL @code{void} set_zoom (@code{float} X1, @code{float} Y1, @code{float} X2, @code{float} Y2) +Задает область приближения. +@end deftypemethod +@deftypemethod Fl_MathGL @code{void} get_zoom (@code{float *}X1, @code{float *}Y1, @code{float *}X2, @code{float *}Y2) +Возвращает область приближения. +@end deftypemethod +@deftypemethod Fl_MathGL @code{void} set_popup (@code{const Fl_Menu_Item *}pmenu, @code{Fl_Widget *}w, @code{void *}v) +Задает указатель на всплывающее меню. +@end deftypemethod +@deftypemethod Fl_MathGL @code{mglGraph *} get_graph () +Возвращает указатель на класс, строящий графики. +@end deftypemethod + +@deftypecv {Widget option} Fl_MathGL @code{Fl_Valuator *} tet_val +Указатель на внешний элемент управления для изменения угла tet. +@end deftypecv +@deftypecv {Widget option} Fl_MathGL @code{Fl_Valuator *} phi_val +Указатель на внешний элемент управления для изменения угла phi. +@end deftypecv +@deftypecv {Widget option} Fl_MathGL @code{mglGraphAB *} graph +Указатель на экземпляр класса для построения графиков. +@end deftypecv +@deftypecv {Widget option} Fl_MathGL @code{void *} draw_par +Параметр для функции рисования. +@end deftypecv +@deftypecv {Widget option} Fl_MathGL @code{int (*} draw_func @code{)(mglGraph *gr, void *par)} +Указатель на функцию рисования. +@end deftypecv + +@c ------------------------------------------------------------------ +@node QMathGL class, , Fl_MathGL class, Widget classes +@section QMathGL class +@cindex QMathGL +@cindex widgets + +Класс реализует элемент интерфейса Qt для отображения графики MathGL (определен в @code{#include }). + +@deftypemethod QMathGL @code{void} setDraw (@code{mglDraw *}dr) +Задает функцию рисования из класса производного от @code{mglDraw}. +@end deftypemethod +@deftypemethod QMathGL @code{void} setDraw (@code{int (*}draw)(@code{mglGraph *}gr, @code{void *}p), @code{void *}par=@code{NULL}) +Задает функцию рисования @var{draw} и укзатель @var{par} на параметр для нее. +@end deftypemethod + +@deftypemethod QMathGL @code{void} setGraph (@code{mglGraphAB *}gr) +Устанавливает указатель на внешний экземпляр класса для рисования (вместо встроенного @code{mglGraphZB}). Отмечу, что QMathGL автоматически удалит этот объект при удалении элемента интерфейса или при новом вызове @code{setGraph()}. +@end deftypemethod + +@deftypemethod QMathGL @code{void} setPopup (@code{QMenu *}p) +Задает указатель на всплывающее меню. +@end deftypemethod +@deftypemethod QMathGL @code{void} setSize (@code{int} w, @code{int} h) +Задает размеры элемента управления и картинки. +@end deftypemethod +@deftypemethod QMathGL @code{double} getRatio () +Возвращает соотношение сторон рисунка. +@end deftypemethod + +@deftypemethod QMathGL @code{int} getPer () +Возвращает величину перспективы в процентах. +@end deftypemethod +@deftypemethod QMathGL @code{int} getPhi () +Возвращает величину угла Phi в градусах. +@end deftypemethod +@deftypemethod QMathGL @code{int} getTet () +Возвращает величину угла Theta в градусах. +@end deftypemethod +@deftypemethod QMathGL @code{bool} getAlpha () +Возвращает состояние переключателя прозрачности. +@end deftypemethod +@deftypemethod QMathGL @code{bool} getLight () +Возвращает состояние переключателя освещения. +@end deftypemethod +@deftypemethod QMathGL @code{bool} getZoom () +Возвращает состояние переключателя приближения мышью. +@end deftypemethod +@deftypemethod QMathGL @code{bool} getRotate () +Возвращает состояние переключателя вращения мышью. +@end deftypemethod + +@defop Slot QMathGL @code{void} refresh () +Перерисовывает (обновляет) элемент управления без вызова функции рисования. +@end defop +@defop Slot QMathGL @code{void} update (@code{mglGraph *}gr=@code{NULL}) +Обновляет рисунок путем вызова функции рисования. +@end defop +@defop Slot QMathGL @code{void} copy () +Копирует график в буфер обмена. +@end defop +@defop Slot QMathGL @code{void} setPer (@code{int} val) +Задает величину перспективы. +@end defop +@defop Slot QMathGL @code{void} setPhi (@code{int} val) +Задает величину угла Phi. +@end defop +@defop Slot QMathGL @code{void} setTet (@code{int} val) +Задает величину угла Theta. +@end defop +@defop Slot QMathGL @code{void} setAlpha (@code{bool} val) +Включает/выключает прозрачность. +@end defop +@defop Slot QMathGL @code{void} setLight (@code{bool} val) +Включает/выключает освещение. +@end defop +@defop Slot QMathGL @code{void} setZoom (@code{bool} val) +Включает/выключает приближение мышью. +@end defop +@defop Slot QMathGL @code{void} setRotate (@code{bool} val) +Включает/выключает вращение мышью. +@end defop +@defop Slot QMathGL @code{void} zoomIn () +Приблиажет график. +@end defop +@defop Slot QMathGL @code{void} zoomOut () +Отдаляет график. +@end defop +@defop Slot QMathGL @code{void} restore () +Восстанавливает приближение и поворот графика в значения по умолчанию. +@end defop +@defop Slot QMathGL @code{void} reload () +Обновляет данные и перерисовывает график. +@end defop +@defop Slot QMathGL @code{void} shiftLeft () +Сдвигает график влево. +@end defop +@defop Slot QMathGL @code{void} shiftRight () +Сдвигает график вправо. +@end defop +@defop Slot QMathGL @code{void}shiftUp () +Сдвигает график вверх. +@end defop +@defop Slot QMathGL @code{void} shiftDown () +Сдвигает график вниз. +@end defop +@defop Slot QMathGL @code{void} exportPNG (@code{QString} fname=@code{""}) +Сохраняет текущий рисунок в PNG файл. +@end defop +@defop Slot QMathGL @code{void} exportPNGs (@code{QString} fname=@code{""}) +Сохраняет текущий рисунок в PNG файл без прозрачности. +@end defop +@defop Slot QMathGL @code{void} exportJPG (@code{QString} fname=@code{""}) +Сохраняет текущий рисунок в JPEG файл. +@end defop +@defop Slot QMathGL @code{void} exportBPS (@code{QString} fname=@code{""}) +Сохраняет текущий рисунок в растровый EPS файл. +Export current picture to bitmap EPS file. +@end defop +@defop Slot QMathGL @code{void} exportEPS (@code{QString} fname=@code{""}) +Сохраняет текущий рисунок в векторный EPS файл. +@end defop +@defop Slot QMathGL @code{void} exportSVG (@code{QString} fname=@code{""}) +Сохраняет текущий рисунок в векторный SVG файл. +@end defop +@defop Slot QMathGL @code{void} exportIDTF (@code{QString} fname=@code{""}) +Сохраняет текущий рисунок в IDTF файл. +@end defop +@defop Slot QMathGL @code{void} setMGLFont (@code{QString} path) +Восстанавливает (@var{path}=@code{""}) или загружает файлы шрифтов. +@end defop +@defop Slot QMathGL @code{void} print () +Печатает текущий рисунок. +@end defop +@defop Slot QMathGL @code{void} adjust () +Подгоняет размер картинки под размер окна. Функция выполняется только если graph -- экземпляр класса mglGraphQT. +@end defop +@defop Slot QMathGL @code{void} nextSlide () +Показывает следующий кадр. Функция выполняется только если graph -- экземпляр класса mglGraphQT. +@end defop +@defop Slot QMathGL @code{void} prevSlide () +Показывает предыдущий кадр. Функция выполняется только если graph -- экземпляр класса mglGraphQT. +@end defop +@defop Slot QMathGL @code{void} animation (@code{bool} st=@code{true}) +Запускает анимацию. Функция выполняется только если graph -- экземпляр класса mglGraphQT. +@end defop +@defop Slot QMathGL @code{void} about () +Показывает информацию о программе. +@end defop +@defop Slot QMathGL @code{void} aboutQt () +Показывает информацию о версии Qt. +@end defop + +@defop Signal QMathGL @code{void} phiChanged (@code{int} val) +Угол Phi изменен. +@end defop +@defop Signal QMathGL @code{void} tetChanged (@code{int} val) +Угол Tet изменен. +@end defop +@defop Signal QMathGL @code{void} perChanged (@code{int} val) +Перспектива изменена. +@end defop +@defop Signal QMathGL @code{void} alphaChanged (@code{bool} val) +Прозрачность изменена. +@end defop +@defop Signal QMathGL @code{void} lightChanged (@code{bool} val) +Освещение изменено. +@end defop +@defop Signal QMathGL @code{void} zoomChanged (@code{bool} val) +Режим приближения мышью изменен. +@end defop +@defop Signal QMathGL @code{void} rotateChanged (@code{bool} val) +Режим вращения мышью изменен. +@end defop + +@deftypecv {Widget option} QMathGL @code{QString} appName +Имя приложения для окон сообщений. +@end deftypecv +@deftypecv {Widget option} QMathGL @code{bool} autoResize +Разрешить изменять размер рисунка (по умолчанию false). +@end deftypecv +@deftypecv {Widget option} QMathGL @code{int} animDelay +Задержка анимации в мсек. +@end deftypecv + + diff --git a/utils/Makefile.am b/utils/Makefile.am index 00afdcb..94619ce 100644 --- a/utils/Makefile.am +++ b/utils/Makefile.am @@ -23,7 +23,7 @@ mgl2svg_LDADD = $(top_builddir)/mgl/libmgl.la if USE_FLTK mglview_SOURCES = mglview.cpp -mglview_LDADD = $(top_builddir)/widgets/libmgl-fltk.la +mglview_LDADD = $(top_builddir)/widgets/libmgl-fltk.la $(top_builddir)/mgl/libmgl.la mglview_CXXFLAGS = $(FLTK_FLAGS) $(AM_CXXFLAGS) endif diff --git a/utils/Makefile.in b/utils/Makefile.in index ff4454c..8057592 100644 --- a/utils/Makefile.in +++ b/utils/Makefile.in @@ -1,4 +1,4 @@ -# Makefile.in generated by automake 1.11 from Makefile.am. +# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, @@ -76,7 +76,8 @@ am__mglview_SOURCES_DIST = mglview.cpp @USE_FLTK_TRUE@am_mglview_OBJECTS = mglview-mglview.$(OBJEXT) mglview_OBJECTS = $(am_mglview_OBJECTS) @USE_FLTK_TRUE@mglview_DEPENDENCIES = \ -@USE_FLTK_TRUE@ $(top_builddir)/widgets/libmgl-fltk.la +@USE_FLTK_TRUE@ $(top_builddir)/widgets/libmgl-fltk.la \ +@USE_FLTK_TRUE@ $(top_builddir)/mgl/libmgl.la mglview_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ --mode=link $(CXXLD) $(mglview_CXXFLAGS) $(CXXFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ @@ -143,6 +144,8 @@ GREP = @GREP@ GSL_FLAGS = @GSL_FLAGS@ GSL_LIBS = @GSL_LIBS@ HAVE_SWIG = @HAVE_SWIG@ +HDF4_FLAGS = @HDF4_FLAGS@ +HDF4_LIBS = @HDF4_LIBS@ HDF5_FLAGS = @HDF5_FLAGS@ HDF5_LIBS = @HDF5_LIBS@ INSTALL = @INSTALL@ @@ -163,6 +166,7 @@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MGL_AGE = @MGL_AGE@ MGL_CURRENT = @MGL_CURRENT@ +MGL_RELEASE = @MGL_RELEASE@ MGL_REVISION = @MGL_REVISION@ MKDIR_P = @MKDIR_P@ MOC = @MOC@ @@ -281,7 +285,7 @@ mgl2eps_LDADD = $(top_builddir)/mgl/libmgl.la mgl2svg_SOURCES = mgl2svg.cpp mgl2svg_LDADD = $(top_builddir)/mgl/libmgl.la @USE_FLTK_TRUE@mglview_SOURCES = mglview.cpp -@USE_FLTK_TRUE@mglview_LDADD = $(top_builddir)/widgets/libmgl-fltk.la +@USE_FLTK_TRUE@mglview_LDADD = $(top_builddir)/widgets/libmgl-fltk.la $(top_builddir)/mgl/libmgl.la @USE_FLTK_TRUE@mglview_CXXFLAGS = $(FLTK_FLAGS) $(AM_CXXFLAGS) @USE_GIF_TRUE@mgl2gif_SOURCES = mgl2gif.cpp @USE_GIF_TRUE@mgl2gif_LDADD = $(top_builddir)/mgl/libmgl.la diff --git a/utils/mgl2gif.cpp b/utils/mgl2gif.cpp index f56a683..dcc0b42 100644 --- a/utils/mgl2gif.cpp +++ b/utils/mgl2gif.cpp @@ -70,6 +70,7 @@ int main(int narg, char **arg) printf("\tHere N=0,1...9 is parameter ID and val is its value.\n"); printf("\tOption -Lval set locale to val.\n"); printf("\tOption -Aval add value of $0 for making animation.\n"); + printf("\tOption -Cn1:n2 cycle from n1 to n2 for making animation.\n"); } else { @@ -89,6 +90,18 @@ int main(int narg, char **arg) if(cur) cur = new Str(cur,arg[i]+2); else head = cur = new Str(0,arg[i]+2); } + if(arg[i][0]=='-' && arg[i][1]=='C') + { + int n,n1,n2; + sscanf(arg[i]+2,"%d:%d",&n1,&n2); + char str[64]; + for(n=n1;n2 && arg[2][0]!='-') strcpy(fname,arg[2]); else @@ -99,13 +112,25 @@ int main(int narg, char **arg) // first read animation parameters from file while(!feof(fp)) { - fgetws(str,8192,fp); + if(!fgetws(str,8192,fp)) break; wcstrim_mgl(str); if(str[0]=='#' && str[1]=='#' && str[2]=='a' && str[3]==' ') { if(cur) cur = new Str(cur,str+4); else head = cur = new Str(0,str+4); } + if(str[0]=='#' && str[1]=='#' && str[2]=='c' && str[3]==' ') + { + float v1,v2,dv,v; + wscanf(str+4,"%g %g %g",&v1,&v2,&dv); + char ss[64]; + for(v=v1;vClfOnUpdate) gr->DefaultPlotParam(); - gr->Alpha(flag&1); - gr->Light(flag&2); - gr->View(tet,phi); - gr->Zoom(x1,y1,x2,y2); - gr->DrawFace = !rotate; - - gr->Message = new char[2048]; gr->Message[0] = 0; - draw_func(gr, draw_par); - if(gr->Message[0] != 0) fl_message("%s",gr->Message); - delete []gr->Message; gr->Message = 0; - + if(gr==0) return; + if(draw_func) + { + if(gr!=graph || graph->ClfOnUpdate) gr->DefaultPlotParam(); + gr->Message = new char[2048]; gr->Message[0] = 0; + gr->Alpha(flag&1); + gr->Light(flag&2); + gr->View(tet,phi); + gr->Zoom(x1,y1,x2,y2); + gr->DrawFace = !rotate; + draw_func(gr, draw_par); + if(gr->Message[0] != 0) fl_message("%s",gr->Message); + delete []gr->Message; gr->Message = 0; + } if(gr==graph && (graph->GetWidth()!=w() || graph->GetHeight()!=h())) size(graph->GetWidth(), graph->GetHeight()); - redraw(); + redraw(); Fl::flush(); } //----------------------------------------------------------------------------- void Fl_MathGL::resize(int x, int y, int w, int h) -{ - Fl_Widget::resize(x,y,w,h); -} +{ Fl_Widget::resize(x,y,w,h); } //----------------------------------------------------------------------------- int Fl_MathGL::handle(int code) { @@ -688,7 +687,7 @@ int mglFlRun() { return Fl::run(); } HMGL mgl_create_graph_fltk_dr(HMDR dr, const char *title) { mglGraphFLTK *g = new mglGraphFLTK; - g->Window(0,0,dr,title); + g->Window(0,0,title,dr); return g; } //----------------------------------------------------------------------------- @@ -700,7 +699,7 @@ HMGL mgl_create_graph_fltk(int (*draw)(HMGL gr, void *p), const char *title, voi } //----------------------------------------------------------------------------- void *mgl_fl_tmp(void *) { mglFlRun(); return 0; } -void mgl_fltk_run() { mglFlRun(); } +void mgl_fltk_run() { mglFlRun(); } /*void mgl_fltk_thread() { static pthread_t tmp; diff --git a/widgets/mgl_glut.cpp b/widgets/mgl_glut.cpp index 214d135..70a10a7 100644 --- a/widgets/mgl_glut.cpp +++ b/widgets/mgl_glut.cpp @@ -143,8 +143,7 @@ void _mgl_key_up(unsigned char ch,int ,int ) _mgl_glwnd->WriteEPS(str, "Math GL"); } if(ch==' ') _mgl_glwnd->Clf(); - if(ch=='m') - _mgl_glwnd->tt = _mgl_glwnd->tt==0 ? 1:0; + if(ch=='m') _mgl_glwnd->tt = 1-_mgl_glwnd->tt; rL = rL<0 ? 0 : (rL>5 ? 5 : rL); _mgl_glwnd->Light(0,mglPoint(rL*cos(pL)*sin(tL), rL*sin(pL)*sin(tL), rL*cos(tL)),false); _mgl_glwnd->Alpha(Alpha); @@ -211,7 +210,7 @@ void mglGraphGLUT::Window(int argc, char **argv,int (*draw)(mglGraph *gr, void * HMGL mgl_create_graph_glut(HMDR dr, const char *title) { mglGraphGLUT *g = new mglGraphGLUT; - g->Window(0,0,dr,title); + g->Window(0,0,title,dr); return g; } //----------------------------------------------------------------------------- diff --git a/widgets/mgl_qt.cpp b/widgets/mgl_qt.cpp index 2079db1..b7c0d0f 100644 --- a/widgets/mgl_qt.cpp +++ b/widgets/mgl_qt.cpp @@ -110,7 +110,7 @@ void QMathGL::paintEvent(QPaintEvent *) //----------------------------------------------------------------------------- void QMathGL::resizeEvent(QResizeEvent *ev) { - if(autoResize) + if(autoResize && ev->size().width()>0 && ev->size().height()>0) { graph->SetSize(ev->size().width(), ev->size().height()); update(); } else resize(graph->GetWidth(), graph->GetHeight()); } @@ -190,16 +190,18 @@ void QMathGL::zoomOut() void QMathGL::update(mglGraph *gr) { if(gr==0) gr = graph; - if(gr==0 || draw_func==0) return; + if(gr==0) return; + if(draw_func==0) { refresh(); return; } if(gr!=graph || graph->ClfOnUpdate) gr->DefaultPlotParam(); + char *buf=new char[2048]; buf[0]=0; gr->Message = buf; + gr->Alpha(alpha); gr->Light(light); gr->View(tet,phi); gr->Org = mglPoint(NAN,NAN,NAN); gr->Perspective(per); gr->Zoom(x1,y1,x2,y2); gr->DrawFace = !rotate; - - char *buf=new char[2048]; buf[0]=0; gr->Message = buf; - draw_func(gr, draw_par); + draw_func(gr, draw_par); + if(buf[0] != 0) QMessageBox::warning(this, appName, buf); gr->Message = 0; delete []buf; mousePos=""; @@ -430,24 +432,19 @@ void QMathGL::aboutQt() { QMessageBox::aboutQt(this, tr("About Qt")); } void QMathGL::print() { QPrinter *printer = new QPrinter; + printer->setOrientation(getRatio()>1 ? QPrinter::Landscape : QPrinter::Portrait); QPrintDialog printDlg(printer, this); if (printDlg.exec() == QDialog::Accepted) { - QPainter p; - if(!p.begin(printer)) return; // paint on printer - QRect r = p.viewport(); - int w = r.width(), h = r.height(), h1; - h1 = int(w/getRatio()); - if(h1 240000) gr.BaseLineWidth = sqrt(w*h/2.4e5); - update(&gr); - - uchar *grBuf=0; - QPixmap pic; - convertFromGraph(pic, &gr, &grBuf); - p.drawPixmap(0,0,pic); - delete []grBuf; + QRectF r = printer->pageRect(QPrinter::Inch); + int d1 = int(pic.width()/r.width()), d2 = int(pic.height()/r.height()); + int dpi = printer->resolution(); + if(dpisetResolution(dpi); + + QPainter p; + if(!p.begin(printer)) return; // paint on printer + p.drawPixmap(0,0,pic); } delete printer; } @@ -579,22 +576,21 @@ void mglGraphQT::Window(int argc, char **argv, int (*draw)(mglGraph *gr, void *p Wnd = new QMainWindow; Wnd->resize(650,480); Wnd->setWindowTitle(title); scroll = new QScrollArea(Wnd); - QMGL = new QMathGL(Wnd); + QMGL = new QMathGL(Wnd); makeMenu(); QMGL->setPopup(popup); QMGL->setGraph(this); QMGL->setDraw(draw, par); - makeMenu(); qApp->processEvents(); + qApp->processEvents(); scroll->setWidget(QMGL); Wnd->setCentralWidget(scroll); QMGL->update(); - if(maximize) - { Wnd->showMaximized(); } - else Wnd->show(); + if(!maximize) Wnd->show(); + else Wnd->showMaximized(); } //----------------------------------------------------------------------------- HMGL mgl_create_graph_qt_dr(HMDR dr, const char *title) { mglGraphQT *g = new mglGraphQT; - g->Window(0,0,dr,title); + g->Window(0,0,title,dr); return g; } //----------------------------------------------------------------------------- @@ -626,6 +622,7 @@ void *mgl_qt_tmp(void *) { mglQtRun(); return 0; } pthread_detach(tmp); }*/ //----------------------------------------------------------------------------- +void mgl_qt_run() { mglQtRun(); } void mgl_qt_run_() { mglQtRun(); } //----------------------------------------------------------------------------- #define TR QObject::tr diff --git a/widgets/mgl_wx.cpp b/widgets/mgl_wx.cpp index 7383c84..313972b 100644 --- a/widgets/mgl_wx.cpp +++ b/widgets/mgl_wx.cpp @@ -22,6 +22,8 @@ #include #include #include +#include + #include "mgl/mgl_idtf.h" #include "mgl/mgl_eps.h" #include "mgl/mgl_wx.h" @@ -91,7 +93,7 @@ void wxMathGL::OnSize(wxSizeEvent& event) wxSize ev = event.GetSize(); if(graph->GetWidth()==ev.GetWidth() && graph->GetHeight()==ev.GetHeight()) return; - if(AutoResize) + if(AutoResize && ev.GetWidth()>0 && ev.GetHeight()>0) { graph->SetSize(ev.GetWidth(), ev.GetHeight()); Update(); } else SetSize(graph->GetWidth(), graph->GetHeight()); } @@ -99,10 +101,7 @@ void wxMathGL::OnSize(wxSizeEvent& event) void wxMathGL::OnNextSlide(wxTimerEvent& evt) { NextSlide(); } //----------------------------------------------------------------------------- void wxMathGL::SetPer(int p) -{ - if(per!=p && p>=0 && p<100) - { per = 100*p; Update(); } -} +{ if(per!=p && p>=0 && p<100) { per = 100*p; Update(); } } //----------------------------------------------------------------------------- void wxMathGL::SetPhi(int p) { if(phi!=p) { phi = p; Update(); } } @@ -539,7 +538,7 @@ void mglGraphWX::Window(int argc, char **argv, int (*draw)(mglGraph *gr, void *p int n = draw ? draw(this,par) : 0; if(n=0) NumFig = n; DrawFunc = draw; FuncPar = par; - LoadFunc = reload; + LoadFunc = reload; popup = 0; if(Wnd) { Wnd->SetLabel(wxString(title,wxConvLibc)); @@ -552,17 +551,29 @@ void mglGraphWX::Window(int argc, char **argv, int (*draw)(mglGraph *gr, void *p if(!wxTheApp) { new wxApp; wxTheApp->SetExitOnFrameDelete(true); } Wnd = new wxWindow; Wnd->SetSize(650,480); - Wnd->SetLabel(wxString(title,wxConvLibc)); + Wnd->SetLabel(wxString(title,wxConvLibc)); + scroll = new wxScrolledWindow(Wnd); - WMGL = new wxMathGL(scroll); + WMGL = new wxMathGL(scroll); MakeMenu(); WMGL->SetPopup(popup); WMGL->SetGraph(this); WMGL->SetDraw(draw, par); - MakeMenu(); + WMGL->Update(); if(maximize) Wnd->SetSize(Wnd->GetMaxSize()); Wnd->Show(); } -//----------------------------------------------------------------------------- +//----------------------------------------------------------------------------- +void mglGraphWX::MakeMenu() +{ +/* wxMenuBar *m = new wxMenuBar; + wxMenu *o, *oo; + + o = new wxMenu; m->Append(o, wxT("&File")); + oo= new wxMenu; o->AppendSubMenu(oo,wxT("&Export as ...")); + o->Append(wxID_EXIT, wxT("&Close")); + Wnd->Connect(wxID_EXIT, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler(wxWindow::Close)); +*/ +} /*void mglGraphQT::makeMenu() { QAction *a; @@ -721,7 +732,7 @@ void mglGraphWX::Window(int argc, char **argv, int (*draw)(mglGraph *gr, void *p HMGL mgl_create_graph_wx_dr(HMDR dr, const char *title) { mglGraphWX *g = new mglGraphWX; - g->Window(0,0,dr,title); + g->Window(0,0,title,dr); return g; } //----------------------------------------------------------------------------- @@ -747,5 +758,4 @@ int mglWxRun() { return wxTheApp ? wxTheApp->MainLoop():0; } //----------------------------------------------------------------------------- void mgl_wx_run_() { mglWxRun(); } //----------------------------------------------------------------------------- -#endif -//----------------------------------------------------------------------------- +#endif \ No newline at end of file -- 2.30.2
  • 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 literal 0 HcmV?d00001 diff --git a/fonts/STIX_b.vfm b/fonts/STIX_b.vfm new file mode 100644 index 0000000000000000000000000000000000000000..6bec32c8fc46e2f743e0b953536f8737b9f697b0 GIT binary patch literal 577874 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

    EjXNSKu2 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